Domanda

Sto usando TCPDF per generare il PDF in uno dei miei progetti. Creo semplicemente un file HTML e lo do al TCPDF per gestire la generazione di PDF. Ma ora ho un po 'di HTML in cui vengono aggiunti più certificati uno dopo l'altro e voglio avere un'interruzione di pagina. L'interruzione di pagina dovrebbe essere decisa da HTML, cioè voglio sapere se esiste un identificatore in HTML che TCPDF comprende e quindi aggiunge di conseguenza un'interruzione di pagina nel PDF generato.

Come potrei farlo?

È stato utile?

Soluzione

Sto usando <br pagebreak="true"/>.

Trova metodo writeHTML e codice

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

Altri suggerimenti

È possibile utilizzare il metodo AddPage () di TCPDF in combinazione con explode () e un delimitatore adatto:

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

Ho provato a usare

<br pagebreak="true" />

o

<tcpdf method="AddPage" />

ognuno di essi non ha provocato l'avvio di una nuova pagina nella parte superiore della pagina, ma l'aggiunta dello spazio vuoto completo di una pagina A4 tra il testo HTML. Quindi, se il testo terminava al centro della pagina e quindi veniva inserita un'interruzione di pagina, il nuovo testo veniva scritto dal centro della pagina successiva. Che non volevo.

Ciò che ha funzionato è stato questo (l'ho trovato qui TCPDF forzando un nuova pagina ):

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

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

Questo inizia ora con la scrittura di testo nella parte superiore della pagina.

TCPDF supporta l'attributo 'pagebreak' per tag HTML e proprietà CSS 'page-break-before' e 'page-break-after'. Ad esempio puoi usare <br pagebreak="true" />.

Controlla il http://www.tcpdf.org ufficiale sito Web e forum per ulteriori informazioni.

Con la versione 5.9.142 del 23-12-2013 potremmo usare le page-break-before, page-break-inside proprietà css, in questo modo:

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

Secondo http://www.tcpdf.org/examples/example_049.phps puoi usare qualcosa del genere

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

Devi verificare che il parametro K_TCPDF_CALLS_IN_HTML nel file di configurazione TCPDF sia vero.

Puoi anche seguire questo metodo per soddisfare le tue esigenze:

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

Spero che aiuti qualcuno :)

Grazie

Dando al tuo elemento la proprietà page-break-after, page-break-before o page-break-inside tramite CSS applicherai l'attributo pagebreak o pagebreakafter al tag html durante il runtime TCPDF.

// 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';
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top