Zuletzt aktualisiert: 29 Jan, 2025

Titel - Arbeiten mit PDF-Dateien in Python

In diesem Artikel führen wir Sie durch das Arbeiten mit PDF-Dateien mithilfe von Python. Wir verwenden hierfür die pypdf Bibliothek.

Mit der pypdf-Bibliothek zeigen wir, wie man die folgenden Operationen in Python durchführt:

  • Extrahieren von Text aus PDFs
  • Drehen von PDF-Seiten
  • Zusammenführen mehrerer PDFs
  • Teilen von PDFs in separate Dateien
  • Hinzufügen von Wasserzeichen zu PDF-Seiten

Hinweis: Dieser Artikel enthält viele wertvolle Informationen, daher können Sie jederzeit direkt zu den für Sie interessantesten Abschnitten springen! Der Inhalt ist so strukturiert, dass er eine einfache Navigation ermöglicht, sodass Sie sich schnell auf das für Sie Relevanteste konzentrieren können.

Illustration - Arbeiten mit PDF-Dateien in Python

Beispielcodes

Sie können alle im Artikel verwendeten Beispielcodes unter folgendem Link herunterladen. Es beinhaltet den Code, Eingabedateien und Ausgabedateien.

pypdf installieren

Um pypdf zu installieren, führen Sie einfach den folgenden Befehl in Ihrem Terminal oder in der Kommandozeile aus:

pip install pypdf

Hinweis: Der obige Befehl ist case-sensitive.

1. Text aus einer PDF-Datei mit Python extrahieren

Codeerklärung

1. Erstellen eines PDF-Lesers

reader = PdfReader(pdf_file)
  • PdfReader(pdf_file) lädt die PDF-Datei in ein Leserobjekt.
  • Dieses Objekt ermöglicht den Zugriff auf die Seiten und deren Inhalte.

2. Durchlaufen der Seiten

for page_number, page in enumerate(reader.pages, start=1):
  • reader.pages gibt eine Liste der Seiten im PDF zurück.
  • enumerate(..., start=1) weist eine Seitennummer ab 1 zu.

3. Ausdruck des extrahierten Textes

    print(f"Seite {page_number}:")
    print(page.extract_text())
    print("-" * 50)  # Separator für bessere Lesbarkeit
  • page.extract_text() extrahiert den Textinhalt der aktuellen Seite.
  • Das Skript druckt den extrahierten Text zusammen mit der Seitennummer aus.
  • "-" * 50 druckt eine Trennlinie (--------------------------------------------------) für bessere Lesbarkeit.

Eingabepdf-Datei, die im Code verwendet wird

Ausgabe des Codes

2. PDF-Seiten mit Python drehen

Code-Erklärung

Der Code dreht im Wesentlichen die erste Seite um 90° im Uhrzeigersinn und speichert das modifizierte PDF, ohne andere Seiten zu beeinflussen.

1. Import der benötigten Klassen

from pypdf import PdfReader, PdfWriter
  • PdfReader: Liest das Eingabepdf.
  • PdfWriter: Erstellt ein neues PDF mit den Modifikationen.

2. Eingangs- und Ausgangsdateipfade definieren

input_pdf = "pdf-to-rotate/input.pdf"
output_pdf = "pdf-to-rotate/rotated_output.pdf"
  • Das Skript liest aus input.pdf und speichert die modifizierte Datei als rotated_output.pdf.

3. Lesen der PDF und Erstellen eines Writer-Objekts

reader = PdfReader(input_pdf)
writer = PdfWriter()
  • reader lädt die bestehende PDF.
  • writer wird verwendet, um die modifizierten Seiten zu speichern.

4. Erste Seite um 90 Grad drehen

page = reader.pages[0]
page.rotate(90)  # 90 Grad im Uhrzeigersinn drehen
writer.add_page(page)
  • Extrahiert Seite 1, dreht sie um 90 Grad und fügt sie dem neuen PDF hinzu.

5. Hinzufügen der restlichen Seiten unverändert

for i in range(1, len(reader.pages)):
    writer.add_page(reader.pages[i])
  • Durchläuft die restlichen Seiten und fügt sie unverändert hinzu.

6. Neues PDF speichern

