it-swarm.com.de

Manueller Seitenumbruch in TCPDF

Ich verwende TCPDF, um die PDF in einem meiner Projekte zu generieren. Ich erstelle einfach eine HTML-Datei und gebe sie der TCPDF für die Generierung von PDF. Aber jetzt habe ich etwas HTML, in dem mehrere Zertifikate nacheinander hinzugefügt werden, und ich möchte einen Seitenumbruch haben. Seitenumbruch sollte durch HTML entschieden werden, d. H. Ich möchte wissen, ob es einen Bezeichner in HTML gibt, den TCPDF versteht und dann einen Seitenumbruch in die generierte PDF-Datei hinzufügt.

Wie kann ich das machen?

35
swapnilsarwe

Ich benutze <br pagebreak="true"/>.

Methode suchen writeHTML und Code 

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);
    }
}
67
AmdY

Sie können die Methode AddPage () von TCPDF in Kombination mit explode () und einem geeigneten Trennzeichen verwenden:

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

Ich habe es versucht 

<br pagebreak="true" />

oder

<tcpdf method="AddPage" />

bei jedem von ihnen wurde nicht die neue Seite oben auf der Seite gestartet, sondern der gesamte leere A4-Seitenbereich wurde zwischen HTML-Text eingefügt. Wenn also der Text in der Mitte der Seite endete und dann der Seitenumbruch eingefügt wurde, wurde der neue Text von der Mitte der nächsten Seite geschrieben. Was ich nicht wollte.

Was funktionierte, war dies (fand es hier TCPDF erzwingt eine neue Seite ):

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

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

Dies beginnt jetzt mit dem Schreiben von Text oben auf der Seite.

10
jazkat

Mit der Version 5.9.142 vom 2011-12-23 könnten wir die page-break-before, page-break-inside css -Eigenschaften wie folgt verwenden:

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

TCPDF unterstützt das 'pagebreak'-Attribut für HTML-Tags und die CSS-Eigenschaften' page-break-before 'und' page-break-after '. Beispielsweise können Sie <br pagebreak="true" /> verwenden.

Weitere Informationen finden Sie auf der offiziellen http://www.tcpdf.org Website und in den Foren.

7
user412934

Nach http://www.tcpdf.org/examples/example_049.phps können Sie so etwas verwenden

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

Sie müssen sicherstellen, dass der Parameter K_TCPDF_CALLS_IN_HTML in der TCPDF-Konfigurationsdatei wahr ist.

2
Salvador Orteu

Wenn Sie Ihrem Element die Eigenschaft page-break-after, page-break-before oder page-break-inside über CSS zuweisen, wird das Attribut pagebreak oder pagebreakafter während der TCPDF-Laufzeit auf den HTML-Tag angewendet. 

// 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

Sie können dieser Methode auch folgen, um Ihre Anforderungen zu erfüllen:

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

Hoffe es hilft jemandem :)

Vielen Dank

0
Mohsin