Я создаю файл 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);