php - pagina - dompdf repeat table header
Encabezado en la página PDF usando DOMPDF en PHP (3)
Estoy creando un archivo PDF usando DOMPDF. Tengo un gran contenido para extraer en PDF, necesitamos un encabezado en todas las páginas. Entonces, ¿alguien puede decir cómo agregar un encabezado y un pie de página en el PDF para que el encabezado se muestre en todas las páginas usando DOMPDF?
En el código 0.6.0, podrás usar HTML + CSS para generar encabezados y pies de página. Existen algunas limitaciones en comparación con el uso de PHP en línea (por ejemplo, sin PAGE_COUNT marcador de posición aún), por lo que si esto es viable o no depende de sus necesidades.
El siguiente código generará un documento de dos páginas con encabezado y pie de página :
<html>
<head>
<style>
@page { margin: 180px 50px; }
#header { position: fixed; left: 0px; top: -180px; right: 0px; height: 150px; background-color: orange; text-align: center; }
#footer { position: fixed; left: 0px; bottom: -180px; right: 0px; height: 150px; background-color: lightblue; }
#footer .page:after { content: counter(page, upper-roman); }
</style>
<body>
<div id="header">
<h1>Widgets Express</h1>
</div>
<div id="footer">
<p class="page">Page </p>
</div>
<div id="content">
<p>the first page</p>
<p style="page-break-before: always;">the second page</p>
</div>
</body>
</html>
También podría usar una combinación de los dos estilos si necesita acceder a algunas de las funcionalidades que faltan. Los objetos PDF y el texto agregado con el método page_text
se representan sobre el contenido HTML.
Hay una entrada de preguntas frecuentes en la wiki DOMPDF : ¿Hay alguna forma de agregar encabezados y pies de página o números de página? .
De modo que puede agregar el siguiente "PHP en línea" a la entrada de HTML (agregue un page_text
similar para su pie de página):
<script type="text/php">
if ( isset($pdf) ) {
$font = Font_Metrics::get_font("helvetica", "bold");
$pdf->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}",
$font, 6, array(0,0,0));
}
</script>
Si prefieres implementar esto desde el lado de la persona que llama (lo que significa directamente en el código PHP) tienes que llamar al método get_canvas()
de get_canvas()
que devuelve el PDF-Renderer subyacente que te permite llamar al método page_text
como en el ejemplo encima. Déjame mostrarte lo que quiero decir:
// your dompdf setup
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
// add the header
$canvas = $dompdf->get_canvas();
$font = Font_Metrics::get_font("helvetica", "bold");
// the same call as in my previous example
$canvas->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}",
$font, 6, array(0,0,0));
Eventualmente tienes que llamar page_text
después de load_html
(solo pruébalo).
Necesitas este código, espero ayudarte
Saludos...
# Instanciamos un objeto de la clase DOMPDF.
$dompdf = new DOMPDF();
# Definimos el tamaño y orientación del papel que queremos.
# O por defecto cogerá el que está en el fichero de configuración.
$dompdf->set_paper("Letter", "portrait");
# Cargamos el contenido HTML.
$dompdf->load_html(utf8_decode($html));
# Renderizamos el documento PDF.
$dompdf->render();
#Esto es lo que imprime en el PDF el numero de paginas
$canvas = $dompdf->get_canvas();
$footer = $canvas->open_object();
$w = $canvas->get_width();
$h = $canvas->get_height();
$canvas->page_text($w-60,$h-28,"Página {PAGE_NUM} de {PAGE_COUNT}", Font_Metrics::get_font(''helvetica''),6);
$canvas->page_text($w-590,$h-28,"El pie de página del lado izquiero, Guadalajara, Jalisco C.P. XXXXX Tel. XX (XX) XXXX XXXX", Font_Metrics::get_font(''helvetica''),6);
$canvas->close_object();
$canvas->add_object($footer,"all");
# Enviamos el fichero PDF al navegador.
//$dompdf->stream(''FicheroEjemplo.pdf'');
# Para grabar en fichero en ruta especifica
$output = $dompdf->output();
file_put_contents(''ejemplo.pdf'',$output);
#Liberamos
unset($dompdf);