Página manual quebra no tcpdf
-
05-07-2019 - |
Pergunta
Estou usando o TCPDF para gerar o PDF em um dos meus projetos. Eu simplesmente crio um arquivo HTML e o dou ao TCPDF para lidar com a geração PDF. Mas agora eu tenho algum HTML em que vários certificados são adicionados um após o outro e quero ter uma pausa na página. A quebra da página deve ser decidida por html, ou seja, quero saber se existe algum identificador no HTML que o TCPDF entende e, portanto, adiciona uma quebra de página ao PDF gerado.
Como eu poderia fazer isso?
Solução
estou a usar <br pagebreak="true"/>
.
Encontre o método writehtml e código
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);
}
}
Outras dicas
Você pode usar o tcpdf Adicionar Página() método em combinação com explodir() e um delimitador adequado:
$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');
Eu tentei usar
<br pagebreak="true" />
ou
<tcpdf method="AddPage" />
Cada um deles resultou não no início da nova página na parte superior da página, mas adicionando o espaço vazio completo de A4 páginas entre o texto HTML. Portanto, se o texto terminou no meio da página e depois a quebra da página foi inserida, o novo texto foi escrito no meio da próxima página. O que eu não queria.
O que funcionou foi isso (encontrou aqui Tcpdf forçando uma nova página):
$pdf->writeHTML($content, true, 0, true, 0);
$pdf->AddPage();
$pdf->setPage($pdf->getPage());
Isso agora começa com a escrita de texto na parte superior da página.
TCPDF suporta o atributo 'PageBreak' para tags html e propriedades CSS 'Page-Before' e 'Page-Break-After'. Por exemplo, você pode usar <br pagebreak="true" />
.
Verifique o funcionário http://www.tcpdf.org site e fóruns para mais informações.
Com a versão 5.9.142 de 2011-12-23, poderíamos usar o page-break-before, page-break-inside
Propriedades do CSS, como esta:
<div style="page-break-inside:avoid;">
some non breakable text
</div>
De acordo com http://www.tcpdf.org/examples/example_049.phps você pode usar algo assim
$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>';
Você precisa verificar se o parâmetro k_tcpdf_calls_in_html no arquivo de configuração tcpdf é true.
Você também pode seguir esse método para atender às suas necessidades:
$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');
Espera que ajude alguém :)
Obrigado
Dando ao seu elemento o page-break-after
, page-break-before
ou page-break-inside
Propriedade via CSS aplicará o atributo pagebreak
ou pagebreakafter
para a tag HTML durante o tempo de execução do 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';
}
}