我正在使用PHP生成一些PDF文件。我的问题是我需要在将插入PDF文件的文本的某些部分插入换行符。类似的东西:
$pdf->InsertText('Line one\n\nLine two');
所以打印出来:
第一行
第二行
我知道\n
不能用于PDF,但是你们知道任何代表这些文件换行符的字符或东西吗?
答案 0 :(得分:38)
如果您使用的是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并忽略它。如果一开始它不起作用,也许可以尝试使用大量数字。
答案 1 :(得分:15)
您的代码为
$pdf->InsertText('Line one\n\nLine two');
我不知道您正在使用的PDF库,但通常如果您希望将\ n解释为换行符,则必须在PHP中使用双引号,例如。
$pdf->InsertText("Line one\n\nLine two");
答案 2 :(得分:11)
我为{strong> chr(10)更改了'\n'
并且有效:
$pdf->MultiCell(0,5,utf8_decode($variable1 . chr(10) . $variable2),1);
答案 3 :(得分:6)
你说明了
2是多行文本框的高度
不,不是。 2是文本行之间的距离。
我认为没有一种真正的方法来计算实际结果文本框的高度,除非您使用GetY()
然后减去SetXY()
语句中用于放置的原始Y值首先是Multicell。
答案 4 :(得分:5)
另一种选择是使用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>
一样。
答案 5 :(得分:4)
在做了这么多噩梦之后,我找到了解决方案。
utf8_decode(chr(10))
我尝试了\n
,<br/>
和chr(10)
,但没有任何效果。然后我意识到它是utf-8
并且只是尝试了上面的那个。它适用于MultiCell
,但不适用于Cell
。
答案 6 :(得分:2)
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。
答案 7 :(得分:1)
$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);
希望有所帮助......
答案 8 :(得分:1)
我找到的解决方案是:
$text = 'Line one\n\nLine two');
$text = explode('\n', $text);
foreach ($text as $txt){
$pdf->Write($txt);
$pdf->Ln();
}
这样,您可以在任意位置使用任意数量的\ n,如果从数据库中以动态方式获取此文本,则会正确地换行。
答案 9 :(得分:0)
也许为时已晚,但我以一种非常简单的方式解决了这个问题,
我正在使用Multicell选项并且文本来自表单,如果我使用输入字段来获取文本我不能以任何方式插入换行符,但是如果使用textarea字段,则文本区域中的换行符是多单元中的换行符...就是这样,即使我使用utf8_encode($text)
选项来保留重音,它也能正常工作
答案 10 :(得分:0)
或者在每个文本段落之后尝试使用新行。
$pdf->Write(0, ' ', '*', 0, 'C', TRUE, 0, false, false, 0) ;
答案 11 :(得分: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);
很适合我......