Question

J'utilise TCPDF pour générer le fichier PDF dans l'un de mes projets. Je crée simplement un fichier HTML et le donne à TCPDF pour gérer la génération PDF. Mais maintenant, j'ai un peu de HTML où plusieurs certificats sont ajoutés les uns après les autres et je veux un saut de page. Le saut de page doit être décidé par HTML, c’est-à-dire que je veux savoir s’il existe un identifiant HTML que TCPDF comprend, puis ajoute un saut de page au PDF généré.

Comment pourrais-je faire cela?

Était-ce utile?

La solution

J'utilise <br pagebreak="true"/>.

Recherche de la méthode writeHTML et du 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);
    }
}

Autres conseils

Vous pouvez utiliser la méthode AddPage () de TCPDF en combinaison avec explode () et un délimiteur approprié:

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

j'ai essayé d'utiliser

<br pagebreak="true" />

ou

<tcpdf method="AddPage" />

chacune d’elles n’a pas pour effet de créer une nouvelle page en haut de la page, mais d’ajouter l’espace vide complet de la page A4 entre le texte HTML. Donc, si le texte se termine au milieu de la page et qu'un saut de page est inséré, le nouveau texte est écrit au milieu de la page suivante. Ce que je ne voulais pas.

Ce qui a bien fonctionné a été trouvé ( TCPDF forçant une nouvelle page ):

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

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

Cela commence maintenant par l'écriture de texte en haut de la page.

TCPDF prend en charge l'attribut "pagebreak" pour les balises HTML et les propriétés CSS "page-break-before" et "page-break-after". Par exemple, vous pouvez utiliser <br pagebreak="true" />.

Consultez le site Web http://www.tcpdf.org officiel pour plus d'informations.

Avec la version 5.9.142 du 2011-12-23, nous pourrions utiliser les page-break-before, page-break-inside propriétés CSS, comme ceci:

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

Selon http://www.tcpdf.org/examples/example_049.phps vous pouvez utiliser quelque chose comme ça

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

Vous devez vérifier que le paramètre K_TCPDF_CALLS_IN_HTML dans le fichier de configuration TCPDF est vrai.

Vous pouvez également suivre cette méthode pour répondre à vos besoins:

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

Espère que cela aide quelqu'un:)

Merci

Donner à votre élément la propriété page-break-after, page-break-before ou page-break-inside via CSS appliquera l'attribut pagebreak ou pagebreakafter à la balise html lors de l'exécution de 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';
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top