Вставка разрывов строк в PDF - PullRequest
33 голосов
/ 14 мая 2009

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

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

Так что печатает:

Первая строка

Вторая строка

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

Ответы [ 13 ]

39 голосов
/ 14 мая 2009

Если вы используете fpdf, чтобы иметь возможность использовать разрывы строк, вам нужно будет использовать многострочную текстовую ячейку , как описано здесь .

Если вы используете это, то разрывы строк в вашем тексте должны быть правильно интерпретированы и преобразованы.

Просто быстрый пример:

$pdf->Multicell(0,2,"This is a multi-line text string\nNew line\nNew line"); 

Здесь 2 - высота многострочного текстового поля. Я не знаю, в каких единицах измерения это измерено, или вы можете просто установить его в 0 и игнорировать его. Возможно, попробуйте это с большим числом, если сначала это не сработает.

15 голосов
/ 14 мая 2009

Ваш код читает

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

Я не знаю, какую библиотеку PDF вы используете, но обычно, если вы хотите, чтобы \ n интерпретировался как разрыв строки, вы должны использовать двойные кавычки в PHP, например,

$pdf->InsertText("Line one\n\nLine two");
11 голосов
/ 25 июня 2016

Я изменил '\n' на chr (10) и все заработало:

$pdf->MultiCell(0,5,utf8_decode($variable1 . chr(10) . $variable2),1);
6 голосов
/ 02 февраля 2010

Вы заявляете, что

2 - высота многострочного текстового поля

Нет, это не так. 2 - расстояние между строками текста.

Я не думаю, что есть реальный способ для вычисления высоты фактического результирующего текстового поля, если только вы не используете GetY(), а затем вычтите исходное значение Y, использованное в вашем операторе SetXY() для размещения Multicell в первое место.

5 голосов
/ 27 августа 2015

Я просто заменил "\n" на тег "<br>". Работал нормально. Кажется, TCPDF отображает текст в формате HTML

$strText = str_replace("\n","<br>",$strText);
$pdf->MultiCell($width, $height,$strText, 0, 'J', 0, 1, '', '', true, null, true);
5 голосов
/ 20 июня 2013

Другой вариант - использовать 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.

4 голосов
/ 11 ноября 2017

После стольких ночных кошмаров я нашел решение.

utf8_decode(chr(10))

Я пробовал \n, <br/> и chr(10), но ничего не получалось. Тогда я понял, что это было utf-8 и только что попробовал вышеупомянутое. Он отлично работает с MultiCell, но не с Cell.

2 голосов
/ 23 мая 2014
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 на базовом уровне.

1 голос
/ 27 марта 2019

Решение, которое я нашел, было:

$text = 'Line one\n\nLine two');
$text = explode('\n', $text);

foreach ($text as $txt){
    $pdf->Write($txt);
    $pdf->Ln();
}

Таким образом, вы можете иметь любое число \ n в любой позиции, если вы динамически получаете этот текст из базы данных, он будет корректно разбивать строки.

1 голос
/ 14 мая 2013
$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);

Надеюсь, это поможет ..

...