将换行符插入PDF

问题描述 投票:33回答:13

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

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

所以它打印:

第一行

第二行

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

php pdf fpdf carriage-return
13个回答
39
投票

如果您使用的是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
投票

我发现的解决方案是:

$text = 'Line one\n\nLine two');
$text = explode('\n', $text);

foreach ($text as $txt){
    $pdf->Write($txt);
    $pdf->Ln();
}

所以这样,你可以在任何位置有任意数量的\ n,如果你从数据库中得到这个文本,它会严重地破坏线条。


0
投票

也许为时已晚,但我以一种非常简单的方式解决了这个问题,我使用的是Multicell选项而且文本来自一个表单,如果我使用输入字段来获取文本我不能在任何地方插入换行符方式,但是如果使用textarea字段,文本区域中的换行符就是多单元格中的换行符...就是这样,即使我使用utf8_encode($text)选项来保留重音符号也能正常工作


0
投票

或者在每个文本段落之后尝试使用新行。

$pdf->Write(0, ' ', '*', 0, 'C', TRUE, 0, false, false, 0) ;


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

对我很有帮助....


15
投票

你的代码读了

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

我不知道您正在使用的PDF库,但通常如果您希望\ n被解释为换行符,您必须在PHP中使用双引号,例如

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

11
投票

我为chr(10)更改了'\n'并且它有效:

$pdf->MultiCell(0,5,utf8_decode($variable1 . chr(10) . $variable2),1);

6
投票

你陈述了

2是多行文本框的高度

不,这不对。 2是文本行之间的距离。

我认为没有一种真正的方法来计算实际结果文本框的高度,除非你使用GetY()然后减去你的SetXY()语句中用于放置Multicell的原始Y值。


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
投票

我只是用“\n”标签取代了“<br>”。工作得很好。似乎TCPDF将文本呈现为HTML

$strText = str_replace("\n","<br>",$strText);
$pdf->MultiCell($width, $height,$strText, 0, 'J', 0, 1, '', '', true, null, true);

4
投票

在经历了这么多噩梦之后,我找到了解决方案。

utf8_decode(chr(10))

我尝试了\n<br/>chr(10),但没有任何效果。然后我意识到这是utf-8,只是尝试了上面的那个。它适用于MultiCell但不适用于Cell


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。


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

希望能帮助到你..

© www.soinside.com 2019 - 2024. All rights reserved.