with tutorial site para libro framework espaƱol applications python django pdf-generation pisa xhtml2pdf

python - tutorial - libro django 2018



Django/Python: generar pdf con el lenguaje apropiado (4)

Utilizo Pisa/xhtml2pdf en mis aplicaciones Django para generar pdf desde una fuente HTML. Es decir:

  1. Genero el archivo HTML formateado con todos los materiales de "impresión" (por ejemplo, saltos de página, encabezado, pie de página, etc.)
  2. Convierto este HTML en pdf usando Pisa

Este proceso está bien, pero es lento (especialmente cuando se trata de tablas largas) y debo usar HTML / CSS de acuerdo con las características / limitaciones de Pisa.

La pregunta es: ¿es esta la forma correcta de generar pdf desde una aplicación web (es decir, crear HTML y luego convertirlo a pdf) o hay una forma más directa, que es "escribir" el pdf con un lenguaje más adecuado?


Creo que generar un pdf desde html con bibliotecas como Pisa o http://weasyprint.org/ es el enfoque más simple. porque se encarga de insertar imágenes, css, códigos de barras (en pisa) ... etc

Si desea escribir el pdf usted mismo, eche un vistazo a Reportlab pero su implementación tardará mucho más. En ambos casos, sugiero generar siempre el pdf en segundo plano con apio o python-rq para optimización.


Pisa es conocida por tener varios problemas, especialmente con mesas largas. En general se debe evitar el uso de PISA. Otras opciones son:

  • usando Reportlab directamente
  • z3c.rml (clon de lenguaje de plantilla Reportlab)
  • alternativas comerciales:
    • PrinceXML
    • PDFreactor

La regla general cuando se trata de la producción de PDF: obtienes lo que pagas.

Los convertidores como Pisa o Apache FOP son soluciones a medias que funcionan para casos simples pero que apestan en general.


También puede usar el motor de renderizado de QT webkit para crear archivos PDF a partir de HTML con http://code.google.com/p/wkhtmltopdf/ y django-wkhtmltopdf.

La ventaja es que puede escribir el HTML y CSS como lo haría normalmente para WebKit. Esto funciona bien si está generando una página web existente, pero puede ser menos apropiado si genera archivos PDF desde cero.


WeasyPrint autor aquí. El punto de usar HTML / CSS para generar PDF (en lugar de usar una biblioteca de PDF de nivel inferior directamente) es obtener un diseño automático. Le permite especificar restricciones de alto nivel como h1 { page-break-after: avoid } y dejar que el motor de diseño lo resuelva, en lugar de especificar la posición absoluta de todo. Lo primero es mucho más fácil de mantener cuando realiza cambios en sus documentos.

Algunas herramientas como rst2pdf tienen su propia sintaxis de hojas de estilo , pero es solo una mala forma de reinventar CSS.

Pero sí, el volcado de hojas de estilo complejas hechas para la pantalla podría no dar grandes resultados. Es mejor crear las hojas de estilo con la impresión en mente, o incluso usar hojas de estilo completamente diferentes con @media print en CSS o <link media="print"> en HTML.