name: pdf description: Verwenden Sie diese Fähigkeit, wenn der Benutzer etwas mit PDF-Dateien tun möchte. Dies umfasst das Lesen oder Extrahieren von Text/Tabellen aus PDFs, das Zusammenführen oder Kombinieren mehrerer PDFs zu einer, das Aufteilen von PDFs, das Drehen von Seiten, das Hinzufügen von Wasserzeichen, das Erstellen neuer PDFs, das Ausfüllen von PDF-Formularen, das Ver-/Entschlüsseln von PDFs, das Extrahieren von Bildern und die OCR-Bearbeitung gescannter PDFs, um sie durchsuchbar zu machen. Wenn der Benutzer eine .pdf-Datei erwähnt oder darum bittet, eine zu erstellen, verwenden Sie diese Fähigkeit. license: Proprietär. LICENSE.txt enthält die vollständigen Bedingungen
PDF-Verarbeitungsleitfaden
Überblick
Dieser Leitfaden behandelt wesentliche PDF-Verarbeitungsoperationen mit Python-Bibliotheken und Befehlszeilenwerkzeugen. Für erweiterte Funktionen, JavaScript-Bibliotheken und detaillierte Beispiele lesen Sie REFERENCE.md. Wenn Sie ein PDF-Formular ausfüllen müssen, lesen Sie FORMS.md und befolgen Sie dessen Anweisungen.
Schnellstart
from pypdf import PdfReader, PdfWriter
# Ein PDF lesen
reader = PdfReader("document.pdf")
print(f"Seiten: {len(reader.pages)}")
# Text extrahieren
text = ""
for page in reader.pages:
text += page.extract_text()
Python-Bibliotheken
pypdf - Grundlegende Operationen
PDFs zusammenführen
from pypdf import PdfWriter, PdfReader
writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
reader = PdfReader(pdf_file)
for page in reader.pages:
writer.add_page(page)
with open("merged.pdf", "wb") as output:
writer.write(output)
PDF aufteilen
reader = PdfReader("input.pdf")
for i, page in enumerate(reader.pages):
writer = PdfWriter()
writer.add_page(page)
with open(f"page_{i+1}.pdf", "wb") as output:
writer.write(output)
Metadaten extrahieren
reader = PdfReader("document.pdf")
meta = reader.metadata
print(f"Titel: {meta.title}")
print(f"Autor: {meta.author}")
print(f"Betreff: {meta.subject}")
print(f"Ersteller: {meta.creator}")
Seiten drehen
reader = PdfReader("input.pdf")
writer = PdfWriter()
page = reader.pages[0]
page.rotate(90) # 90 Grad im Uhrzeigersinn drehen
writer.add_page(page)
with open("rotated.pdf", "wb") as output:
writer.write(output)
pdfplumber - Text- und Tabellenextraktion
Text mit Layout extrahieren
import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
text = page.extract_text()
print(text)
Tabellen extrahieren
with pdfplumber.open("document.pdf") as pdf:
for i, page in enumerate(pdf.pages):
tables = page.extract_tables()
for j, table in enumerate(tables):
print(f"Tabelle {j+1} auf Seite {i+1}:")
for row in table:
print(row)
Erweiterte Tabellenextraktion
import pandas as pd
with pdfplumber.open("document.pdf") as pdf:
all_tables = []
for page in pdf.pages:
tables = page.extract_tables()
for table in tables:
if table: # Prüfen, ob Tabelle nicht leer ist
df = pd.DataFrame(table[1:], columns=table[0])
all_tables.append(df)
# Alle Tabellen kombinieren
if all_tables:
combined_df = pd.concat(all_tables, ignore_index=True)
combined_df.to_excel("extracted_tables.xlsx", index=False)
reportlab - PDFs erstellen
Grundlegende PDF-Erstellung
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter
# Text hinzufügen
c.drawString(100, height - 100, "Hallo Welt!")
c.drawString(100, height - 120, "Dies ist ein mit reportlab erstelltes PDF")
# Eine Linie hinzufügen
c.line(100, height - 140, 400, height - 140)
# Speichern
c.save()
PDF mit mehreren Seiten erstellen
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.lib.styles import getSampleStyleSheet
doc = SimpleDocTemplate("report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = []
# Inhalt hinzufügen
title = Paragraph("Berichtstitel", styles['Title'])
story.append(title)
story.append(Spacer(1, 12))
body = Paragraph("Dies ist der Text des Berichts. " * 20, styles['Normal'])
story.append(body)
story.append(PageBreak())
# Seite 2
story.append(Paragraph("Seite 2", styles['Heading1']))
story.append(Paragraph("Inhalt für Seite 2", styles['Normal']))
# PDF erstellen
doc.build(story)
Tief- und Hochstellungen
WICHTIG: Verwenden Sie niemals Unicode-Tief-/Hochstellungszeichen (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) in ReportLab-PDFs. Die integrierten Schriftarten enthalten diese Glyphen nicht, was dazu führt, dass sie als ausgefüllte schwarze Kästchen dargestellt werden.
Verwenden Sie stattdessen die XML-Markup-Tags von ReportLab in Paragraph-Objekten:
from reportlab.platypus import Paragraph
from reportlab.lib.styles import getSampleStyleSheet
styles = getSampleStyleSheet()
# Tiefstellungen: <sub>-Tag verwenden
chemical = Paragraph("H<sub>2</sub>O", styles['Normal'])
# Hochstellungen: <super>-Tag verwenden
squared = Paragraph("x<super>2</super> + y<super>2</super>", styles['Normal'])
Bei canvas-gezeichnetem Text (keine Paragraph-Objekte) die Schriftgröße und -position manuell anpassen, anstatt Unicode-Tief-/Hochstellungen zu verwenden.
Befehlszeilenwerkzeuge
pdftotext (poppler-utils)
# Text extrahieren
pdftotext input.pdf output.txt
# Text mit Layout-Erhaltung extrahieren
pdftotext -layout input.pdf output.txt
# Bestimmte Seiten extrahieren
pdftotext -f 1 -l 5 input.pdf output.txt # Seiten 1-5
qpdf
# PDFs zusammenführen
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf
# Seiten aufteilen
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
qpdf input.pdf --pages . 6-10 -- pages6-10.pdf
# Seiten drehen
qpdf input.pdf output.pdf --rotate=+90:1 # Seite 1 um 90 Grad drehen
# Passwort entfernen
qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf
pdftk (falls verfügbar)
# Zusammenführen
pdftk file1.pdf file2.pdf cat output merged.pdf
# Aufteilen
pdftk input.pdf burst
# Drehen
pdftk input.pdf rotate 1east output rotated.pdf
Häufige Aufgaben
Text aus gescannten PDFs extrahieren
# Erfordert: pip install pytesseract pdf2image
import pytesseract
from pdf2image import convert_from_path
# PDF in Bilder konvertieren
images = convert_from_path('scanned.pdf')
# OCR für jede Seite
text = ""
for i, image in enumerate(images):
text += f"Seite {i+1}:\n"
text += pytesseract.image_to_string(image)
text += "\n\n"
print(text)
Wasserzeichen hinzufügen
from pypdf import PdfReader, PdfWriter
# Wasserzeichen erstellen (oder vorhandenes laden)
watermark = PdfReader("watermark.pdf").pages[0]
# Auf alle Seiten anwenden
reader = PdfReader("document.pdf")
writer = PdfWriter()
for page in reader.pages:
page.merge_page(watermark)
writer.add_page(page)
with open("watermarked.pdf", "wb") as output:
writer.write(output)
Bilder extrahieren
# Mit pdfimages (poppler-utils)
pdfimages -j input.pdf output_prefix
# Dies extrahiert alle Bilder als output_prefix-000.jpg, output_prefix-001.jpg usw.
Passwortschutz
from pypdf import PdfReader, PdfWriter
reader = PdfReader("input.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
# Passwort hinzufügen
writer.encrypt("userpassword", "ownerpassword")
with open("encrypted.pdf", "wb") as output:
writer.write(output)
Kurzreferenz
| Aufgabe | Bestes Werkzeug | Befehl/Code |
|---|---|---|
| PDFs zusammenführen | pypdf | writer.add_page(page) |
| PDFs aufteilen | pypdf | Eine Seite pro Datei |
| Text extrahieren | pdfplumber | page.extract_text() |
| Tabellen extrahieren | pdfplumber | page.extract_tables() |
| PDFs erstellen | reportlab | Canvas oder Platypus |
| Zusammenführen (Befehlszeile) | qpdf | qpdf --empty --pages ... |
| OCR für gescannte PDFs | pytesseract | Zuerst in Bild konvertieren |
| PDF-Formulare ausfüllen | pdf-lib oder pypdf (siehe FORMS.md) | Siehe FORMS.md |
Nächste Schritte
- Für erweiterte pypdfium2-Nutzung siehe REFERENCE.md
- Für JavaScript-Bibliotheken (pdf-lib) siehe REFERENCE.md
- Wenn Sie ein PDF-Formular ausfüllen müssen, befolgen Sie die Anweisungen in FORMS.md
- Für Fehlerbehebungsleitfäden siehe REFERENCE.md