Foros del Web » Programando para Internet » PHP »

dompdf me está matando

Estas en el tema de dompdf me está matando en el foro de PHP en Foros del Web. Hola!! Ocurre que necesito imprimir una estadísticas, generadas a partir de consulta a la bd y operaciones, en pdf. Pero eso lo haré después de ...
  #1 (permalink)  
Antiguo 16/05/2011, 06:55
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
dompdf me está matando

Hola!!
Ocurre que necesito imprimir una estadísticas, generadas a partir de consulta a la bd y operaciones, en pdf.
Pero eso lo haré después de que me funcione el simple 'hello worl'.
Veamos, tengo un formulario de filtro en php y un checkbox que sl pulsarlo cambia de valor y es recogido por la función a la que llamo con xajax.
Pero resulta que no me imprime nada, que no me muestra ni la página vacía... nada.
Os paso la parte de código desde el checkbox hasta que se recoge.
Código PHP:
Ver original
  1. if($filtros['pdf'] == 1)
  2. {
  3.  
  4. //el botón que llama
  5. <td colspan='2'><div align='right' style='margin-right:1em'>
  6.     <input type='button' name='bmandafiltro' id='bmandafiltro' value='Generar Estad&iacute;stica' onclick='xajax_generaEstadistica(xajax.getFormValues(formEst));'/>
  7.  
  8. //la función que recoge
  9. require_once("./includes/dompdf/dompdf_config.inc.php");
  10.         $html =
  11.             '<html><body>'.
  12.             '<p>Hello World!</p>'.
  13.             '</body></html>';
  14.        
  15.         $dompdf = new DOMPDF();
  16.         $dompdf->load_html($html);
  17.        
  18.         $dompdf->render();
  19.         $dompdf->stream("hello_world.pdf");
  20. }

No sé si será un problema de librerías o de permisos en el servidor pero me he leído toda la documentación, todos los posts relacionados y he probado unas cuantos ejemplos, pero nada.

Espero no haberos dado mucho la lata y que me podais ayudar.

Saludos y buen dia!!
  #2 (permalink)  
Antiguo 16/05/2011, 08:52
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: dompdf me está matando

A ver, ¿es entonces Xajax quien hace y recibe el proceso de la llamada del botón?

Entonces he ahí el detalle, no puedes generar PDF usando Ajax, necesitas generar una URL alternativa desde la cual puedas acceder al documento.

Lo que se me ocurre, es que generes dicha URL, y la devuelves con Xajax, la lees con JS y redireccionas usando location.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/05/2011, 10:08
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: dompdf me está matando

Yo trabajo precisamente con xajax y dompdf. Las respuestas de cualquier librería como dompdf, phpexcel etc no pueden ser devueltas como cualquier echo ordinario, necesitan ser formateadas como respuestas Xajax.

Tal como te indicó pateketrueke, en tu caso con dompdf generas el archivo pdf, y luego mandas en la respuesta xajax la liga para descargar dicho pdf.
  #4 (permalink)  
Antiguo 17/05/2011, 06:43
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Por fin parece que está dando resultado.
Os cuento el método que he utilizado:
1º Creé un botón debajo de las estadísticas el cual aparece cuando éstas se han cargado.
2º A dicho botón le asigné una función javascript en el onclick.
3º En la función javascript meto en un input hidden el html que quiero imprimir y hago un submit del formulario.
4º En el index y sin que se haya cargado antes ningún html(ni las cabeceras) compruebo que se ha inicializado el campo que me interesa de los que mando con el form(if(isset($_POST['htmlgenerado']))) y llamo a la función php que se pone en contacto con la librería dompdf pasándole la variable con el html.

Os pongo el código por si a alguien le pudiese hacer falta.
Código PHP:
Ver original
  1. <input type='button' id='gpdf' name='gpdf' value='Generar Pdf' onclick='javascript:recogeHtml();'/>

Código Javascript:
Ver original
  1. function recogeHtml()
  2. {
  3.     var html = document.getElementById('zonas').innerHTML;
  4.     document.getElementById('htmlgenerado').value = html;
  5.     document.formulario.submit();
  6.    
  7. };

Código PHP:

<?
if(isset($_POST['htmlgenerado']))
{
    
$html $_POST['htmlgenerado'];
    
imprimePdf($html);
}
?>
Código PHP:


