Historias
Slashboxes
Comentarios
 

Login Barrapunto

Login

[ Crear nueva cuenta ]

tomman (13087)

tomman
  (email no mostrado públicam.)
http://mi.tsdx.net.ve/

Desarrollador esclavo en un pais quintomundista... Especializado en programacion bajo presion, en lenguajes exoticos (Pascal, COBOL), para olvidarlos un semestre despues. Aficionado a la POO (o sea, amante de Java). Maestria en reparacion de unidades de CD, DVD, discos duros, y "modder" de equipos clasicos (lease 386)
Especializado en programacion para la Sega Genesis en BASIC y aficionado a los autobuses rodoviarios (lease "busologo"). Ah, si, amante (y scener) del anime del bueno (si tiene angeles torpes, mejor!)
Usuario y asesor de Share y Perfect Dark, la nueva nota en P2P (sorry, mule). Lider de la campaña "Anti-Trolles Ortograficos". Instalador certificado de BootMii y homebrew para Noentiendo Wii

Hoy: Recien egresado de Ingenieria en Informatica en la UNEG (Ciudad Guayana, Venezuela) - se aceptan ofertas de empleo!
5 años despues: programador esclavo en algun sitio de Japon.
40 años despues: chofer de autobuses o taxista.

Down Kill Up Publicidad

Bitácora de tomman (13087)

Domingo, 31 de Mayo 2009

HTML a PDF desde PHP: Cuando la Memoria Falla

01:30h.
PHP
Finalmente, ya estoy en las ultimas instancias de mi carrera de Ingenieria en Informatica... dentro de poco atras quedaran esos años de vagancia, recoleccion de chatarra gratuita, descargas compulsivas de anime, y peleas futiles contra el sistema. Pero mientras tanto, ya estoy con mi ultima pasantia, como esclavo temporal de la Corporacion Venezolana de Guayana ("CVG" para no escribir tanto), corporacion que ahora corre mayoritariamente sobre software libre (por ejemplo, ya la aplastante mayoria de las estaciones de trabajo ahora estan bajo Ubuntu 7.04), y que ahora esta en la tarea de migrar sus sistemas administrativos a plataformas libres.

Como siempre, las corporaciones ven en los pasantes un valioso recurso (bah, somos programadores baratos por ley), y yo -junto a otros compañeros mios- fui asignado a uno de esos sistemas como parte principal de mi pasantia: escribir un modulo para un tal sistema de archivos (registro de cajas, carpetas y documentos; practicamente un Vida Real FS(tm) para la empresa). Entre todos los requerimientos (incluyendo algunos no tan implicitos, como desalojar a Bobby Tablas de las tripas del sistema), esta el clasico generador de reportes, y la tendencia en estos tiempos logicamente es PDF. Bien, aca comienzan los dolores de cabeza: buscar un generador que sea bonito, bueno y barato. Antes de continuar, el sistema funciona bajo una plataforma LAMP (bueno, cambiemos esa "M" por una "IP", de Informix y PostgreSQL. El cuento de Informix es un drama que se los echare otro dia...)

Al principio pensamos en la opcion mas logica: FPDF. Sin embargo, eso de estar construyendo el PDF a pie nos parecio un tanto... cavernicola (sin mencionar que la pasantia dura 16 semanas y ya estamos en la octava). Asi que decidi buscar algo de mas alto nivel, y fue en donde cai que el camino que tendria que seguir para tener mis reportes en PDF pasa por HTML: generar el reporte en HTML, lindo y bello, y alimentarlo a un convertidor, que con un poco de suerte, habria de generarte un PDF identico a lo que ves en el navegador.

La primera parte fue facil: estructurar los formatos en Calc (donde, gracias a las maravillas del formato XML OpenDocument, y tras un cerro de transformaciones XSL, terminas con un sexy XHTML 1.0 Strict 100% valido de aqui a Pekin). Tras probar (y desechar) varios supuestos convertidores de HTML a PDF escritos en PHP (algunos como HTMLDOC no soportan CSS -que acaso se quedaron en la epoca de NS3?-, mientras que otros ni siquiera soportan las etiquetas mas basicas, como tablas o formato de parrafos), finalmente elegi este: HTML2PS/PDF. Sencillamente es fantastico, genera PostScript y PDF (con FPDF o GhostScript, elige tu veneno) soporta XHTML, CSS2 (y algun que otro elemento de CSS3!), y los resultados son una maravilla. He aqui unos ejemplos:

XHTML original, 100% valido
PDF generado con HTML2PS/PDF

Otro XHTML
Lo mismo, pero en PDF (pesa 1 mega por una fuente Unicode incrustada)

(si algun cevegista lee esto, tranquilos, todos esos datos son ficticios :)

OK, todo bello, PEEEEEERO, aca viene el gran "PERO": Este script pide RAM. Mucha RAM. De hecho, para generar el segundo PDF se tira unos 384 MEGAS DE RAM EN EL SERVIDOR (si, alli dice MEGABYTES). Con un PDF de 22 paginas, esto es lo que ocurre:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 100663296 bytes) in /ruta/al/modulo/clases/pdf/html2ps_v2042/public_ht ml/value.border.class.php on line 14

