2011-09-20 178 views
29

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?Encabezado en la página PDF usando DOMPDF en PHP

Respuesta

18

Hay una entrada de preguntas frecuentes en el DOMPDF wiki: ¿Hay alguna forma de agregar encabezados y pie de página o números de página?.

por lo que puede añadir la siguiente -snippet "PHP en línea" a su HTML-entrada (añadir un page_text similares -call para el 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 bien desea implementar esto en su La persona que llama (es decir, en el código PHP directamente) tiene que llamar al get_canvas() de DOMPDFS, método que devuelve el PDF-Renderer subyacente que le permite llamar al método page_text como en el ejemplo anterior. 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)); 

Con el tiempo usted tiene que llamar page_text después load_html (solo probarlo).

+0

Gracias vstm ... Estoy tratando de imprimir algunas etiquetas html en el encabezado. Intenté TCPDF también ... pero en eso no puedo usar etiquetas HTML, su único texto de soporte. En mi requerimiento, tengo que crear un informe y el encabezado del informe o los nombres de las columnas se deben mostrar en todas las páginas. No puedo encontrar nada que imprima mi encabezado HTML en el PDF. Si sabes algo, por favor, ayúdame. – Sandy

+10

su segunda parte del código es la mejor, sin código php en línea. pero la parte "// add the header" debe estar después de "$ dompdf-> render();" para que funcione. – machineaddict

+0

Esta debe ser la respuesta aceptada – Epoc

50

En el código 0.6.0, podrá 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 todavía), por lo que si esto es viable o no depende de sus necesidades.

El siguiente código producirá un two-page document with a header and footer:

<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 es posible usar una combinación de los dos estilos si usted necesita el acceso a algunas de las funciones que faltan. Los objetos PDF y el texto agregado mediante el método page_text se representan sobre el contenido HTML.

+0

Hola, Brian ... Además de 1 para su maravilloso tutorial. lo hiciste muy fácil :) –

+1

@BrianS ¿dompdf respeta el contador de páginas? No he podido hacer que funcione. Esto es de lo que estoy hablando '' 'content: counter (page)" of "counter (pages);' '' – Pzanno

+0

@Pzanno dompdf no puede mostrar el número total de páginas de esta manera. El único método para acceder a esta información es a través de una secuencia de comandos en línea. – BrianS

Cuestiones relacionadas