2009-10-22 55 views
33

Estoy usando TCPDF para generar el PDF en uno de mis proyectos. Simplemente creo un archivo HTML y se lo entrego al TCPDF para manejar la generación de PDF. Pero ahora tengo algo de HTML donde se agregan varios certificados uno después del otro y quiero tener un salto de página en él. El salto de página debe decidirse por HTML, es decir, quiero saber si hay algún identificador en HTML que TCPDF entienda y, en consecuencia, agrega un salto de página en el PDF generado.Salto de página manual en TCPDF

¿Cómo podría hacer esto?

Respuesta

60

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

método Find writeHTML y el 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); 
    } 
} 
+6

Brillante - gran trabajo - gran captura en el código! – JasonMichael

+0

era un salvavidas Amdy, realmente me ahorró mucho tiempo – atif

+0

¡También funcionó para mí! Gracias –

15

Es posible utilizar AddPage de TCPDF() método en combinación con explotar() y un delimitador adecuado:

$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

Funciona como un encanto marc .......... gran :-) – Fero

0

También puede seguir este método para lograr sus necesidades:

$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 ayuda a alguien :)

Gracias

7

apoyo TCPDF el 'salto de página' atributo de etiquetas HTML y CSS propiedades 'pagebreak-antes' y 'salto de página después'. Por ejemplo, puede usar <br pagebreak="true" />.

Consulte el sitio web y los foros oficiales de http://www.tcpdf.org para obtener más información.

5

Con la versión 5.9.142 desde 2011-12-23 podríamos utilizar los page-break-before, page-break-inside propiedades CSS, así:

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

Intenté usar

<br pagebreak="true" /> 

o

<tcpdf method="AddPage" /> 

cada uno de ellos no tiene como resultado el inicio de una nueva página en la parte superior de la página, sino que agrega el espacio vacío completo de la página A4 entre texto HTML. Entonces, si el texto terminaba en el medio de la página y luego se insertaba el salto de página, el nuevo texto se escribía desde el medio de la página siguiente. Lo cual no quería.

Lo que funcionó fue esto (que se encuentra aquí TCPDF forcing a new page):

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

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

Esto ahora se inicia con la escritura de texto en la parte superior de la página.

1

Según http://www.tcpdf.org/examples/example_049.phps se puede usar algo como esto

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

Es necesario verificar que los parámetros del archivo de configuración K_TCPDF_CALLS_IN_HTML TCPDF es cierto.

-1

Se utiliza para un salto de página en el contenido html.

+0

Agregue una explicación con la respuesta de cómo esta respuesta ayuda a OP a corregir el problema actual –

0

Dando a su elemento de la propiedad page-break-after, page-break-before o page-break-inside a través de CSS se aplicará el atributo pagebreak o pagebreakafter a la etiqueta HTML en tiempo de ejecución 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'; 
    } 
}