Leyeron bien: el script se tiro 1 GIGA DE RAM (estaba ensayando con ese limite), y aun pedia 100 megas mas! (y eso porque el documento es XHTML valido; si es HTML del clasico, a eso hay que añadirle mas recursos porque la libreria necesita "validar" el documento) Obviamente los administradores no quieren eso ni de coña, ya que aparte de que los hierros de la CVG no tienen memoria infinita, este sistemita tiene que compartir alojamiento con otro cerro de sistemas mas, y no es para nada divertido que alguen se coma toda la RAM del sistema por generar un puto PDF, dejando al resto de la corporacion en tinieblas...

Habiendo explicado la situacion, recurro a ustedes, estimados barrapunteros, en busqueda de una mejor solucion... Lo que necesito es un generador de PDF que sea igual de bueno que HTML2PS/PDF, pero que no necesite tanta RAM como Windows Vista o Duke Nukem For(n)ever para generar un simple PDF! Estos son mis requerimientos:

  • Tiene que estar en PHP, evidentemente...
  • Me da igual si usa FPDF o GhostScript.
  • Debe ofrecer soporte para HTML y CSS. Puntos extras si acepta XHTML 1.0 Strict, pero no es un requerimiento estricto. Esto implica que los PDFs que generen deben ser casi que identicos a lo que mostraria el tipico navegador...
  • Evidentemente, debe usar poca RAM, no toda la RAM del planeta
  • La velocidad es poco importante, prefiero que sea eficiente en cuanto a uso de recursos a que sea Meteoro.
  • Debe ser GRATIS, para uso comercial (la CVG es una empresa del gobierno!). Si es libre, mejor, dado el dichoso decreto 3390, pero creo que en estos momentos, dada la situacion, me saltare por alto eso ultimo :D


Alguien tiene experiencia trabajando con PDFs en PHP? Alguna buena libreria que no haya visto por ahi? Las pocas alternativas que estuve viendo de momento cuestan $$$, asi que no me sirven. Y aunque me duele profundamente en el alma, debo despegarme de HTML2PS/PDF :(
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • por txeke (6426) el Domingo, 31 Mayo de 2009, 15:09h (#1151401)
    ( http://www.alvaroremesal.net/ | Última bitácora: Viernes, 24 Abril de 2015, 19:48h )
    Ya que estas acabando la carrera, y que por pasantía entiendo lo que en España es un becario, ¿por qué no poner en práctica tus conocimientos adquiridos?

    Dices que fpdf es "cavernícola" por tener que generar a mano el PDF. Pues bien, en una mañana como mucho podéis tener las especificaciones de los PDF que debeis generar, ya que si son informes serán al fin y al cabo documentos con una estructura más o menos fija. Con esa especificación general, escribid una clase en PHP que, haciendo uso de fpdf, os de ese "alto nivel" para codificar todos los generadores de informes.

    De esta forma tendréis una clase hecha a vuestra medida, con los métodos que más vais a usar, pudiendo ser éstos de todo el alto nivel que os interese, por ejemplo, PDFREPORT::writeHeader($title, $dpto), o cosas más mundanas como PDFREPORT::addImage($img, $position).

    Así aprenderás mucho más que usando una "bala de plata" ya hecha, y sobre todo dejarás un trabajo hecho para CVG que en el futuro podrán aprovechar muchos otros compañeros, haciéndoles la vida más fácil y habiendo demostrado a la empresa que tú vales para esto, y que no eres un mero copypasteador.

    Recuerda que, aunque estes de pasante y sin cobrar un duro, el responsabilizarse de tus tareas asignadas y hacerlas lo mejor posible ya debes hacerlo. Y créeme, eso son puntos ganados, si no te valdrá para quedarte como empleado en esa empresa, sí te valdrá en futuras entrevistas de trabajo.
    --
    -- Txeke
  • Re:dompdf

    (Puntos:2)
    por tomman (13087) el Domingo, 31 Mayo de 2009, 17:36h (#1151420)
    ( http://mi.tsdx.net.ve/ | Última bitácora: Viernes, 14 Febrero de 2014, 08:31h )
    Pues, acabo de probarla... y debo decir que, con los estilos que genero OpenOffice Calc, fue un fracaso total :(

    Todo el texto sale horrible (palabras montadas sobre palabras!), no me respeta los estilos para nada, y sobre todo, no carga el formato de la tabla.

    Una lastima, puesto que se veia prometedor, a juzgar por los ejemplos que venian en el paquete. A lo mejor seguire jugando con este... Gracias por el dato de todos modos.
    --

    Tom Maneiro
    $ON¥ == EVIL!
    - http://t38.webhop.biz/ -
    [ Padre ]
  • 1 respuesta por debajo de tu umbral de lectura actual.