Interruzione di pagina in Html2Pdf
-
22-09-2019 - |
Domanda
Sto generando un file pdf dinamico, che contiene i dati di circa 10.000 utenti, in generale l'app è sviluppata utilizzando MySQL e PHP.Il contenuto dinamico è così pesante che ho trovato difficile elaborarlo fpdf()
classe.Quindi ho convertito la mia pagina PHP di output come file HTML utilizzando ob_get_clean()
.Ora il file html viene generato correttamente e anche il file pdf.Ma voglio lasciare un'interruzione di pagina dopo i dati di ogni utente, ovvero i dati di ogni utente devono iniziare in una nuova pagina.Non ho potuto utilizzare alcun tag HTML perché, nel file HTML generato dinamicamente, tutto è fuori dal file <html>
E </html>
tag.Per favore aiutami in modo che in qualche modo crei un'interruzione di pagina nel file pdf dopo i dati di ogni utente...Grazie in anticipo :)
Soluzione
ho appena capito questo dopo avere lo stesso problema. il parser che usano supporta il tag page-break-after, ma la html2pdf non funziona.
penso ce l'ho a lavorare facendo le seguenti modifiche al html2pdf.class:
intorno alla linea 4174, la prima cosa dentro:
protected function _tag_close_P($param){
dovrebbe essere:
if($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage();
intorno alla linea 2961, la prima cosa dentro:
protected function _tag_close_DIV($param, $other='div'){
dovrebbe essere:
if($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage();
Altri suggerimenti
supporta html2pdf pagina etichetta:
protected function _tag_open_PAGE($param) {}
alla linea 2229.Qui puoi vedere quali attributi sono supportati.Ad esempio, di seguito viene creata una pagina in orizzontale e una in modalità verticale:
<page orientation="l">
... some content ...
</page>
<page orientation="p">
... some content ...
</page>
Basandosi sul lavoro di macdabby (che non funziona). Ma grazie a lui, l'idea è corretta.
html2pdf V4.03
Per esempio vogliamo analizzare un tag DIV:
Linea html2pdf.class.php 2948:
protected function _tag_close_DIV($param, $other='div')
{
if ($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage(null, '', null, $this->_defaultTop);
$this->parsingCss->setPosition();
...
}
parsingCss.class.php Linea 114:
//add a new style declaration
public function initStyle()
{
...
$this->value['page-break-after'] = null;
}
Linea 1.024 aggiungere un nuovo gestore per il caso interruttore:
case 'page-break-after':
$this->value[$nom] = $val;
break;
E poi per farlo funzionare, il contenuto HTML deve contenere l'elemento di rottura
<div style="page-break-after:always; clear:both"></div>
Attenzione per stile sensibili caso, non è sicuro se il plugin gestirlo
Probabilmente vuoi utilizzare alcuni CSS, ad esempio:
h1 {page-break-before:always}