Biblioteca de plantillas PHP PDF con salida PDF
odt (15)
¿Ha considerado usar algo como XSL: formateando objetos (XSL: FO)? Básicamente son documentos XML que se procesan y se convierten en archivos PDF. Hacer cadena - o mejor, DOM - reemplazos dentro de eso debería ser bastante simple. Es compatible con la incrustación de imágenes, enlaces, anotaciones, etc.
No es PHP, pero hay varios envoltorios de PHP junto con formas de usarlo a través de exec, etc. No es ideal, pero se ocupa completamente de la porción de la plantilla. Para obtener más información: http://techportal.inviqa.com/2009/12/16/transforming-xml-with-php-and-xsl/
Hay una implementación disponible como un proyecto de Apache - http://xmlgraphics.apache.org/fop/
¿Hay alguna biblioteca PDF de PHP que pueda reemplazar las variables de marcador de posición en un documento PDF, ODT o DOCX existente, y generar un archivo PDF como resultado final, sin atornillar el diseño?
Requisitos:
No necesita un servicio web de terceros
La posibilidad de ejecutar en un alojamiento web compartido sería ideal (no se requieren instalaciones / paquetes binarios)
Eso sí, una biblioteca que puede cargar un archivo PDF existente e insertar texto programáticamente en una posición específica no es suficiente para mi caso de uso.
En lo que mi investigación muestra, no hay una biblioteca que pueda hacer esto:
TCPDF solo puede generar documentos desde cero
FPDI puede leer plantillas PDF existentes, pero solo puede agregar contenido programáticamente (sin reemplazo de variable de plantilla)
Existen varias bibliotecas de plantillas DOCX / ODT pero no generan PDF
PHPDOCx afirma ser capaz de hacer exactamente lo que necesito, pero no ofrecen una versión de prueba y no voy a comprar un gato en una bolsa, especialmente no cuando parece que no hay otro producto en la web que lo haga. esta. Me resulta difícil de creer que puedan hacer esto sin problemas. Si lo ha logrado con éxito utilizando el producto, por favor, haga clic aquí.
¿Estoy pasando por alto algo?
¿Hay alguna manera de hacer esto usando formularios PDF? Estoy creando los documentos originales en OpenOffice 3.
Es posible que pueda usar comandos estándar de Linux ( pdftk
está disponible, por ejemplo, intentándolo en este momento).
Actualización: * ¡Argh! * Me llamaron para salir de la oficina y la recompensa expiró mientras tanto. Comenzar una nueva recompensa: en lo que respecta a mis pruebas, ninguna solución me funciona perfectamente todavía.
Actualización II: Miraré el enfoque de pdftk pronto, pero también estoy comenzando otra recompensa por una ronda más de recopilación de información adicional. Esta pregunta ahora ha visto 1300 puntos de recompensa en recompensas, debe ser algún tipo de registro :)
Agregaré esta nueva respuesta ya que la extensión de FDF PHP está ahora muerta.
Acabo de seguir estas instrucciones y terminé ejecutando un script de Perl luego el comando pdftk
Soy bastante consciente de que está lejos de ser una solución real de PHP, pero es confiable y bastante fácil de implementar en cualquier plataforma * nix.
Las herramientas descritas allí también están disponibles en Debian, en caso de que se lo pregunte.
Aunque no es exactamente lo que preguntaste, puedes considerar hacerlo en dos pasos: usar algún sistema de plantillas php ( smarty , dwoo ) para generar páginas html y luego usar herramientas como Html2Pdf convertirlo a pdf. Lo estoy usando y los resultados son buenos (no hay problemas con el diseño de la página, etc.)
Por supuesto, depende de sus documentos de entrada (puede usar html en lugar de PDF / ODT como fuente) y la complejidad del diseño de esos.
Es un poco tarde, pero eche un vistazo a la biblioteca de PDFTemplate , que hace todo lo que quiere. Puede crear archivos de Open Document (odt) y agregar marcadores de posición en él. La biblioteca PDFTemplate puede completar estos marcadores de posición (incluso con imágenes) y crear un archivo PDF.
Esto no cumplirá con su mandato "no binario", pero PDFlib tiene un buen sistema de plantillas que usa "bloques", que son metadatos específicos de PDFlib que puede "dibujar" en un PDF usando un complemento de Acrobat, luego rellenar programaticamente en tiempo de ejecución con una sola llamada de función por bloque. Los bloques pueden ser texto (con pseudo-html para el formato de texto simple de la fuente / tamaño / color de la fuente), imágenes (casi todo lo que se puede mostrar en un PDF) y archivos PDF, para que pueda incrustar otros documentos completos o fragmentos de documentos en un bloque.
Puede hacerlo desde un PDF preexistente (cargarlo, insertar contenido / completar bloque / etc., salida), o crear un PDF nuevo desde cero (es muy doloroso hacerlo programáticamente, pero es posible).
Utilicé los bloques con éxito para generar un sistema de plantillas simple para un cliente, donde podían dibujar bloques en un documento con pequeños bits de metadatos incrustados, que luego se analizaba en el lado del servidor para generar un formulario para solicitar datos para insertar en esos bloques en el momento de la generación del documento.
Esto no es muy práctico, pero para completar: si ya tiene una plantilla ODT, entonces muy bien podría retenerla como plantilla. Modificar el contenido de OpenDocument.xml y reemplazar los marcadores de posición es bastante simple. Si es así, podría usar unoconv
o pyodconverter
para transformar el ODT en un PDF final.
unoconv -f pdf -o final.pdf template.odt
Obviamente, esto requiere una configuración completa de OpenOffice (UNO y Writer) en el servidor web. ¡Y obviamente no todos los webhoster irían con eso! jaja. Incluso si es simple en cualquier configuración de Debian o Fedora. La velocidad de ejecución probablemente tampoco sea estelar. Pero entonces podría ser el enfoque más limpio, ya que OOo gobierna ambos formatos mucho mejor que cualquier clase de PHP.
Ok, estoy tratando de ayudarte a resolver el problema un poco.
Primero la respuesta para un par de su pregunta.
P: ¿Estoy pasando por alto algo?
R - No. Hay una biblioteca PHP PDF que puede reemplazar las variables de marcador de posición en un PDF existente y generar un archivo PDF como resultado final, sin atornillar el diseño
P: ¿Hay alguna forma de hacerlo con formularios PDF?
A - Sí. de manera absoluta el tric para hacer esto es mediante el uso de formularios en PDF
Para ambas respuestas puede usar Justin Koivisto fill pdf form field php library. Para obtener más detalles, vaya a http://koivi.com/fill-pdf-form-fields/tutorial.php . Eche un vistazo allí para obtener información adicional.
Gracias a Justin Koivisto por su trabajo
PD
Para obtener una solución alternativa para mostrar una tabla como resultado del formulario en PDF, considere leer el Manual del usuario de Oracle Business Intelligence Publisher. Crear una plantilla en PDF.
PDFlib es agradable, y su host compartido podría tenerlo ya. Pude lograr cosas como esta http://www.housejockey.com/flyers/12/80/MyListing.pdf con PDFlib con bastante facilidad, pero la técnica básica es el texto del párrafo desplegable ... que dijiste era no es bueno.
También trabajé con abcPDF para ASP / ASP.NET y encontré que es bastante bueno para hurgar en archivos PDF pero, una vez más, no está diseñado para hurgar dentro de las áreas de texto existentes.
Trabajar con plantillas robustas y marcadores de posición es un salto de complejidad sobre el contenido de inserción. Por lo general, no es posible volver a agregar texto existente en un PDF. Requiere una estructura de documentos adicional, que es lo que los costosos paquetes de software de datos variables como XMPie y Creo están diseñados para hacer ...
¡PHPDOCX está empezando a sonar realmente bien! Buena suerte.
Pekka,
Lo busqué anteriormente, creo que puede usar pdftk (una utilidad de línea de comandos) para completar un formulario PDF con los archivos de datos FDF / XFDF, que puede generar fácilmente desde PHP. Esa fue la mejor opción que he visto hasta ahora, aunque bien puede haber una biblioteca nativa.
pdftk es bastante útil en general, vale la pena echarle un vistazo.
Actualización: Echa un vistazo aquí: http://php.net/manual/en/book.fdf.php
Pude reemplazar los valores de marcador de posición en .docx a través de una biblioteca en github llamada phpdocx (https://github.com/djpate/phpdocx) (no la que se hace referencia en otro lugar)
Luego coloqué con éxito una versión portátil de libreoffice en el servidor web de mi servidor, al que llamo con PHP para hacer una conversión de línea de comando de .docx, etc. a PDF. sobre la marcha. No tengo derechos de administrador en el servidor web de mi servidor. Aquí está la publicación de mi blog de lo que hice:
Esto responde parcialmente a tu pregunta. Espero que sea útil.
Si está dispuesto a utilizar un servicio externo, PDF Otter podría resolver su problema. Hay un plan gratuito en el que puede inscribirse e integrarse de inmediato en su aplicación.
Los profesionales adicionales con el uso de PDF Otter incluyen menos dependencias en su aplicación y una experiencia más amigable al seleccionar los campos que necesita completar (He utilizado el método manual de prueba y error para obtener las posiciones de los campos en el pasado, y me llevó mucho tiempo )
Su mejor opción sería generar todo el documento sobre la marcha, con la plantilla definida programáticamente utilizando fpdf o algo similar. De esta forma, su texto no se verá interrumpido por párrafos ni nada por el estilo, y podrá colocar fácilmente imágenes / otros elementos según sea necesario.
Tarde, pero puede usar el diseñador de plantillas OpenSource https://github.com/applicius/dhek/releases , para definir pkaceholders / areas sobre cualquier PDF existente, luego cargarlo en PHP (como su formato JSON) y escribir en consecuencia en PDF original usando fpdf lib, para generar PDF personalizado con datos dinámicos escritos.
Usted no hizo un requisito gratuito , así que voy a sugerir LiveDocX . Tienen una opción gratuita, pero no cumple con su requisito de no ser un tercero , lo que significa que tendría que licencia de servidor).
También hay un paquete de ZF para esto:
fpdf y hay otra extensión encima, que no recuerdo, que te permite importar plantillas