Frage

Ich verwende TCPDF, um das PDF in einem meiner Projekte zu generieren. Ich erstelle einfach eine HTML -Datei und gebe sie dem TCPDF, um die PDF -Generation zu verarbeiten. Aber jetzt habe ich ein paar HTML, bei denen nacheinander mehrere Zertifikate hinzugefügt werden und ich möchte eine Seitenpause darin haben. Die Seitenunterbrechung sollte von HTML entschieden werden, dh ich möchte wissen, ob es in HTML eine Bezeichnung gibt, die TCPDF versteht, und fügt dementsprechend einen Seitenunterbruch in das erzeugte PDF hinzu.

Wie könnte ich das machen?

War es hilfreich?

Lösung

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

Methode finden 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);
    }
}

Andere Tipps

Sie können TCPDFs verwenden Seite hinzufügen() Methode in Kombination mit explodieren() und ein geeigneter Trennzeichen:

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

Ich habe versucht zu benutzen

<br pagebreak="true" />

oder

<tcpdf method="AddPage" />

Jede davon führte nicht dazu, dass oben auf der Seite eine neue Seite startete, sondern den vollständigen A4-Seiten-Leerraum zwischen dem HTML-Text hinzufügte. Wenn also der Text in der Mitte der Seite endete und dann die Seitenunterbrechung eingefügt wurde, wurde der neue Text aus der Mitte der nächsten Seite geschrieben. Was ich nicht wollte.

Was funktionierte, war das (fand es hier 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 über der Seite.

TCPDF unterstützt das "Page Break" -attribut für HTML-Tags und CSS-Eigenschaften "Page-Break-Before" und "Page-Break-After". Zum Beispiel können Sie verwenden <br pagebreak="true" />.

Überprüfen Sie den Beamten http://www.tcpdf.org Website und Foren für weitere Informationen.

Mit Version 5.9.142 von 2011-12-23 konnten wir die verwenden page-break-before, page-break-inside CSS -Eigenschaften wie diese:

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

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

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

Sie müssen überprüfen, ob der Parameter k_tcpdf_calls_in_html in der TCPDF -Konfigurationsdatei wahr ist.

Sie können diese Methode auch befolgen, 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');

Hofft, dass es jemandem hilft :)

Vielen Dank

Geben Sie Ihrem Element das page-break-after, page-break-before oder page-break-inside Eigenschaft über CSS wendet das Attribut an pagebreak oder pagebreakafter zum HTML -Tag während der TCPDF -Laufzeit.

// 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';
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top