with open(output_pdf, "wb") as file:
    writer.write(file)
  • Öffnet rotated_output.pdf im schreib-binären Modus und speichert das neue PDF.

7. Erfolgsnachricht drucken

print(f"Rotierte Seite gespeichert in {output_pdf}")
  • Zeigt eine Erfolgsnachricht an.

Eingangs-PDF verwendet im Code und seine gedrehte Ausgabe

Screenshot Screenshot der gedrehten Seite in PDF mit Python

3. Zusammenführen von PDF-Dateien mit Python

Dieses Python-Skript zeigt, wie man mehrere PDF-Dateien aus einem Verzeichnis zu einem einzigen PDF mithilfe der PyPDF-Bibliothek zusammenführt.

Code-Erklärung

  • Dieses Skript führt automatisch alle PDF-Dateien im angegebenen Verzeichnis (pdfs-to-merge) zu einer einzigen Ausgabedatei (merged_output.pdf) zusammen.
  • Es stellt sicher, dass das Ausgabeverzeichnis vorhanden ist, und fügt die Seiten jeder PDF in der Reihenfolge hinzu, in der sie aufgelistet sind.
  • Sie gibt die endgültige zusammengeführte Datei im Unterverzeichnis output-dir aus.

Code-Zusammenfassung

1. Bibliotheken importieren

import os
from pypdf import PdfReader, PdfWriter
  • os: Wird verwendet, um mit dem Dateisystem zu interagieren, wie das Lesen von Verzeichnissen und das Verwenden von Datei-Pfaden.
  • PdfReader: Liest den Inhalt einer PDF-Datei.
  • PdfWriter: Erstellt und schreibt eine neue PDF-Datei.

2. Verzeichnis und Ausgabedatei definieren

directory = "pdfs-to-merge"
output_file = "output-dir/merged_output.pdf"
  • directory: Gibt den Ordner an, in dem die PDF-Dateien gespeichert sind.
  • output_file: Definiert den Ausgabepfad und den Namen des zusammengeführten PDFs.

3. Erstellen Sie das Ausgabeverzeichnis, falls es nicht existiert

os.makedirs(os.path.join(directory, "output-dir"), exist_ok=True)
  • Dies stellt sicher, dass das Ausgabeverzeichnis existiert, und falls nicht, wird es erstellt.

4. Erstellen eines PdfWriter-Objekts

writer = PdfWriter()
  • writer wird verwendet, um alle Seiten der PDFs zu sammeln und zu kombinieren.

5. Iterieren über alle PDF-Dateien im Verzeichnis

for file_name in sorted(os.listdir(directory)):
    if file_name.endswith(".pdf"):
        file_path = os.path.join(directory, file_name)
        print(f"Angehängt: {file_name}")
  • Diese Schleife geht durch alle Dateien im angegebenen Verzeichnis, sucht nach Dateien mit der .pdf-Erweiterung. Sie verwendet sorted(), um diese in alphabetischer Reihenfolge zu verarbeiten.

6. Lesen und Anhängen jeder PDF-Seite in den Writer

reader = PdfReader(file_path)
writer.append(reader)
  • Für jede PDF liest PdfReader die Datei und dann werden alle Seiten dieser PDF an writer angehängt.

7. Schreiben des zusammengefügten PDFs an eine Ausgabedatei

output_path = os.path.join(directory, output_file)
with open(output_path, "wb") as output_pdf:
    writer.write(output_pdf)
  • Nachdem alle Seiten gesammelt wurden, schreibt writer.write() das zusammengeführte PDF an den angegebenen Ausgabepfad.

8. Erfolgsnachricht drucken

print(f"Zusammengeführtes PDF gespeichert als: {output_path}")
  • Eine Erfolgsnachricht, die den Speicherort des gespeicherten zusammengeführten PDFs bestätigt, wird gedruckt.

Eingabepdf-Dateien, die im Code und der zusammengeführten PDF-Ausgabe verwendet werden

4. Aufteilen einer PDF mit Python

Code-Erklärung

