将换行符插入PDF

时间:2009-05-14 06:15:52

标签: php pdf fpdf carriage-return

我正在使用PHP生成一些PDF文件。我的问题是我需要在将插入PDF文件的文本的某些部分插入换行符。类似的东西:

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

所以打印出来:

  

第一行

     

第二行

我知道\n不能用于PDF,但是你们知道任何代表这些文件换行符的字符或东西吗?

12 个答案:

答案 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);

很适合我......