Einleitung
Aspose.PDF FOSS für Python ist eine neue Open-Source-Bibliothek zum Arbeiten mit PDF-Dokumenten aus Python-Code. Sie wird unter der MIT-Lizenz veröffentlicht und vollständig in Python implementiert – der PDF-Parser, Writer, Seiten-Rasterizer und die Verschlüsselungsroutinen sind Teil des Pakets selbst, wobei die erforderlichen Abhängigkeiten auf cryptography und asn1crypto beschränkt sind. Optionale Extras fügen Pillow-basierte Bildunterstützung, Brotli-basierte WOFF2-Schriftart-Dekodierung und HarfBuzz-basierte komplexe Text-Shaping-Funktionalität hinzu.
Die Bibliothek ist um die Klasse Document herum organisiert, die ein PDF aus einem Pfad, Bytes oder einem binären Stream lädt und seine Seiten über document.pages bereitstellt, ein PageCollection, das Iteration, Indexierung und Slicing unterstützt. Von dort aus deckt das API das Hinzufügen von Text und Bildern zu Seiten, das Lesen und Modifizieren von Anmerkungen, das Erstellen und Ausfüllen von AcroForm-Feldern, das Verschlüsseln und Entschlüsseln von Dokumenten sowie das Extrahieren von Text und Anhängen ab – die Vorgänge, die nötig sind, um neue PDFs zu erstellen oder mit bestehenden zu arbeiten.
Dieses Release richtet sich an Entwickler, die PDF-Verarbeitung innerhalb einer Python-Codebasis ohne kommerzielle Lizenz benötigen: Bericht- und Rechnungserstellung, Dokument-Ingestions-Pipelines, Formular-Ausfüll-Automatisierung und Dienste, die PDF-Seiten in Bilder rendern oder Text für nachgelagertes Indexieren extrahieren müssen. Das Projekt befindet sich derzeit in der Alpha-Phase, sodass sich APIs und Funktionsumfang vor dem ersten stabilen Release noch ändern können. Python 3.11 oder neuer ist erforderlich.
Was enthalten ist
Dokumentenerstellung und Laden
PdfDocument() erstellt ein leeres PDF; PdfDocument(source, password=..., limits=...) lädt ein vorhandenes aus einem Pfad, rohen Bytes oder einem binären Stream und entspricht dem Aufruf von PdfDocument().load_from(source, ...). Beide werfen eine Ausnahme bei fehlender Datei, Nicht‑PDF‑Daten oder fehlendem Passwort, anstatt ein leeres Dokument zurückzugeben. PdfDocument ist ein Context‑Manager, sodass Ressourcen automatisch freigegeben werden, wenn der with-Block beendet wird.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Generated by Aspose.PDF FOSS", x=72, y=720, font_size=14)
document.save("report.pdf")
with Document("report.pdf") as document:
print(f"Pages: {document.page_count}")
print(f"PDF version: {document.version}")
Text und Bilder hinzufügen
Page.add_text platziert Standard‑14‑ oder eingebetteten Unicode‑Text an einer x/y‑Position mit einem angegebenen font_size; das font‑Argument kann ein FontDescriptor, rohe Font‑Bytes oder ein Pfad zu einer TrueType/OpenType‑Schriftart für Unicode außerhalb der Standard‑14‑Kodierungen sein. Page.add_image platziert ein rohes, JPEG‑ oder PNG‑Bild‑XObject auf der Seite an einer angegebenen Position und Größe.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text(
"Quarterly Summary",
x=72,
y=740,
font_size=16,
)
page.add_image(
"chart.png",
x=72,
y=420,
width=300,
height=200,
)
document.save("summary.pdf")
Annotationen
Jedes Page stellt seine Annotationen über page.annotations, ein AnnotationCollection, bereit. add(subtype, rect, contents, title, appearance_normal, properties) erstellt und fügt eine Annotation eines Standard-Subtyps wie Square, Circle, Line, Highlight oder FreeText ein und gibt ein Annotation zurück. Der Aufruf von generate_appearance() auf der zurückgegebenen Annotation erzeugt einen Appearance-Stream aus ihrer Geometrie und ihren Eigenschaften.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
annotation = page.annotations.add(
"Square",
(100, 600, 300, 680),
"Needs review",
properties={"C": [1, 0, 0]},
)
annotation.generate_appearance()
document.save("annotated.pdf")
Formularfelder
document.form gibt das Form des Dokuments zurück, das AcroForm Felder direkt erstellt: add_text_field(), add_checkbox(), add_radio_group(), add_list_box(), add_combo_box() und add_push_button() akzeptieren jeweils einen Feldnamen, ein Page oder Seitenindex sowie ein Platzierungsrechteck und geben ein Field zurück. Das Setzen von field.value aktualisiert den Wert des Feldes, und form.flatten() backt das Aussehen jedes Feldes in statischen Seiteninhalt ein.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
form = document.form
field = form.add_text_field(
"customer_name",
page,
(72, 700, 300, 720),
)
field.value = "Jane Doe"
form.flatten()
document.save("form.pdf")
Verschlüsselung
Document.encrypt(user_password, owner_password, permissions) schützt ein Dokument mit einem Benutzer-Passwort, einem Besitzer-Passwort und einer Berechtigungs-Bitmaske und gibt das gleiche Document für das Chaining zurück. Document.decrypt(password) kehrt den Vorgang um, und die is_encrypted-Eigenschaft gibt den aktuellen Zustand zurück. Das erneute Laden eines verschlüsselten Dokuments erfordert das Übergeben von password= an den Konstruktor oder an load_from().
from aspose_pdf import Document
with Document("report.pdf") as document:
document.encrypt(user_password="user-pass", owner_password="owner-pass", permissions=0)
document.save("encrypted.pdf")
with Document("encrypted.pdf", password="user-pass") as document:
print(f"Encrypted: {document.is_encrypted}")
Textextraktion
PdfExtractor bindet an eine Quelle mit bind_pdf(), dann extract_text() durchläuft die Seiten des Dokuments. get_text() gibt den gesamten extrahierten Text auf einmal zurück, während has_next_page_text() und get_next_page_text() das Ergebnis seitenweise iterieren. PdfExtractor ist ebenfalls ein Kontextmanager.
from aspose_pdf import PdfExtractor
with PdfExtractor() as extractor:
extractor.bind_pdf("report.pdf")
extractor.extract_text()
while extractor.has_next_page_text():
print(extractor.get_next_page_text())
Schnellstart
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text(
"Hello from Aspose.PDF FOSS!",
x=72,
y=720,
font_size=18,
)
document.save("hello.pdf")
with Document("hello.pdf") as document:
print(f"Pages: {document.page_count}")
print(f"PDF version: {document.version}")
Unterstützte Formate
| Format | Erweiterung | Lesen | Schreiben |
|---|---|---|---|
| ✓ | ✓ | ||
| PNG | .png | — | ✓ |
| TIFF | .tiff | — | ✓ |
PDF ist das Kern-Ein- und Ausgabeformat der Bibliothek, wird über Document/load_from() gelesen und über Document.save geschrieben. PNG und TIFF sind seitenrendernde Ausgaben, die von Page.render, Page.save_as_image und Document.save_page_as_image erzeugt werden.
Open Source & Lizenzierung
Aspose.PDF FOSS für Python wird unter der MIT-Lizenz verbreitet, wobei der vollständige Quellcode unter github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python verfügbar ist. Die Lizenz erlaubt kommerzielle Nutzung, Modifikation und Weiterverteilung ohne separate Vereinbarung.