PDF genereren in Python

Mijn favoriete bibliotheek is pdf-reports

Inhoud

PDF-rapporten genereren met Python

Python biedt met zijn uitgebreide bibliotheek en modules krachtige tools voor het genereren van professionele PDF-rapporten.

Deze gids bespreekt verschillende methoden om PDF-documenten te maken met Python, waaronder populaire bibliotheken zoals ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports en PdfKit.

python op het rapport

Waarom PDF-rapporten genereren met Python?

  • Automatisering: Python-scripts kunnen de generatie van rapporten automatiseren, wat tijd bespaart en menselijke fouten verminderd.
  • Aanpassing: Rapporten kunnen worden aangepast aan specifieke behoeften door tekst, afbeeldingen, tabellen en grafieken toe te voegen.
  • Consistentie: Zorg voor merkconsistentie over rapporten met gestandaardiseerde sjablonen.
  • Verscheidenheid: Genereer facturen, bedrijfsrapporten, dataoverzichten of elk ander documenttype.

Populaire Python-bibliotheken voor PDF-generatie

ReportLab

ReportLab is een veelzijdige bibliotheek die het mogelijk maakt om PDF-documenten programmatisch te maken. Het ondersteunt het toevoegen van tekst, afbeeldingen, tabellen en grafieken, waardoor het geschikt is voor verschillende rapporttypes.

Voordelen:

  • Rijke functionaliteit
  • Hoog niveau API voor eenvoudig gebruik
  • Ondersteunt geavanceerde functies zoals annotaties en interactieve vormen

Nadelen:

  • Steilere leercurve vergeleken met andere bibliotheken
  • Minder intuïtieve API voor bepaalde taken

Gebruik van ReportLab

Installatie: Installeer ReportLab met pip:

pip install reportlab

Basisopstelling:

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Tekst toevoegen:
python c.drawString(100, 800, "Hello World")
# Opslaan van de PDF:
python c.save()

FPDF

FPDF is een eenvoudige maar krachtige PDF-creatiebibliotheek geschreven in pure Python. Het is ideaal voor het genereren van basis PDF-documenten met minimale code.

Voordelen:

  • Eenvoudig te leren en gebruiken
  • Lichtgewicht en snel
  • Ondersteunt Unicode-tekens

Nadelen:

  • Beperkte functionaliteit vergeleken met ReportLab
  • Minder controle over de positie van elementen op de pagina

Gebruik van FPDF

Installatie: Installeer FPDF met pip:

pip install fpdf2
Basisopstelling:
from fpdf import FPDF pdf = FPDF()

# Tekst toevoegen:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Opslaan van de PDF:
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf is een converter van CSS/HTML naar PDF die ReportLab gebruikt onder de kap. Het is perfect voor het genereren van PDF’s van HTML-sjablonen, waardoor het een uitstekende keuze is voor web-naar-PDF-conversies.

Voordelen:

  • Converteert HTML en CSS naar PDF
  • Ondersteunt complexe lay-outs en styling
  • Integreert goed met webframeworks zoals Django

Nadelen:

  • Vereist kennis van HTML en CSS
  • Mogelijk niet geschikt voor eenvoudige, niet-webgerichte rapporten

Gebruik van Xhtml2pdf

Installatie: Installeer Xhtml2pdf met pip:

pip install xhtml2pdf

Een PDF genereren vanuit 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 is een veelzijdige Python-bibliotheek die ontwikkelaars in staat stelt HTML en CSS om te zetten in PDF-documenten met hoge kwaliteit rendering. Het is vooral handig voor het genereren van rapporten, facturen of andere documenten die nauwkeurige opmaak vereisen. Hieronder zijn verschillende voorbeelden die laten zien hoe WeasyPrint in verschillende scenario’s kan worden gebruikt.

Kenmerken

  • Converteert HTML en CSS naar PDF-documenten.
  • Verwerkt dynamische data rendering met behulp van sjabloonengines zoals Jinja2.

Installatie:

pip install weasyprint

Hier is een eenvoudig voorbeeld van het genereren van een PDF vanuit een HTML-string:

from weasyprint import HTML

html_string = """
<html>
<head><title>Voorbeeld PDF</title></head>
<body>
<h1>Hallo, WeasyPrint!</h1>
<p>Dit is een voorbeeld PDF gegenereerd met behulp van WeasyPrint.</p>
</body>
</html>
"""

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

In dit voorbeeld wordt de HTML-klasse van WeasyPrint gebruikt om een HTML-string om te zetten in een PDF-bestand genaamd “voorbeeld.pdf”.

HTML laden vanuit bestanden

Je kunt ook HTML-inhoud direct laden vanuit bestanden:

from weasyprint import HTML

# HTML laden vanuit een bestand
HTML('voorbeeld.html').write_pdf('uitvoer.pdf')

Deze methode is handig wanneer je je HTML-inhoud opslaat in een extern bestand. Gebruik van CSS-stijlvelen

