TCPDF での手動改ページ
-
05-07-2019 - |
質問
私のプロジェクトの 1 つで TCPDF を使用して PDF を生成しています。私は単純に HTML ファイルを作成し、それを TCPDF に渡して PDF 生成を処理します。しかし、現在、複数の証明書が次々に追加される HTML があり、その中に改ページを入れたいと考えています。改ページは HTML によって決定される必要があります。HTML 内に TCPDF が認識し、それに応じて生成された PDF に改ページを追加する識別子があるかどうかを知りたいです。
どうすればこんなことができるでしょうか?
解決
<br pagebreak="true"/>
を使用しています。
メソッドの検索 writeHTML およびコード
if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) {
// check for pagebreak
if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
if ((($dom[$key]['attribute']['pagebreak'] == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0))))
OR (($dom[$key]['attribute']['pagebreak'] == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) {
// add a page (or trig AcceptPageBreak() for multicolumn mode)
$this->checkPageBreak($this->PageBreakTrigger + 1);
}
}
他のヒント
TCPDF を使用することもできます AddPage() と組み合わせた方法 爆発() および適切な区切り文字:
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8',
false);
// TCPDF initialization code (...)
$delimiter = '<h1>';
$html = file_get_contents('./test.html');
$chunks = explode($delimiter, $html);
$cnt = count($chunks);
for ($i = 0; $i < $cnt; $i++) {
$pdf->writeHTML($delimiter . $chunks[$i], true, 0, true, 0);
if ($i < $cnt - 1) {
$pdf->AddPage();
}
}
// Reset pointer to the last page
$pdf->lastPage();
// Close and output PDF document
$pdf->Output('test.pdf', 'I');
使用してみました
<br pagebreak="true" />
または
<tcpdf method="AddPage" />
それらのそれぞれは、ページの上部から新しいページを開始するのではなく、HTMLテキストの間にA4ページの完全な空きスペースを追加しました。したがって、テキストがページの途中で終了し、改ページが挿入された場合、新しいテキストは次のページの途中から書き込まれます。欲しくなかった。
これでうまくいきました(ここで見つけました TCPDF強制新しいページ):
$pdf->writeHTML($content, true, 0, true, 0);
$pdf->AddPage();
$pdf->setPage($pdf->getPage());
これは、ページの上部にテキストを書き込むことから始まります。
TCPDFは、HTMLタグの「pagebreak」属性と、CSSプロパティ「page-break-before」および「page-break-after」をサポートします。
たとえば、<br pagebreak="true" />
を使用できます。
詳細については、公式の http://www.tcpdf.org Webサイトおよびフォーラムを確認してください。
2011-12-23のバージョン5.9.142では、次のようにpage-break-before, page-break-inside
cssプロパティを使用できます:
<div style="page-break-inside:avoid;">
some non breakable text
</div>
http://www.tcpdf.org/examples/example_049.phpsこのようなものを使用できます
$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>';
TCPDF構成ファイルのパラメーターK_TCPDF_CALLS_IN_HTMLが正しいことを確認する必要があります。
この方法に従ってニーズを達成することもできます:
$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE";
// output the HTML content
$pdf->writeHTML($htmlcontent1, true, 0, true, 0);
// reset pointer to the last page
$pdf->lastPage();
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Print a table
// add a page
$pdf->AddPage();
$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE";
// output the HTML content
$pdf->writeHTML($htmlcontent1, true, 0, true, 0);
// reset pointer to the last page
$pdf->lastPage();
// ---------------------------------------------------------
//Close and output PDF document
$pdf->Output('textcertificate.pdf', 'D');
誰かに役立つことを願っています:)
ありがとう
CSSを介してエレメントにpage-break-after
、page-break-before
またはpage-break-inside
プロパティを与えると、TCPDFランタイム中に属性pagebreak
またはpagebreakafter
がhtmlタグに適用されます。
// page-break-inside
if (isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside'] == 'avoid')) {
$dom[$key]['attribute']['nobr'] = 'true';
}
// page-break-before
if (isset($dom[$key]['style']['page-break-before'])) {
if ($dom[$key]['style']['page-break-before'] == 'always') {
$dom[$key]['attribute']['pagebreak'] = 'true';
} elseif ($dom[$key]['style']['page-break-before'] == 'left') {
$dom[$key]['attribute']['pagebreak'] = 'left';
} elseif ($dom[$key]['style']['page-break-before'] == 'right') {
$dom[$key]['attribute']['pagebreak'] = 'right';
}
}
// page-break-after
if (isset($dom[$key]['style']['page-break-after'])) {
if ($dom[$key]['style']['page-break-after'] == 'always') {
$dom[$key]['attribute']['pagebreakafter'] = 'true';
} elseif ($dom[$key]['style']['page-break-after'] == 'left') {
$dom[$key]['attribute']['pagebreakafter'] = 'left';
} elseif ($dom[$key]['style']['page-break-after'] == 'right') {
$dom[$key]['attribute']['pagebreakafter'] = 'right';
}
}