Generar PDF en Python

Mi librería favorita es pdf-reports

Índice

Generar informes PDF usando Python

Python, con sus amplias bibliotecas y módulos, ofrece herramientas poderosas para generar informes PDF profesionales.

Esta guía explora varios métodos para crear documentos PDF usando Python, cubriendo bibliotecas populares como ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports y PdfKit.

python en el informe

¿Por qué generar informes PDF con Python?

  • Automatización: Los scripts de Python pueden automatizar la generación de informes, ahorrando tiempo y reduciendo errores humanos.
  • Personalización: Personaliza los informes según necesidades específicas añadiendo texto, imágenes, tablas y gráficos.
  • Consistencia: Garantiza la consistencia de la marca en los informes con plantillas estandarizadas.
  • Versatilidad: Genera facturas, informes empresariales, resúmenes de datos u otros tipos de documentos.

Bibliotecas populares de Python para la generación de PDF

ReportLab

ReportLab es una biblioteca versátil que permite crear documentos PDF programáticamente. Soporta la adición de texto, imágenes, tablas y gráficos, lo que la hace adecuada para varios tipos de informes.

Ventajas:

  • Conjunto de características rico
  • API de alto nivel para un uso fácil
  • Soporta características avanzadas como anotaciones y formularios interactivos

Desventajas:

  • Curva de aprendizaje más pronunciada en comparación con otras bibliotecas
  • API menos intuitiva para algunas tareas

Usando ReportLab

Instalación: Instale ReportLab usando pip:

pip install reportlab

Configuración básica:

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Añadiendo texto:
python c.drawString(100, 800, "Hello World")
# Guardando el PDF:
python c.save()

FPDF

FPDF es una biblioteca simple pero poderosa para crear documentos PDF escrita en Python puro. Es ideal para generar documentos PDF básicos con un código mínimo.

Ventajas:

  • Fácil de aprender y usar
  • Ligera y rápida
  • Soporta caracteres Unicode

Desventajas:

  • Conjunto de características limitado en comparación con ReportLab
  • Menor control sobre la colocación de elementos en la página

Usando FPDF

Instalación: Instale FPDF usando pip:

pip install fpdf2
Configuración básica:
from fpdf import FPDF pdf = FPDF()

# Añadiendo texto:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Guardando el PDF:
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf es un convertidor de HTML/CSS a PDF que utiliza ReportLab en su interior. Es perfecto para generar PDFs desde plantillas HTML, lo que lo convierte en una excelente opción para conversiones web a PDF.

Ventajas:

  • Convierte HTML y CSS a PDF
  • Soporta diseños complejos y estilos
  • Se integra bien con marcos web como Django

Desventajas:

  • Requiere conocimiento de HTML y CSS
  • Puede no ser adecuado para informes simples no basados en web

Usando Xhtml2pdf

Instalación: Instale Xhtml2pdf usando pip:

pip install xhtml2pdf

Generando un PDF desde HTML: python

from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
  pisa_status = pisa.CreatePDF(html, dest=output_file)

WeasyPrint

WeasyPrint es una biblioteca versátil de Python que permite a los desarrolladores convertir HTML y CSS en documentos PDF con una alta calidad de renderizado. Es especialmente útil para generar informes, facturas u otros documentos que requieren un formato preciso. A continuación se muestran varios ejemplos que demuestran cómo usar WeasyPrint en diferentes escenarios.

Características

  • Convierte HTML y CSS en documentos PDF.
  • Maneja la renderización de datos dinámicos con la ayuda de motores de plantillas como Jinja2.

Instalación:

pip install weasyprint

Aquí hay un ejemplo sencillo de generar un PDF desde una cadena HTML:

from weasyprint import HTML

html_string = """
<html>
<head><title>PDF de muestra</title></head>
<body>
<h1>Hola, WeasyPrint!</h1>
<p>Este es un PDF de muestra generado usando WeasyPrint.</p>
</body>
</html>
"""

HTML(string=html_string).write_pdf("sample.pdf")

En este ejemplo, se utiliza la clase HTML de WeasyPrint para convertir una cadena HTML en un archivo PDF llamado “sample.pdf”.

Cargando HTML desde archivos

También puedes cargar contenido HTML directamente desde archivos:

from weasyprint import HTML

# Cargar HTML desde un archivo
HTML('sample.html').write_pdf('output.pdf')

