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

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

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

Поэтому он печатает:

Линия первая

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

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

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

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

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

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

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

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

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

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

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

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

 $pdf->MultiCell(0,5,utf8_decode($variable1 . chr(10) . $variable2),1); 

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

2 – высота многострочного текстового окна

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

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

Я просто заменил « \n » тегом « <br> ». Отлично. Кажется, TCPDF визуализирует текст как HTML

 $strText = str_replace("\n","<br>",$strText); $pdf->MultiCell($width, $height,$strText, 0, 'J', 0, 1, '', '', true, null, true); 

Другой вариант – использовать TCPDF::Ln() . Он добавляет строку в PDF с возможностью установки высоты.

Если MultiCell() строки уже находятся в вашем контенте, то 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 читается как символ новой строки в тексте или в HTML.

 $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); 

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

Может быть, слишком поздно, но я решил эту проблему очень просто, я использую параметр Multicell, и текст приходит из формы, если я использую поле ввода, чтобы получить текст, я не могу вставлять разрывы строк в любом путь, но если использовать поле textarea, строка разбивается на текстовую область, это разрывы строк в многоячейке … и это все, это работает, даже если я использую параметр utf8_encode($text) для сохранения акцентов

Или просто попробуйте это после каждого текстового прохода для новой строки.

$pdf->Write(0, ' ', '*', 0, 'C', TRUE, 0, false, false, 0) ;

 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 на базовом уровне.

Другие решения (работает с 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); 

работает для меня очень хорошо ….

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

 utf8_decode(chr(10)) 

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

Использование \n – все хорошо и хорошо, но это тоже работает и намного проще:

 $pdf->MultiCell(0,5,"Line one here Line 2 here Line 3 here",0);