Вставка разрывов строк в PDF
Я создаю файл PDF на лету, используя PHP. Моя проблема в том, что мне нужно вставлять разрывы строк в часть текста, которая будет вставлена в файл PDF. Что-то вроде:
$pdf->InsertText('Line one\n\nLine two');
Итак, он печатает:
Линия первая
Линия вторая
Я знаю, что \n
не работает в PDF, но знаете ли вы какого-либо персонажа или что-то, что представляет собой разрыв строки в этих файлах?
Ответы
Ответ 1
Если вы используете fpdf, чтобы использовать разрывы строк, вам понадобится многострочная текстовая ячейка, как описано здесь.
Если вы используете это, то разрывы строк в тексте должны быть правильно интерпретированы и преобразованы.
Просто быстрый пример:
$pdf->Multicell(0,2,"This is a multi-line text string\nNew line\nNew line");
Здесь 2 - высота многострочного текстового поля. Я не знаю, какие единицы измерения измерялись или вы можете просто установить его на 0 и игнорировать его. Возможно, попробуйте его с большим количеством, если сначала это не сработает.
Ответ 2
Ваш код читает
$pdf->InsertText('Line one\n\nLine two');
Я не знаю о библиотеке PDF, которую вы используете, но обычно, если вы хотите, чтобы \n интерпретировался как разрыв строки, вы должны использовать двойные кавычки в PHP, например.
$pdf->InsertText("Line one\n\nLine two");
Ответ 3
Я изменил '\n'
на chr (10), и он сработал:
$pdf->MultiCell(0,5,utf8_decode($variable1 . chr(10) . $variable2),1);
Ответ 4
Вы заявляете, что
2 - высота многострочного текстового поля
Нет, нет.
2 - расстояние между строками текста.
Я не думаю, что существует реальный способ вычисления высоты фактического итогового текстового поля, если вы не используете GetY()
, а затем вычтите исходное значение Y, используемое в инструкции SetXY()
, для размещения Multicell в первое место.
Ответ 5
Другой вариант - использовать TCPDF::Ln()
. Он добавляет строку в PDF с возможностью установить высоту.
Если символы новой строки уже есть в вашем контенте, тогда, как уже упоминали другие, возможно, MultiCell()
- это то, что нужно, но я считаю, что мне нравится использовать:
$pdf->Cell(0, 0, 'Line 1', 0, 0, 'C');
$pdf->Ln();
$pdf->Cell(0, 0, 'Line 2', 0, 0, 'C');
Меня смущает, что Cell()
и MultiCell()
принимают разные аргументы, поэтому я склонен использовать только Cell()
. Также он читается как символ новой строки для PDF, так же, как \n
читается как символ новой строки в тексте или как <br>
в HTML.
Ответ 6
Я просто заменил "\n
" тегом "<br>
". Отлично. Кажется, TCPDF визуализирует текст как HTML
$strText = str_replace("\n","<br>",$strText);
$pdf->MultiCell($width, $height,$strText, 0, 'J', 0, 1, '', '', true, null, true);
Ответ 7
После стольких кошмаров я нашел решение.
utf8_decode(chr(10))
Я пробовал \n
, <br/>
и chr(10)
, но ничего не получилось. Тогда я понял, что это было utf-8
и просто попробовал выше. Он отлично работает с MultiCell
, но не с Cell
.
Ответ 8
MultiCell($w, $h, 'text<br />', $border=0, $align='L', $fill=1, $ln=0,
$x='', $y='', $reseth=true, $reseth=0, $ishtml=true, $autopadding=true,
$maxh=0);
Вы можете настроить MultiCell
на чтение html на базовом уровне.
Ответ 9
$pdf->SetY($Y_Fields_Name_position);
$pdf->SetX(#);
$pdf->MultiCell($height,$width,"Line1 \nLine2 \nLine3",1,'C',1);
В каждой колонке, прежде чем вы установите положение X, сначала укажите позицию Y, так что она стала такой:
Столбец 1
$pdf->SetY($Y_Fields_Name_position);
$pdf->SetX(#);
$pdf->MultiCell($height,$width,"Line1 \nLine2 \nLine3",1,'C',1);
Столбец 2
$pdf->SetY($Y_Fields_Name_position);
$pdf->SetX(#);
$pdf->MultiCell($height,$width,"Line1 \nLine2 \nLine3",1,'C',1);
Надеюсь, что это поможет.
Ответ 10
Возможно, уже слишком поздно, но я решил эту проблему очень просто,
Я использую параметр Multicell, и текст приходит из формы, если я использую поле ввода, чтобы получить текст, я никак не могу вставлять разрывы строк, но если использовать поле textarea, строка разбивается на текстовую область. разрывы строк в многоячейке... и это все, это работает, даже если я использую параметр utf8_encode($text)
для сохранения акцентов
Ответ 11
Или просто попробуйте это после каждого текстового прохода для новой строки.
$pdf->Write(0, ' ', '*', 0, 'C', TRUE, 0, false, false, 0) ;
Ответ 12
Другие решения (работает с TCPDF)
Используйте HEREDOC для длинной строки. Поместите HERDOC для CONST, например (определите разные языки)
$_prepare_const_EN = <<<EOT
this is a long string
and new line as well ...
EOT;
$define('STR_EN', $_prepare_const_EN);
$pdf->InsertText(STR_EN);
работает для меня очень хорошо....
Ответ 13
Решение, которое я нашел, было:
$text = 'Line one\n\nLine two');
$text = explode('\n', $text);
foreach ($text as $txt){
$pdf->Write($txt);
$pdf->Ln();
}
Таким образом, вы можете иметь любое число \n в любой позиции, если вы получаете этот текст динамически из базы данных, он будет корректно разбивать строки.
Ответ 14
Использование \n
- все хорошо и хорошо, но это тоже работает и намного проще:
$pdf->MultiCell(0,5,"Line one here
Line 2 here
Line 3 here",0);