DOMPDF - Problemas con el salto de línea

¿Qué es DOMPDF?

dompdf es una librería que permite convertir HTML a PDF, desarrollada en PHP5, leerá hojas de estilo externas, estilos en etiquetas y soporta la mayoría de los atributos HTML.

El tratamiento de PDF se hace mediante PDFLib, por lo que es necesaria la extension PDFLib de PECL, la cual mejora el rendimiento y reduce el gasto de memoria.

Admite la mayoría de las propiedades y selectores CSS2.1 y los atributos HTML 4.0. Además permite tablas complejas, imágenes PNG, GIF y JPEG, y enlaces, entre otras cosas.

Aún faltan algunos detalles como listas ordenadas, posicionamiento absoluto y relativo, y cuando el fichero tiene demasiado tamaño se toma un tiempo excesivo en generar el PDF.

dompdf

Problema

Quiero concatenar dos salidas de pagina html en un solo PDF.

ob_start();

//aquí el contenido de la página 1

$buffer1 = ob_get_contents();

//aquí el contenido de la página 2

$buffer2 = ob_get_contents();

ob_end_clean();

El problema que me he encontrado es que no hace un auto-salto de linea al detectar la etiqueta <html> ni nada por el estilo, además que da errores al concatenar dos documentos cuando el primero esta ‘cerrado’(</html>).

Primero de todo, borramos el </body> y el </html> de la primera salida de contenidos (sino salta error y no genera el pdf) y en su lugar ponemos:

<div style=”page-break-after: always;”></div>

¿Que es page-break-after/page-break-before?

page-break-after y page-break-before son propiedades de estilos CSS que se aplican a la hora de imprimir páginas web en la impresora, para forzar saltos de página después o antes de ciertos elementos.

Ahora ya podemos generar un documento PDF a partir de los PDF que queramos por separado, ya que solventamos el lio que se hace el dompdf con ‘</html> y posteriormente <html>’ y ademas cuando acaba un documento, deja el espacio de la hoja que resta, y continua en la siguiente.

$dompdf = new DOMPDF();
$dompdf->load_html($buffer1.$buffer2);
$dompdf->render();
$dompdf->stream(”Pdf/temporales/verfactura.pdf”,array(”Attachment” => 1));

Etiquetas: , , , , , ,

8 comentarios para “DOMPDF - Problemas con el salto de línea”

  1. iko dice:

    Saludos, me ha sido de mucha utilidad. Aunque he encontrado otra solución, no se si quizás es que estamos usando versiones diferentes. Dejo aquí mi código para unir dos html y que ademas solo el primero tenga una imagen de fondo.

    require_once(”dompdf/dompdf_config.inc.php”);

    $frontal = ‘body{background-image: url(imagen.jpg); background-repeat: repeat; height: 100%;}’.
    ‘Hello World!’.
    ”;

    $trasera = ‘blabla’;

    $dompdf = new DOMPDF();
    //tipo de hoja y orientación
    $dompdf->set_paper(’a4′, ‘landscape’);
    $dompdf->load_html($frontal . $trasera );
    $dompdf->render();
    $dompdf->stream(”hello_world.pdf”);

  2. Jorge dice:

    Saludos.

    Estoy un poco desesperado y extrañado con este problema, a ver si alguien me puede dar una mano:

    He diseñado reportes basado en plantillas hechas en HTML y he devuelto valores desde PHP, el problema es que desde mi hosting pica las palabras al final del margen pero desde el local no pasa, cree una platnilla simple con texto HTML largo para evaluar y me sigue dando el mismo problema (todo esto para evitar que algo en el style o PHP me estuivese originando la falla), puedes verlo aqui http://www.solucionestoadsoft.com/plantilla_prueba.php . Si alguien tiene alguna idea de como solventarlo o exactamente a que se debe el error (porque ya estoy casi seguro qeu es algo del hosting) agradecería que me lo comunicasen. Gracias.

    P.D. Recuerdo que el mismo texto que van a ver en el URL lo arma correctamente localmente, incluso si lo copio y pego en la página del dompdf donde está el demo tambien lo hace, pero desde mi hosting pues… pica palabras sin conseguirle una razón real.

  3. cristian dice:

    Hola Joge,

    Yo he probado el ejemplo que dejas y a mí se me ve bien. El texto sale bien formateado y tiene margenes.

    Has pensado en que sea quizás culpa de la versión de php instalada en el cliente?

    podrías probar de hacer un phpinfo() en tu hosting y en local, y mirar si tienes alguna diferencia. La primera que se me ocurre podría ser de codificación.

  4. Mariana dice:

    todo funciona correcto con $dompdf->load_html($frontal . $trasera ); pero la segunda hoja sale el texto encimado en la parte superior, alguien sabe a que se debe?

  5. yoleht dice:

    Ok he probado el codio, pero se me presenta un problema cuando trato de cargar datos de una base de datos, si la trabla contienen más de 200 registros esta se traba…. y me pone lento el equipo.
    mmi codigo utilizado es:
    load_html_file(”report_familia.php”);
    //aumentamos memoria del servidor si es necesario
    ini_set(”memory_limit”,”32M”);
    $dompdf->render();
    $dompdf->stream(”Reporte_family.pdf”);
    ?>

    y el error que aparece es:

    Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\CEA\paginas\reportes\include\abstract_renderer.cls.php on line 658

    Ya he aumentado la capacida de memoria y todo, pero nada

  6. cristian dice:

    el problema es que tienes que aumentar el execution_time de la misma manera que se hace con el memory_limit

    ini_set(”execution_time”,3600); //recordar va en segundos, ahora hay 1hora

  7. J dice:

    Queria consultar algo sobre dompdf pero me encontre que muchos tienen problemas con la configuracion de los servidores(si el servidor es propio una solucion es modificar o agregar las siguientes lineas en los archivos respectivos)….en caso de que no sea asi..toca generar reportes en html se generan mucho mas rapido y despues convertirlos a pdf..si no estoy mal esto consumiria menos recursos(esto es lo que quiero hacer)…

    Cuando la base de datos contiene muchos registros o tablas..
    LINEA AL FINAL DE my.ini(Mysql)

    max_allowed_packet=20M

    Cuando necesitamos aumentar el tiempo que duran algunos procesos en el servidor como por ej: para generar pdfs

    EN php.ini(PHP) COLOCAR:

    max_execution_time = 120 ; Maximum execution time of each script, in seconds
    max_input_time = 180 ; Maximum amount of time each script may spend parsing request data
    memory_limit = 200M ; Maximum amount of memory a script may consume (8MB)

    Para ocultar algunos errores no muy graves..(php.ini)

    error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR

    ——————–

    Saludos..

  8. Diana Guerra dice:

    Hola chicos, buenas noches, me encuentro con un problema con dompdf.

    Mi problema es que estoy cargando un archivo de html con php (ya que tiene datos que vienen de la base), hojas de estilos e imagenes.

    Este código lo tengo en un archivo aparte, dentro de una función y dicha función regresará una variable con el código agregado (html,php,css e imagenes).

    Pero al momento de crear el pdf con DOMPDF, se encima todo el contenido en la parte superior del documento pdf, no se a que se deba esto, ya que apenas encontré esta librería y estoy aprendiendo.

    Alguien puede comentarme a que se debe esta falla y como o en donde puedo encontrar mas información al respecto????

    De antemano gracias por su atención y ayuda!!!

Deja un comentario

CAPTCHA Image Audio Version
Reload Image