webdevqa.jp.net

TCPDFの手動改ページ

TCPDFを使用して、プロジェクトの1つでPDFを生成します。HTMLファイルを作成し、TCPDFに渡してPDF生成を処理します。しかし、今では複数の証明書が次々に追加されているHTMLがあり、改ページをHTMLで決定する必要があります。つまり、HTMLにTCPDFが理解する識別子があるかどうかを知りたいしたがって、生成されたPDFに改ページが追加されます。

どうすればこれができますか?

35
swapnilsarwe

<br pagebreak="true"/>を使用しています。

Findメソッド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);
    }
}
69
AmdY

TCPDFのAddPage()メソッドとexplode()および適切な区切り文字を組み合わせて使用​​できます。

$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');
17
mermshaus

使ってみた

<br pagebreak="true" />

または

<tcpdf method="AddPage" />

それぞれがページの上部から新しいページを開始するのではなく、HTMLテキストの間にA4ページの完全な空きスペースを追加しました。したがって、テキストがページの途中で終了し、改ページが挿入された場合、新しいテキストは次のページの途中から書き込まれます。私は望んでいませんでした。

うまくいったのはこれでした(ここで見つけました TCPDF強制新しいページ ):

$pdf->writeHTML($content, true, 0, true, 0);

$pdf->AddPage();
$pdf->setPage($pdf->getPage());  

これは、ページの上部にテキストを書き込むことから始まります。

11
jazkat

2011-12-23のバージョン5.9.142では、page-break-before, page-break-inside cssプロパティ、次のように:

<div style="page-break-inside:avoid;">
some non breakable text
</div>
8
igor.scabini

TCPDFは、HTMLタグとCSSプロパティ「page-break-before」と「page-break-after」の「pagebreak」属性をサポートします。たとえば、<br pagebreak="true" />を使用できます。

詳細については、公式の http://www.tcpdf.org Webサイトおよびフォーラムを確認してください。

8
user412934

http://www.tcpdf.org/examples/example_049.phps に従って、このようなものを使用できます

$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>';

TCPDF構成ファイルのパラメーターK_TCPDF_CALLS_IN_HTMLが正しいことを確認する必要があります。

2
Salvador Orteu

CSSを介してエレメントにpage-break-afterpage-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';
    }
}
0
cossacksman

この方法に従って、ニーズを達成することもできます。

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

それが誰かを助けることを願っています:)

ありがとう

0
Mohsin