我正在使用 PHP 即时生成一些 PDF 文件。我的问题是我需要在将插入 PDF 文件中的部分文本中插入换行符。就像是:
$pdf->InsertText('Line one\n\nLine two');
所以它打印:
第一行
第二行
我知道\n
不适用于 PDF,但是你们知道代表这些文件的换行符的任何字符或东西吗?
我正在使用 PHP 即时生成一些 PDF 文件。我的问题是我需要在将插入 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()
然后减去SetXY()
语句中使用的原始 Y 值来首先放置 Multicell。
另一种选择是使用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 中的换行符一样。
在做了这么多噩梦之后,我找到了解决办法。
utf8_decode(chr(10))
我试过了\n
,<br/>
但chr(10)
没有任何效果。然后我意识到它是utf-8
并且只是尝试了上面的那个。它适用于MultiCell
但不适用于Cell
.
我只是\n
用“ <br>
”标签替换了“”。工作得很好。似乎 TCPDF 将文本呈现为 HTML
$strText = str_replace("\n","<br>",$strText);
$pdf->MultiCell($width, $height,$strText, 0, 'J', 0, 1, '', '', true, null, true);
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。
我找到的解决方案是:
$text = 'Line one\n\nLine two');
$text = explode('\n', $text);
foreach ($text as $txt){
$pdf->Write($txt);
$pdf->Ln();
}
因此,这样,您可以在任何位置有任意数量的 \n,如果您从数据库中动态地获取此文本,它将正确地换行。
$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);
或者只是在每个文本段落之后尝试这个换行。
$pdf->Write(0, ' ', '*', 0, 'C', TRUE, 0, false, false, 0) ;
也许为时已晚,但我以一种非常简单的方式解决了这个问题,我正在使用 Multicell 选项并且文本来自表单,如果我使用输入字段来获取文本,我无法在任何文本中插入换行符方式,但是如果使用 textarea 字段,则文本区域中的换行符是多单元格中的换行符......就是这样,即使我使用utf8_encode($text)
选项来保留重音符号,它也可以工作
另一种解决方案(与 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);
对我很有效....