function imprimePdf($txtpdf)
{
    
$html =
        
"<html><body>
        <p>"
.$txtpdf."</p>
        </body></html>"
;
    
$dompdf = new DOMPDF();
    
$dompdf->load_html($html);
    
$dompdf->render();
    
$dompdf->stream("documento.pdf");

Aún estoy en pruebas pero espero acabarlo del todo en breve y os cuento(el servidor de mi empresa se ha ido y me ha dejado colgada con las pruebas...)

Última edición por aniMAYtions; 17/05/2011 a las 09:38 Razón: nuevos resultados
  #5 (permalink)  
Antiguo 17/05/2011, 10:22
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Menudo...
Después de todo esto ésto va y me dice que el html que le mando no lo puede abrir pues está dañado o no se ha descodificado bien.
Si pongo, por ejemplo, hola me lo abre correctamente. Pero la variable que le mando la he intentado meter de distintas formas:
... que si "<html><body>".$txtpdf."</body></html>" o si "<html><body>$txtpdf</body></html>"... Pero nada, me dice que no y es que no.
Qué creeis que estoy haciendo mal ahora??

Gracias de nuevo.
  #6 (permalink)  
Antiguo 17/05/2011, 12:29
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: dompdf me está matando

Si dompdf no te está generando el pdf, es posible que el html que le proporcionas (la cadena a convertir) no esté correctamente formado. Dompdf en ese sentido es muy quisquilloso, no le puedes pasar etiquetas sin cerrar o instrucciones mal formadas.
  #7 (permalink)  
Antiguo 17/05/2011, 12:31
 
Fecha de Ingreso: mayo-2011
Ubicación: La Luna
Mensajes: 84
Antigüedad: 12 años, 11 meses
Puntos: 6
Respuesta: dompdf me está matando

yo uso un diseñador y la clase , funciona muy bien
http://www.youtube.com/watch?v=zjjFNu4vYf4
  #8 (permalink)  
Antiguo 18/05/2011, 01:12
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Hola y gracias por vuestras respuestas.

ocp001a, le estoy pasando la siguiente cadena:
Código HTML:
Ver original
  1.     <body>
  2.         <table class='form'>
  3.             <thead>
  4.                 <tr>
  5.                     <th colspan='3'>Total de Sevicios por Tipo de Solicitud</th>
  6.                 </tr>
  7.             </thead>
  8.             <tbody>
  9.                 <tr>
  10.                     <th colspan='3'>&nbsp;</th>
  11.                 </tr>
  12.                 <tr>
  13.                     <th colspan='2'>Total de Servicios</th>
  14.                     <th colspan='2'>39</th>
  15.                 </tr>
  16.                 <tr>
  17.                     <td colspan='2'>E-Mail</td>
  18.                     <td colspan='1'><div align='center'>5</div></td>
  19.                 </tr>
  20.                 <tr>
  21.                     <td colspan='2'>Fax</td>
  22.                     <td colspan='1'><div align='center'>8</div></td>
  23.                 </tr>
  24.                 <tr>
  25.                     <td colspan='2'>Messenger</td>
  26.                     <td colspan='1'><div align='center'>1</div></td>
  27.                 </tr>
  28.                 <tr>
  29.                     <td colspan='2'>Personalmente</td>
  30.                     <td colspan='1'><div align='center'>21</div></td>
  31.                 </tr>
  32.                 <tr>
  33.                     <td colspan='2'>SMS</td>
  34.                     <td colspan='1'><div align='center'>4</div></td>
  35.                 </tr>
  36.                 <tr>
  37.                     <td colspan='2'>Teléfono</td>
  38.                     <td colspan='1'><div align='center'>1</div></td>
  39.                 </tr>
  40.                 <tr>
  41.                     <td colspan='2'>Web</td>
  42.                     <td colspan='1'><div align='center'>1</div></td>
  43.                 </tr>
  44.                 <tr>
  45.                     <td colspan='2'>SVisual</td>
  46.                     <td colspan='1'><div align='center'>1</div></td>
  47.                 </tr>
  48.             </tbody>
  49.         </table>
  50.     </body>
  51. </html>

Con un str_replace le he cambiado las comillas dobles por simples, por si fuera ese el fallo, y le he agregado las etiquetas <html><body></body></html> para meter el contenido de mi variable dentro. Además he cambiado los colspan que me venían a 0 por defecto a 1.
Haciendo un htmlentities he podido ver el código que he recibido y lo veo correcto, o me falta algo?


pabloaguero2010
, creo que no tengo tiempo para investigar lo que me dices, pero en el peor de los casos lo haré.

Gracias de nuevo y espero encontrar una solución pronto.
Saludos!!
  #9 (permalink)  
Antiguo 18/05/2011, 12:46
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: dompdf me está matando

Las comillas simples no son correctas, lo correcto es usar comillas dobles.

En tu caso creo que lo mejor es que con un script simple (sin usar xajax) crees el archivo pdf con esa cadena y veas si funciona o si tienes algún error. Por cierto, por si no lo conocías, con el uso de xajax se hace indispensable el uso de firebug, para que éste te diga si tienes un fallo, pues xajax no te devuelve nada si tienes un fallo en tu script. Por cierto, prueba a usar mejor alineamiento css en vez de usar divs dentro de las celdas de la tabla.
  #10 (permalink)  
Antiguo 18/05/2011, 12:50
 
Fecha de Ingreso: mayo-2011
Ubicación: La Luna
Mensajes: 84
Antigüedad: 12 años, 11 meses
Puntos: 6
Respuesta: dompdf me está matando


pabloaguero2010
, creo que no tengo tiempo para investigar lo que me dices, pero en el peor de los casos lo haré.

Tio mas demoras en resolver en problema que en revisar el video que te mostre, es un reporteador al estilo crystal report y lo integras facilmente con php.
es genial
Bueno si el tiempo me da te subo las demos que hice yo.

Saludos
  #11 (permalink)  
Antiguo 19/05/2011, 00:13
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Cita:
Iniciado por ocp001a Ver Mensaje
Las comillas simples no son correctas, lo correcto es usar comillas dobles.

En tu caso creo que lo mejor es que con un script simple (sin usar xajax) crees el archivo pdf con esa cadena y veas si funciona o si tienes algún error. Por cierto, por si no lo conocías, con el uso de xajax se hace indispensable el uso de firebug, para que éste te diga si tienes un fallo, pues xajax no te devuelve nada si tienes un fallo en tu script. Por cierto, prueba a usar mejor alineamiento css en vez de usar divs dentro de las celdas de la tabla.
Gracias ocp001a. Quitaré el paso de cambiar comillas.
Otra cosa, uso un script simple para generar el pdf, no xajax. Si te fijas bien con javascript cojo el texto y lo meto en un hidden que luego mando vía post y recojo en el index si se ha enviado.
Podría tener algo que ver el alineamiento con divs? sería cuestión de cambiarlo.
Tengo instalado el firebug en el mozilla pero realmente no sé sacarle todo el partido, probaré a ver.

Gracias!!
  #12 (permalink)  
Antiguo 19/05/2011, 00:21
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Cita:
Iniciado por pabloaguero2010 Ver Mensaje

pabloaguero2010
, creo que no tengo tiempo para investigar lo que me dices, pero en el peor de los casos lo haré.

Tio mas demoras en resolver en problema que en revisar el video que te mostre, es un reporteador al estilo crystal report y lo integras facilmente con php.
es genial
Bueno si el tiempo me da te subo las demos que hice yo.

Saludos
Pues no, pabloaguero2010, aquí en la oficina no puedo verlo y si tomo esa opción tendré que dedicarle un tiempo en casa que, probablemente, no tenga. Pero le echaré un vistazo el finde.
Conozco el crystal report que usé hace mucho tiempo con oracle y sql server, pero ya ni me acuerdo de usarlo y creo recordar que no te dejaba ponerle membretes ni nada de eso. Lo estudiaré.
Gracias por tu ayuda!!
  #13 (permalink)  
Antiguo 19/05/2011, 01:30
 
Fecha de Ingreso: mayo-2011
Ubicación: La Luna
Mensajes: 84
Antigüedad: 12 años, 11 meses
Puntos: 6
Respuesta: dompdf me está matando

de nada si te da el tiempo aca tienes un tuto. Bien explicado y si acepta menbrestes todo.
http://cachina.wordpress.com/2010/01/29/usando-o-ireport-como-gerador-de-relatorios-para-php/
  #14 (permalink)  
Antiguo 19/05/2011, 04:35
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Hola de nuevo.
pabloaguero2010, le he estado echando un vistazo al ireport .
La única conclusión que he sacado es que debes pasarle los parámetros para que él mismo te genere las estadísticas entrando en tu base de datos.
Y con la cantidad de consultas y cálculos que he hecho(son 8 tipos de estadísticas distintos) y que funcionan no me veo yo ahora metida en berenjenales otra vez.
Lo único que se me ocurre es pasarle 2 parámetros, el del título y el del html generado, pero no sé si sería posible.
Además no me aclaro con las librerías que necesita ni con cómo puedo instalarlo en servidor.
Vamos, un lío que espero solucionar pronto.
Un saludo.
  #15 (permalink)  
Antiguo 19/05/2011, 05:05
 
Fecha de Ingreso: mayo-2011
Ubicación: La Luna
Mensajes: 84
Antigüedad: 12 años, 11 meses
Puntos: 6
Respuesta: dompdf me está matando

Podes colgar el sql dentro de ireport y simplemente jalar los campos.
Bueno suerte con los reportes.
  #16 (permalink)  
Antiguo 19/05/2011, 05:15
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Toooodo el sql?? qué lio.
No te digo que no saldría precioso, pero como ya comenté ando corta de tiempo.

Por fin he conseguido que dompdf me habra el archivo... pero me lo muestra vacío!!.

Hice lo que me comentó ocp001a de quitar los divs y alicarle estilos a las filas. Así todo correcto, pero a ver si muestra algo.

Saludos!!
  #17 (permalink)  
Antiguo 19/05/2011, 05:59
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Falsa alarma, había seleccionado una estadística que no tenía contenido... me sigue dando el error.
  #18 (permalink)  
Antiguo 20/05/2011, 00:10
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Bueno, deciros que al final me he decidido por estudiarme bien el ireport para utilizar esta herramienta.
Pero para las dudas que me vayan surgiendo abriré otro tema en su lugar correspondiente.
Saludos y gracias por la ayuda.
  #19 (permalink)  
Antiguo 20/05/2011, 11:17
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: dompdf me está matando

Un último voto a favor de dompdf, ya que yo lo uso para hacer reportes sumamente complejos y sin problemas:
Primero imprime en pantalla (echo) el html de tu reporte tal cual. si te genera un html completo y correcto, si pasas dicha cadena a dompdf no deberías tener problemas.

Por cierto, no veo que configures el tipo de papel, quizá por ahí va la cosa...
Yo tengo mi código así:

Código PHP:
Ver original
  1. require_once("dompdf/dompdf_config.inc.php");
  2. $dompdf = new DOMPDF();
  3. $dompdf->set_paper("letter", "portrait");
  4. $dompdf->load_html($html);//cargamos el html
  5. $dompdf->render();//renderizamos
  6. $pdf = $dompdf->output();//asignamos la salida a una variable
  7. file_put_contents("archivo.pdf", $pdf);//colocamos la salida en un archivo
  8. echo "<a href=\"archivo.pdf\" target=\"_blank\">archivo.pdf</a>";//imprimo la liga para descargar el pdf


Tengo un sistema de reportes configurable donde los usuarios pueden crear reportes con tantas columnas como quieran, incluyendo gráficos, y pueden editar con un wysiwyg las cabeceras de sus reportes, por lo que al no conocer la estructura del reporte (no es fija) no puedo darme el lujo de hacerlo con editores de pdf a bajo nivel, así que dompdf es mi arma principal y no falla.
  #20 (permalink)  
Antiguo 23/05/2011, 00:45
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Gracias ocp001a otra vez por tu respuesta.
Cita:
Lo he intentado hacer pero me da el error de que no se puede abrir archivo. php.
Primero me daba error con que no podía acceder a la carpeta fonts ni a class.pdf.php por permisos. He cambiado los permisos a 777 y ahora me dice lo de archivo.php, que está en mi hoja principal de funciones. No creo que sea recomendable ponerle ese tipo de permisos a ese fichero, pero lo he intentado y me sigue dando error.
Sabrías decirme a qué puede deberse.
Gracias y un saludo.
Bueno, ya me imprime lo que quería imprimir, gracias a ponerle
$dompdf->stream("mipdf.pdf");

Ahora voy a intentar darle estilos a la salida.

Mil gracias!!

Última edición por aniMAYtions; 23/05/2011 a las 01:24
  #21 (permalink)  
Antiguo 23/05/2011, 01:54
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: dompdf me está matando

Gracias ocp001a otra vez por tu respuesta.
Cita:
Lo he intentado hacer pero me da el error de que no se puede abrir archivo. php.
Primero me daba error con que no podía acceder a la carpeta fonts ni a class.pdf.php por permisos. He cambiado los permisos a 777 y ahora me dice lo de archivo.php, que está en mi hoja principal de funciones. No creo que sea recomendable ponerle ese tipo de permisos a ese fichero, pero lo he intentado y me sigue dando error.
Sabrías decirme a qué puede deberse.
Gracias y un saludo.
Cita:
Bueno, ya me imprime lo que quería imprimir, gracias a ponerle
$dompdf->stream("mipdf.pdf");

Ahora voy a intentar darle estilos a la salida.
Todo ésto ya lo hice. Pero ahora me surge otro problema. La estructura pa imprimir las estadísticas es la siguiente:
<div id='contenedor'>
<div id='tabla1'></div>
<div id='tabla2'></div>
<div id='tabla3'></div>
<div id='tabla4'></div>
</div>

Según el checkbox que marque se ve una estadistica, 2 o 3 en sus divs correcpondientes.
Luego le digo que recoja el html del div contenedor, donde se hayan 2 tablas en 2 divs, por ejemplo.
Y ahí surge el problema. Los errores son:
Notice: Undefined offset: 2(un notice por sí solo no creo que me detuviese la ejecución de la página).
Fatal error: Call to a member function get_id() on a non-object in.... (ahí creo que está el fallo).
Buscaré información y si logro algo os lo digo.
Mil gracias!!

Etiquetas: dompdf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:47.