我正在使用PHP生成一些PDF文件。我的问题是我需要在将插入PDF文件的文本的某些部分插入换行符。就像是:
$pdf->InsertText('Line one\n\nLine two');
所以它打印:
第一行
第二行
我知道\n
不适用于PDF,但你们知道任何字符或代表这些文件换行符的东西吗?
如果您使用的是fpdf,为了能够使用换行符,您需要使用multi-line text cell as described here。
如果使用此选项,则应正确解释和转换文本中的换行符。
只是一个简单的例子:
$pdf->Multicell(0,2,"This is a multi-line text string\nNew line\nNew line");
这里,2是多行文本框的高度。我不知道测量的单位是什么,或者你可以将它设置为0并忽略它。如果一开始它不起作用,也许可以尝试使用大量数字。
我发现的解决方案是:
$text = 'Line one\n\nLine two');
$text = explode('\n', $text);
foreach ($text as $txt){
$pdf->Write($txt);
$pdf->Ln();
}
所以这样,你可以在任何位置有任意数量的\ n,如果你从数据库中得到这个文本,它会严重地破坏线条。
也许为时已晚,但我以一种非常简单的方式解决了这个问题,我使用的是Multicell选项而且文本来自一个表单,如果我使用输入字段来获取文本我不能在任何地方插入换行符方式,但是如果使用textarea字段,文本区域中的换行符就是多单元格中的换行符...就是这样,即使我使用utf8_encode($text)
选项来保留重音符号也能正常工作
或者在每个文本段落之后尝试使用新行。
$pdf->Write(0, ' ', '*', 0, 'C', TRUE, 0, false, false, 0) ;
另一种解决方案(适用于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);
对我很有帮助....
你的代码读了
$pdf->InsertText('Line one\n\nLine two');
我不知道您正在使用的PDF库,但通常如果您希望\ n被解释为换行符,您必须在PHP中使用双引号,例如
$pdf->InsertText("Line one\n\nLine two");
我为chr(10)更改了'\n'
并且它有效:
$pdf->MultiCell(0,5,utf8_decode($variable1 . chr(10) . $variable2),1);
你陈述了
2是多行文本框的高度
不,这不对。 2是文本行之间的距离。
我认为没有一种真正的方法来计算实际结果文本框的高度,除非你使用GetY()
然后减去你的SetXY()
语句中用于放置Multicell的原始Y值。
另一种选择是使用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
相同,就像文本中的换行符或HTML中的<br>
一样。
我只是用“\n
”标签取代了“<br>
”。工作得很好。似乎TCPDF将文本呈现为HTML
$strText = str_replace("\n","<br>",$strText);
$pdf->MultiCell($width, $height,$strText, 0, 'J', 0, 1, '', '', true, null, true);
在经历了这么多噩梦之后,我找到了解决方案。
utf8_decode(chr(10))
我尝试了\n
,<br/>
和chr(10)
,但没有任何效果。然后我意识到这是utf-8
,只是尝试了上面的那个。它适用于MultiCell
但不适用于Cell
。
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。
$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);
希望能帮助到你..