Generera PDF i Python
Mitt favoritbibliotek är pdf-rapporter
Generera PDF-rapporter med Python
Python, med sina omfattande bibliotek och moduler, erbjuder kraftfulla verktyg för att skapa professionella PDF-rapporter.
Den här guiden utforskar olika metoder för att skapa PDF-dokument med Python, med fokus på populära bibliotek som ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports och PdfKit.

Varför generera PDF-rapporter med Python?
- Automatisering: Python-skript kan automatisera rapportgenerering, vilket sparar tid och minskar mänskliga fel.
- Anpassning: Anpassa rapporter efter specifika behov genom att lägga till text, bilder, tabeller och grafer.
- Enhetlighet: Säkerställ varumärkesenhetlighet i rapporter med standardiserade mallar.
- Anpassningsbarhet: Generera fakturor, affärsrapporter, datasammanfattningar eller andra dokumenttyper.
Populära Python-bibliotek för PDF-generering
ReportLab
ReportLab är ett mångsidigt bibliotek som låter dig skapa PDF-dokument programmatiskt. Det stöder att lägga till text, bilder, tabeller och grafik, vilket gör det lämpligt för olika typer av rapporter.
Fördelar:
- Rikt funktioner
- Högnivå-API för enkel användning
- Stöder avancerade funktioner som anteckningar och interaktiva formulär
Nackdelar:
- Brantare inlärningskurva jämfört med andra bibliotek
- Mindre intuitiv API för vissa uppgifter
Användning av ReportLab
Installation: Installera ReportLab med pip:
pip install reportlab
Grundläggande inställning:
from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Lägg till text:
python c.drawString(100, 800, "Hello World")
# Spara PDF:
python c.save()
FPDF
FPDF är ett enkelt men kraftfullt PDF-skapa bibliotek skrivet i ren Python. Det är idealiskt för att generera grundläggande PDF-dokument med minimal kod.
Fördelar:
- Lätt att lära och använda
- Lättviktigt och snabbt
- Stöder Unicode-tecken
Nackdelar:
- Begränsat funktioner jämfört med ReportLab
- Mindre kontroll över elementplacering på sidan
Användning av FPDF
Installation: Installera FPDF med pip:
pip install fpdf2
Grundläggande inställning:
from fpdf import FPDF
pdf = FPDF()
# Lägg till text:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Spara PDF:
python pdf.output('hello.pdf', 'F')
Xhtml2pdf
Xhtml2pdf är en CSS/HTML till PDF-omvandlare som använder ReportLab i bakgrunden. Det är perfekt för att generera PDF:er från HTML-mallar, vilket gör det till ett utmärkt val för webb-till-PDF-omvandlingar.
Fördelar:
- Omvandlar HTML och CSS till PDF
- Stöder komplexa layout och stil
- Integreras väl med webbramverk som Django
Nackdelar:
- Kräver kunskap om HTML och CSS
- Kan vara olämpligt för enkla, icke-webbbaserade rapporter
Användning av Xhtml2pdf
Installation: Installera Xhtml2pdf med pip:
pip install xhtml2pdf
Generera PDF från HTML:
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 är ett mångsidigt Python-bibliotek som låter utvecklare omvandla HTML och CSS till PDF-dokument med högkvalitativ rendering. Det är särskilt användbart för att generera rapporter, fakturor eller andra dokument som kräver exakt formatering. Nedan följer flera exempel på hur man använder WeasyPrint i olika scenarier.
Funktioner
- Omvandlar HTML och CSS till PDF-dokument.
- Hanterar dynamisk datavisning med hjälp av mallmotorer som Jinja2.
Installation:
pip install weasyprint
Här är ett enkelt exempel på att generera en PDF från en HTML-sträng:
from weasyprint import HTML
html_string = """
<html>
<head><title>Exempel PDF</title></head>
<body>
<h1>Hej, WeasyPrint!</h1>
<p>Detta är en exempel-PDF genererad med WeasyPrint.</p>
</body>
</html>
"""
HTML(string=html_string).write_pdf("exempel.pdf")
I det här exemplet används HTML-klassen från WeasyPrint för att omvandla en HTML-sträng till en PDF-fil med namnet “exempel.pdf”.
Ladda HTML från filer
Du kan också ladda HTML-innehåll direkt från filer:
from weasyprint import HTML
# Ladda HTML från en fil
HTML('exempel.html').write_pdf('utdata.pdf')
Den här metoden är användbar när du har ditt HTML-innehåll lagrat i en extern fil.
Använda CSS-stilar
WeasyPrint stöder användning av CSS-stilar för att styla dina PDF-dokument. Här är hur du kan tillämpa en CSS-fil:
from weasyprint import HTML
# Ladda HTML och CSS från filer
HTML('exempel.html').write_pdf('utdata.pdf', stylesheets=['exempel.css'])
Detta möjliggör mer komplex styling, vilket gör det enklare att skapa visuellt tilltalande PDF:er.
Jinja2
Jinja2 är en kraftfull mallmotor för Python som låter dig generera dynamiskt innehåll genom att inbädda Python-uttryck, villkor och loopar i mallar. Den här guiden kommer att gå igenom olika exempel på att använda Jinja2 i Python, från grundläggande variabelersättning till mer avancerade funktioner som mallarv.
Jinja2s nyckelfunktioner
- En mallmotor som kan användas i kombination med WeasyPrint eller ReportLab för att dynamiskt generera HTML-innehåll.
- Idealisk för att inbädda data i fördefinierade mallar.
- Installation:
pip install jinja2
se exempel på den officiella Jinja2-dokumentationssidan: https://jinja.palletsprojects.com/en/3.0.x/
pdfkit
pdfkit är ett kraftfullt Python-bibliotek som förenklar processen att omvandla HTML-innehåll till PDF-dokument. Det fungerar som en wrapper för verktyget wkhtmltopdf, som använder WebKit för att noggrant rendera HTML-sidor i PDF-format. Den här guiden kommer att gå igenom olika exempel och användningsområden för att generera PDF:er med pdfkit.
Nyckelfunktioner
- En Python-wrapper för wkhtmltopdf, som omvandlar HTML till PDF.
- Kräver systeminstallation av wkhtmltopdf. https://wkhtmltopdf.org/downloads.html
Installation:
pip install pdfkit
# och se till att wkhtmltopdf är installerad.
Grundläggande användning - Omvandla HTML-sträng till PDF
Du kan omvandla en enkel HTML-sträng till en PDF-fil med pdfkit.from_string():
import pdfkit
html_sample = """
<html>
<head><title>Exempel PDF</title></head>
<body>
<h1>Detta är en rubrik</h1>
<p>Första raden.</p>
<p>Andra raden.</p>
<p>Tredje raden.</p>
<p>Fjärde raden.</p>
</body>
</html>
"""
pdfkit.from_string(html_sample, 'utdata.pdf')
Detta kommer att generera en PDF-fil med namnet utdata.pdf i den aktuella katalogen.
Omvandla lokal HTML-fil till PDF
Om du har en HTML-fil lagrad lokalt, använd pdfkit.from_file():
import pdfkit
pdfkit.from_file('lokal.html', 'exempel.pdf')
PDF Reports-bibliotek (pdf-reports)
Att skapa PDF-rapporter med pdf-reports-biblioteket i Python kan vara ett kraftfullt sätt att generera professionellt utseende dokument från HTML- eller Pug-mallar. Detta bibliotek använder moderna komponenter via Semantic UI-ramverket och erbjuder rutiner för att inbädda tabeller, diagram och andra element i dina PDF:er.
pdf-reports-biblioteket är utformat för att skapa visuellt tilltalande PDF-rapporter från HTML- eller Pug-mallar. Det stöder officiellt Python 3.x men kan också köras på Python 2.x med den lämpliga versionen av weasyprint. Detta gör det till ett mångsidigt verktyg för att programmatiskt generera dynamiska och välstrukturerade dokument.
Nyckelfunktioner
- Moderna komponenter: Använder Semantic UI-ramverket för moderna utseenden.
- Inbäddning av element: Låter dig inbädda tabeller, diagram och andra element i PDF:erna.
- Mallstöd: Stöder HTML- och Pug-mallar för flexibel rapportdesign.
Exempel på användning av pdf-reports
Installation:
pip install pdf-reports
Här är ett grundläggande exempel på hur man använder pdf-reports-biblioteket:
from pdf_reports import PDFReport
# Definiera din mallfil (mall.pug)
mall = """
doctype html
html
head
title= title
body
h1= title
p Detta är en exempelrapport.
"""
# Skapa en PDF-rapportsinstans
rapport = PDFReport(mall)
# Ställ in kontexten för mallen
kontext = {
'title': 'Exempelrapport'
}
# Generera PDF:n
pdf = rapport.generate(kontext, output='exempel_rapport.pdf')
Avslutande tankar om PDF-generering i Python
Python erbjuder ett brett utbud av kraftfulla bibliotek för att generera PDF-rapporter. Oavsett om du skapar fakturor, affärsrapporter eller datasammanfattningar, låter dessa verktyg dig automatisera processen, anpassa dina dokument och säkerställa varumärkesenhetlighet. Välj det bibliotek som bäst passar dina behov och börja skapa professionella PDF:er idag!