Подтвердить что ты не робот

Вставка разрывов строк в PDF

Я создаю файл PDF на лету, используя PHP. Моя проблема в том, что мне нужно вставлять разрывы строк в часть текста, которая будет вставлена ​​в файл PDF. Что-то вроде:

$pdf->InsertText('Line one\n\nLine two');

Итак, он печатает:

Линия первая

Линия вторая

Я знаю, что \n не работает в PDF, но знаете ли вы какого-либо персонажа или что-то, что представляет собой разрыв строки в этих файлах?

4b9b3361

Ответ 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);