2009-10-22 27 views
33

Ich verwende TCPDF, um die PDF in einem meiner Projekte zu generieren. Ich erstelle einfach eine HTML-Datei und gebe sie an die TCPDF, um die PDF-Erzeugung zu handhaben. Aber jetzt habe ich einige HTML, wo mehrere Zertifikate nacheinander hinzugefügt werden und ich möchte einen Seitenumbruch darin haben. Der Seitenumbruch sollte durch HTML entschieden werden, d. H. Ich möchte wissen, ob es einen HTML-Code gibt, den TCPDF versteht, und fügt dann dem erzeugten PDF einen Seitenumbruch hinzu.Manuelle Seitenumbruch in TCPDF

Wie könnte ich das tun?

Antwort

60

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); 
    } 
} 
+6

Brilliant - tolle Arbeit - großer Fang im Code! – JasonMichael

+0

es war ein Lebensretter Amdy, es hat mir wirklich viel Zeit gespart – atif

+0

Arbeitete auch für mich! Danke –

15

Sie könnten TCPDF der AddPage() Methode in Kombination mit explode() und ein geeignetes 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'); 
+0

Es funktioniert wie ein charm marc .......... super :-) – Fero

0

Sie auch diese Methode folgen können, um Ihre Bedürfnisse zu erreichen:

$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, es hilft jemandem :)

Danke

7

TCPDF Unterstützung der 'Seitenumbruch' Attribut für HTML-Tags und CSS-Eigenschaften 'Seitenumbruch-before' und 'Seitenumbruch-after'. Zum Beispiel können Sie <br pagebreak="true" /> verwenden.

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

5

Mit der Version 5.9.142 von 2011-12-23 konnten 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

ich versuchte, mit

<br pagebreak="true" /> 

oder

<tcpdf method="AddPage" /> 

jeder von ihnen führte nicht dazu, eine neue Seite oben auf der Seite zu beginnen, sondern den ganzen leeren A4-Seitenbereich hinzuzufügen dazwischen HTML-Text. Wenn also der Text in der Mitte der Seite endete und dann ein Seitenumbruch eingefügt wurde, wurde der neue Text von der Mitte der nächsten Seite geschrieben. Was ich nicht wollte.

Was arbeitete, war dies (es hier TCPDF forcing a new page gefunden):

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

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

Das beginnt jetzt mit dem Schreiben von Text auf der Seite.

1

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

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

Sie müssen verwenden Sie diese Parameter K_TCPDF_CALLS_IN_HTML in TCPDF Konfigurationsdatei, um zu überprüfen, ist wahr.

-1

Verwenden Sie für einen Seitenumbruch im HTML-Inhalt.

+0

Fügen Sie eine Erklärung mit der Antwort hinzu, wie diese Antwort dem aktuellen Problem helfen kann –

0

Geben Sie Ihr Element die page-break-after, page-break-before oder page-break-inside Eigenschaft via CSS gilt das Attribut pagebreak oder pagebreakafter zu dem HTML-Tag während 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'; 
    } 
}