WeasyPrint ondersteunt het gebruik van CSS-stijlvelen om je PDF-documenten te stijlen. Hier is hoe je een CSS-bestand kunt toepassen:

from weasyprint import HTML

# HTML en CSS laden vanuit bestanden
HTML('voorbeeld.html').write_pdf('uitvoer.pdf', stylesheets=['voorbeeld.css'])

Dit maakt het mogelijk om complexere stijlen toe te passen, waardoor het makkelijker wordt om visueel aantrekkelijke PDF’s te maken .

Jinja2

Jinja2 is een krachtige sjabloonmotor voor Python die het mogelijk maakt om dynamische inhoud te genereren door Python-expressies, voorwaarden en lussen in sjablonen in te bedenken. Deze gids leidt je door verschillende voorbeelden van het gebruik van Jinja2 in Python, van basisvariabele vervanging tot geavanceerde functies zoals sjabloonovererving.

Belangrijke kenmerken van Jinja2

  • Een sjabloonmotor die kan worden gebruikt in combinatie met WeasyPrint of ReportLab voor het dynamisch genereren van HTML-inhoud.
  • Ideaal voor het invoegen van data in vooraf gedefinieerde sjablonen.
  • Installatie:
pip install jinja2

zie voorbeelden op de officiële jinja2 documentatiepagina: https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit is een krachtige Python-bibliotheek die het proces van het converteren van HTML-inhoud naar PDF-documenten vereenvoudigt. Het fungeert als een wrapper voor de wkhtmltopdf-utility, die WebKit gebruikt om HTML-pagina’s nauwkeurig in PDF-formaat te renderen. Deze gids leidt je door verschillende voorbeelden en gebruiksscenario’s van het genereren van PDF’s met pdfkit.

Belangrijke kenmerken

Installatie:

# en zorg ervoor dat wkhtmltopdf is geïnstalleerd.

Basisgebruik - converteren van HTML-string naar PDF

Je kunt een eenvoudige HTML-string converteren naar een PDF-bestand met pdfkit.from_string():

import pdfkit

html_voorbeeld = """
<html>
<head><title>Voorbeeld PDF</title></head>
<body>
<h1>Dit is een kop</h1>
<p>Eerste regel.</p>
<p>Tweede regel.</p>
<p>Derde regel.</p>
<p>Vierde regel.</p>
</body>
</html>
"""

pdfkit.from_string(html_voorbeeld, 'uitvoer.pdf')

Dit genereert een PDF-bestand genaamd uitvoer.pdf in de huidige map.

Lokaal HTML-bestand converteren naar PDF

Als je een HTML-bestand lokaal hebt opgeslagen, gebruik dan pdfkit.from_file():

import pdfkit

pdfkit.from_file('lokale.html', 'voorbeeld.pdf')

PDF-rapportenbibliotheek (pdf-reports)

Het maken van PDF-rapporten met de pdf-reports-bibliotheek in Python kan een krachtige manier zijn om professionele documenten te genereren vanuit HTML- of Pug-sjablonen. Deze bibliotheek maakt gebruik van moderne componenten via het Semantic UI-framework en biedt routines voor het invoegen van tabellen, grafieken en andere elementen in je PDF’s.

De pdf-reports-bibliotheek is ontworpen om visueel aantrekkelijke PDF-rapporten te maken vanuit HTML- of Pug-sjablonen. Het ondersteunt officieel Python 3.x, maar kan ook op Python 2.x draaien met de juiste versie van weasyprint. Dit maakt het een veelzijdig hulpmiddel voor het genereren van dynamische en goed opgemaakte documenten programmatisch.

Belangrijke kenmerken

  • Moderne componenten: Gebruikt het Semantic UI-framework voor moderne componenten.
  • Invoegen van elementen: Stelt u in staat om tabellen, grafieken en andere elementen in de PDF’s in te voegen.
  • Sjabloonondersteuning: Ondersteunt HTML- en Pug-sjablonen voor flexibele rapportontwerp.

Voorbeeldgebruik van pdf-reports

Installatie:

pip install pdf-reports

Hier is een basisvoorbeeld van hoe je de pdf-reports-bibliotheek kunt gebruiken:

from pdf_reports import PDFReport

# Definieer je sjabloonbestand (template.pug)
sjabloon = """
doctype html
html
  head
    title= titel
  body
    h1= titel
    p Dit is een voorbeeldrapport.
"""

# Maak een PDF-rapportinstantie
rapport = PDFReport(sjabloon)

# Stel de context voor het sjabloon in
context = {
    'titel': 'Voorbeeldrapport'
}

# Genereer de PDF
pdf = rapport.generate(context, output='voorbeeldrapport.pdf')

Start met het genereren van PDF’s in Python

Python biedt een reeks krachtige bibliotheken voor het genereren van PDF-rapporten. Of je nu facturen, bedrijfsrapporten of dataoverzichten maakt, deze tools laten je het proces automatiseren, je documenten aanpassen en merkconsistentie waarborgen. Kies de bibliotheek die het beste bij je behoeften past en begin vandaag met het maken van professionele PDF’s!