web-dev-qa-db-ja.com

PDFに改行を挿入する

PHPを使用してその場でPDFファイルを生成しています。私の問題は、PDFファイル。次のようなものです。

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

したがって、印刷されます:

一行目

2行目

知っている \nはPDFでは機能しませんが、これらのファイルの改行を表す文字または何かを知っていますか?

34
Carlo

Fpdfを使用している場合、改行を使用できるようにするには、 ここで説明する複数行のテキストセル を使用する必要があります。

これを使用する場合、テキストの改行は正しく解釈および変換される必要があります。

簡単な例:

$pdf->Multicell(0,2,"This is a multi-line text string\nNew line\nNew line"); 

ここで、2は複数行テキストボックスの高さです。どの単位で測定されているのか、または単に0に設定して無視できるのかはわかりません。最初は機能しない場合は、おそらく多数試してみてください。

39
thomasrutter

あなたのコードは

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

使用しているPDFライブラリについては知りませんが、通常、\ nを改行として解釈する場合は、PHPで二重引用符を使用する必要があります。

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

私が変更され '\n' for chr(10)そしてそれは機能しました:

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

もう1つのオプションは、 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>_と同じです。

6
J.Money

あなたはそれを述べる

2は複数行のテキストボックスの高さです

いいえ、ちがいます。 2はテキストの行間の距離です。

GetY()を使用してからSetXY()ステートメントで使用された元のY値を減算しない限り、実際の結果のテキストボックスの高さを計算する実際の方法はないと思います最初にマルチセルを配置します。

6
Nicolas

私は単に「\n」と「<br> "タグ。正常に動作しました。TCPDFはテキストをHTMLとしてレンダリングしているようです

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

多くの悪夢を見て、解決策を見つけました。

_utf8_decode(chr(10))
_

_\n_、_<br/>_およびchr(10)を試しましたが、何も機能しませんでした。それから、それが_utf-8_であることに気づき、上記のものを試してみました。 MultiCellでは正常に動作しますが、Cellでは動作しません。

4
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を読み取ることができます。

2
dummy

私が見つけた解決策は次のとおりです。

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

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

したがって、この方法では、任意の位置に任意の数の\ nを含めることができます。データベースからこのテキストを動的に取得している場合、行が正しく分割されます。

1
David Alves
$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);

それが役に立てば幸い..

1
zeus2026

または、新しい行の各テキストパッセージの後にこれを試してください。

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

0
raf_qpsk

別のソリューション(TCPDFで動作)

長い文字列にはHEREDOCを使用します。たとえば、CONSTにHERDOCを配置します(異なる言語を定義します)

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

私にとってはうまくいく....

0
Ja Loc

多分遅すぎるかもしれませんが、この問題を非常に簡単な方法で解決しました。マルチセルオプションを使用しています。フォームからテキストを取得します。入力フィールドを使用してテキストを取得すると、方法ですが、textareaフィールドを使用する場合、テキスト領域の改行はマルチセルの改行です...そしてそれは、アクセントを保持するためにutf8_encode($text)オプションを使用しても機能します

0
Felipe