Este método es útil cuando tienes tu contenido HTML almacenado en un archivo externo. Usando hojas de estilo CSS

WeasyPrint soporta el uso de hojas de estilo CSS para dar estilo a tus documentos PDF. Aquí te mostramos cómo aplicar un archivo CSS:

from weasyprint import HTML

# Cargar HTML y CSS desde archivos
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])

Esto permite un estilo más complejo, facilitando la creación de PDFs visualmente atractivos.

Jinja2

Jinja2 es un motor de plantillas poderoso para Python que permite generar contenido dinámico incrustando expresiones, condiciones y bucles dentro de las plantillas. Esta guía te mostrará varios ejemplos de cómo usar Jinja2 en Python, desde la sustitución básica de variables hasta características más avanzadas como la herencia de plantillas.

Características clave de Jinja2

  • Un motor de plantillas que puede usarse junto con WeasyPrint o ReportLab para generar dinámicamente contenido HTML.
  • Ideal para incrustar datos en plantillas predefinidas.
  • Instalación:
pip install jinja2

ver ejemplos en la página de documentación oficial de jinja2: https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit es una biblioteca poderosa de Python que simplifica el proceso de convertir contenido HTML en documentos PDF. Actúa como un envoltorio para la utilidad wkhtmltopdf, aprovechando WebKit para renderizar páginas HTML con precisión en formato PDF. Esta guía te mostrará varios ejemplos y casos de uso de la generación de PDFs usando pdfkit.

Características clave

Instalación:

# y asegúrate de que wkhtmltopdf esté instalado.

Uso básico - Convertir cadena HTML a PDF

Puedes convertir una cadena HTML simple en un archivo PDF usando pdfkit.from_string():

import pdfkit

html_sample = """
<html>
<head><title>PDF de muestra</title></head>
<body>
<h1>Este es un encabezado</h1>
<p>Primera línea.</p>
<p>Segunda línea.</p>
<p>Tercera línea.</p>
<p>Cuarta línea.</p>
</body>
</html>
"""

pdfkit.from_string(html_sample, 'output.pdf')

Esto generará un archivo PDF llamado output.pdf en el directorio actual.

Convertir un archivo HTML local a PDF

Si tienes un archivo HTML almacenado localmente, usa pdfkit.from_file():

import pdfkit

pdfkit.from_file('local.html', 'sample.pdf')

Biblioteca de informes PDF (pdf-reports)

Crear informes PDF usando la biblioteca pdf-reports en Python puede ser una forma poderosa de generar documentos profesionales desde plantillas HTML o Pug. Esta biblioteca aprovecha componentes modernos a través del marco Semantic UI y proporciona rutinas para incrustar tablas, gráficos y otros elementos en tus PDFs.

La biblioteca pdf-reports está diseñada para crear informes PDF visualmente atractivos desde plantillas HTML o Pug. Soporta oficialmente Python 3.x, pero también puede ejecutarse en Python 2.x con la versión adecuada de weasyprint. Esto la hace una herramienta versátil para generar documentos dinámicos y bien estructurados de forma programática.

Características clave

  • Componentes modernos: Utiliza el marco Semantic UI para componentes modernos.
  • Incrustación de elementos: Permite incrustar tablas, gráficos y otros elementos en los PDFs.
  • Soporte de plantillas: Soporta plantillas HTML y Pug para un diseño flexible de informes.

Ejemplo de uso de pdf-reports

Instalación:

pip install pdf-reports

Aquí hay un ejemplo básico de cómo usar la biblioteca pdf-reports:

from pdf_reports import PDFReport

# Definir tu archivo de plantilla (template.pug)
template = """
doctype html
html
  head
    title= title
  body
    h1= title
    p Este es un informe de muestra.
"""

# Crear una instancia de informe PDF
report = PDFReport(template)

# Establecer el contexto para la plantilla
context = {
    'title': 'Informe de muestra'
}

# Generar el PDF
pdf = report.generate(context, output='sample_report.pdf')

Salto en la generación de PDF en Python

Python ofrece una gama de bibliotecas poderosas para generar informes PDF. Ya estés creando facturas, informes empresariales o resúmenes de datos, estas herramientas te permiten automatizar el proceso, personalizar tus documentos y garantizar la consistencia de la marca. Elige la biblioteca que mejor se adapte a tus necesidades y comienza a crear PDFs profesionales hoy mismo!

Enlaces útiles