Estoy haciendo una generación masiva de archivos PDF basados en plantillas y me encontré con grandes problemas de rendimiento bastante rápido. Mi situación actual es la siguiente:Plantilla a granel basada en generación de PDF en PHP usando pdftk
- obtener datos que se rellenan desde db
- crear FDF basado en fila de datos única y la forma pdf
- escritura
.fdf
archivo en el disco - fusionar el pdf con FDF utilizando pdftk (comando fill_form con aplanar)
- continúe iterando sobre las filas hasta que se generen todos
.pdf
- todos los archivos generados se fusionan en el final y el único PDF se le da al cliente
utilizo passthru
para dar la salida en bruto al cliente (ahorra tiempo al escribir el archivo), pero esto es sólo un poco de mejoras en el rendimiento. El tiempo de operación total es de aproximadamente 50 segundos para 200 registros y me gustaría bajar a por lo menos 10 segundos de alguna manera.
El escenario ideal sería operar todos estos archivos PDF en memoria y no escribir cada uno de ellos en un archivo separado, pero la salida sería imposible ya que no puedo pasar ese tipo de datos a una herramienta externa como pdftk . Otra idea fue generar un gran archivo .fdf
con todas esas filas, pero parece que no está permitido.
¿Falta algo muy trivial aquí?
Gracias por cualquier consejo.
PS. Sé que podría usar alguna buena biblioteca como pdflib, pero ahora solo estoy considerando abrir bibliotecas con licencia.
EDIT:
Estoy hasta averiguar la sintaxis para construir un archivo .fdf
con varias páginas con el mismo pdf como plantilla, pasaron unas horas y no pudimos encontrar ninguna buena documentación.
puede usar alguna herramienta de creación de perfiles como xdebug con webgrind y ver qué cosa está tomando realmente tiempo (y luego puede resolver eso), caí en la misma situación hace unos días, estaba usando un sistema de colas de código abierto que era tomando tiempo en mi caso. Estaba usando dompdf, que es nuevamente una solución de código abierto. – amitchhajer
Hice el perfilado y lo principal que toma mucho tiempo es escribir pdfs por separado una y otra vez. –
¿Por qué no ejecutar conversiones de 6 o 7 pdftk en paralelo, lo que debería reducir su tiempo total a su límite de 10 segundos? –