Das obige Python-Skript teilt eine PDF in einzelne Seiten mit der PyPDF-Bibliothek auf. Es stellt zuerst sicher, dass das Ausgabeverzeichnis existiert, dann liest es die Eingabepdf-Datei. Das Skript durchläuft jede Seite, erstellt ein neues PdfWriter-Objekt und speichert jede Seite als individuelle PDF-Datei. Die Ausgabedateien werden sequenziell benannt (z.B. page_1.pdf, page_2.pdf) und im output-dir-Ordner gespeichert. Schließlich druckt es eine Bestätigungsnachricht für jede erstellte Datei und benachrichtigt, wenn der Vorgang abgeschlossen ist.

Eingabepdf und aufgeteilte Ausgabedateien

5. Hinzufügen eines Wasserzeichens zu einem PDF mit Python

Sie können ein Wasserzeichen zu einem PDF mit der PyPDF-Bibliothek hinzufügen, indem Sie ein Wasserzeichen-PDF auf ein bestehendes PDF legen. Stellen Sie sicher, dass das Wasserzeichen-PDF nur eine Seite hat, damit es korrekt auf jede Seite des Haupt-PDFs angewendet wird.

Code-Erklärung

Das obige Python-Skript liest eine Eingabepdf, extrahiert ein einseitiges Wasserzeichen-PDF, legt das Wasserzeichen auf jede Seite der Eingabepdf und speichert das finale wasserzeichenbeladene PDF.

Code-Zusammenfassung

Hier ist eine kurze Erklärung zu jedem Teil

1. Erforderliche Klassen importieren

from pypdf import PdfReader, PdfWriter
  • PdfReader wird verwendet, um bestehende PDFs zu lesen.
  • PdfWriter wird verwendet, um ein neues PDF zu erstellen und zu schreiben.

2. Datei-Pfade definieren

input_pdf = "pdf-to-watermark/input.pdf"
watermark_pdf = "pdf-to-watermark/watermark.pdf"
output_pdf = "pdf-to-watermark/output_with_watermark.pdf"
  • input_pdf: Das Original-PDF, dem das Wasserzeichen hinzugefügt wird.
  • watermark_pdf: Ein separates einseitiges PDF, das als Wasserzeichen dient.
  • output_pdf: Die Ausgabedatei, die die wasserzeichenbeladenen Seiten enthalten wird.

3. PDFs lesen

reader = PdfReader(input_pdf)
watermark = PdfReader(watermark_pdf)
  • reader: Liest die Eingabepdf.
  • watermark: Liest die Wasserzeichen-PDF.

4. Erstellen eines Writer-Objekts

writer = PdfWriter()
  • Dies wird verwendet, um das finale wasserzeichenbeladene PDF zu erstellen.

5. Wasserzeichenseite extrahieren

watermark_page = watermark.pages[0]
  • Geht davon aus, dass die Wasserzeichen-PDF nur eine Seite hat, die auf alle Seiten gelegt wird.

6. Iterieren über Eingabepdf-Seiten & Überlagern des Wasserzeichens

for page in reader.pages:
    # Mischen das Wasserzeichen mit der aktuellen Seite
    page.merge_page(watermark_page)
    
    # Hinzufügen der gemischten Seite zum Writer
    writer.add_page(page)
  • Durchläuft jede Seite von input_pdf.
  • merge_page(watermark_page) überlagert das Wasserzeichen über die aktuelle Seite.
  • Fügt die modifizierte Seite dem writer hinzu.

7. Wasserzeichenbefrachtetes PDF speichern

with open(output_pdf, "wb") as output_file:
    writer.write(output_file)
  • Schreibt die modifizierten Seiten in eine neue PDF-Datei.

8. Bestätigungsnachricht drucken

print(f"Wasserzeichen PDF gespeichert als: {output_pdf}")
  • Druckt den Ausgabepfad zur Bestätigung.

Eingabepdf, Wasserzeichen-PDF und Ausgabepdf mit Wasserzeichen

Screenshot Screenshot der wasserzeichenbeladenen PDF mit Python

Fazit

In diesem Leitfaden haben wir grundlegende PDF-Operationen in Python untersucht, einschließlich des Extrahierens von Text, des Drehens von Seiten, des Zusammenführens, Aufteilens und Hinzufügens von Wasserzeichen. Mit diesen Fähigkeiten können Sie nun Ihren eigenen PDF-Manager erstellen und verschiedene PDF-Aufgaben effizient automatisieren.