Einleitung

Aspose.PDF FOSS für Python enthält ein aspose_pdf.generated Teilpaket mit vier Modulen: document.py, forms.py, pdfa.py und security.py. Keines davon wird vom Top-Level-aspose_pdf-Paket re-exportiert, sodass jede Klasse in diesem Leitfaden über ihren vollständigen, punktierten Pfad importiert wird — from aspose_pdf.generated.document import Document, nicht from aspose_pdf import Document.

Die vier Module verfolgen zwei unterschiedliche Ansätze. generated.document, generated.forms und generated.pdfa definieren jeweils eigene Klassen: unabhängige Implementierungen, die die Struktur des Hauptpakets Document, UnsignedContent/UnsignedContentAbsorber und PdfAValidateOptions/PdfAValidationResult spiegeln — nützlich für Code, der gegen dieses gespiegelte Namespace-Layout geschrieben ist, aber ein echtes, separates Satz von Klassen statt Aliasen. generated.security hingegen führt keinerlei Neuimplementation durch: Es importiert CompromiseCheckResult, SignaturesCompromiseDetector und die Validierungs-Enums direkt aus aspose_pdf.security und aspose_pdf.validation und exportiert sie erneut, sodass beide Importpfade auf dasselbe Klassenobjekt verweisen.

Dieses Handbuch behandelt alle vier und erklärt ausdrücklich, wo sich eine generated-Klasse anders verhält als ihr Gegenstück im Hauptpaket mit demselben Namen — Document und UnsignedContentAbsorber existieren an zwei Stellen mit zwei unterschiedlichen Implementierungen, was genau die Art von Problem ist, die leicht beim Importieren nur nach Namen falsch gemacht werden kann.

Aspose.PDF FOSS für Python ist ein Python-Paket, aspose-pdf-foss-for-python, veröffentlicht unter der MIT-Lizenz, das Python 3.11 oder höher erfordert. Sein Top-Level-Modulname ist aspose_pdf; siehe den Abschnitt Schnellstart unten für die Installation. Das Kernpaket hängt nur von cryptography und asn1crypto ab; optionale Extras fügen Pillow-basierte Bilddekodierung, Brotli-basierte WOFF2-Schriftunterstützung und HarfBuzz-basierte komplexe Textlayout-Funktionen hinzu.


Wichtige Funktionen

Eine zweite Dokumentenimplementierung

aspose_pdf.generated.document.Document implementiert denselben Kernlebenszyklus wie das Haupt-aspose_pdf.Documentload_from(), save(), encrypt()/decrypt()/change_passwords(), optimize()/optimize_resources(), repair(), flatten() und validate()/check() — auf Basis derselben aspose_pdf.engine.simple_pdf.SimplePdf-Engine. Es spiegelt einen Teil des Haupt-Document wider: Es gibt keine pages.add()-artige Seitenerstellung, keine form/outlines/attachments und kein render_page(). Da der Klassenname mit dem des Hauptpakets Document kollidiert, sollte er bei gleichzeitigem Bedarf in demselben Modul unter einem Alias importiert werden.

from aspose_pdf import Document
from aspose_pdf.generated.document import Document as CompatDocument

with Document() as document:
    document.pages.add()
    document.save("source.pdf")

compat = CompatDocument()
compat.load_from("source.pdf")
print(compat.page_count, compat.is_encrypted)

compat.optimize(compress_images=True)
compat.save("optimized.pdf", overwrite=True)
compat.dispose()

Verpacken von unsigniertem Inhalt

aspose_pdf.generated.forms.UnsignedContentAbsorber und UnsignedContent stellen einen Container für unsignierte Formularfelder, Seiten und Anmerkungen bereit. Das unterscheidet sich vom obersten aspose_pdf.UnsignedContentAbsorber(document), das ein echtes Document nimmt und dessen form_fields/annotations nach Elementen filtert, deren is_signed/signed-Attribut falsy ist. Die generated.forms-Version benötigt überhaupt kein Dokument — extract() verpackt einfach alles, was Sie als Schlüsselwortargumente pages, form_fields und annotations übergeben, in einer UnsignedContent-Instanz, was nützlich ist, wenn die unsignierten Elemente bereits an anderer Stelle gesammelt wurden und nur noch den gemeinsamen Container und seine add_page()/remove_page()-artigen Mutatoren benötigen.

from aspose_pdf.generated.forms import UnsignedContentAbsorber

absorber = UnsignedContentAbsorber()
content = absorber.extract(
    form_fields=["signature_field", "initials_field"],
    annotations=["review_stamp"],
)
print(absorber.has_extracted(), content.form_fields, content.annotations)

content.add_page("page-1")
absorber.reset()
print(absorber.get_extracted())

PDF/A Validierungsoptionen und Ergebnisse

aspose_pdf.generated.pdfa.PdfAValidateOptions sammelt Validierungseinstellungen und Eingabequellen; PdfAValidationResult sammelt das Ergebnis. PdfAValidateOptions.add_input() prüft einen Zeichenkettenpfad mit Path.exists(), bevor er ihn akzeptiert, und löst PdfIOException aus, falls die Datei fehlt, sodass ein Aufrufer sofort über einen falschen Eingabepfad informiert wird, anstatt erst zur Validierungszeit.

from aspose_pdf import Document
from aspose_pdf.exceptions import PdfIOException
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

with Document() as document:
    document.pages.add()
    document.save("candidate.pdf")

options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")
print(options.get_options(), options.inputs)

try:
    options.add_input("missing.pdf")
except PdfIOException as error:
    print(f"rejected: {error}")

result = PdfAValidationResult()
result.add_error("Missing /OutputIntent for PDF/A-2b")
print(result.is_valid, result.to_dict())

Re-exportierte Sicherheits- und Validierungstypen

aspose_pdf.generated.security importiert CompromiseCheckResult und SignaturesCompromiseDetector direkt aus aspose_pdf.security und CertificationLevel, RevocationStatus, TrustStatus, ValidationMethod, ValidationMode, ValidationOptions, ValidationResult und ValidationStatus aus aspose_pdf.validation. Im Gegensatz zu Document und UnsignedContentAbsorber gibt es hier keine unabhängige Neuimplementierung — beide Importpfade liefern dasselbe Objekt.

from aspose_pdf.generated.security import SignaturesCompromiseDetector
from aspose_pdf.security import SignaturesCompromiseDetector as CanonicalDetector

assert SignaturesCompromiseDetector is CanonicalDetector

detector = SignaturesCompromiseDetector(document=None)
result = detector.check()
print(result.compromised, result.reasons)

Schnellstart

Installieren Sie das Paket, erstellen Sie dann ein Dokument mit dem Haupt-Document, speichern Sie es und führen Sie es über die generated.pdfa-Optionen und Ergebnisobjekte.

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
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

with Document() as document:
    page = document.pages.add()
    page.add_text("PDF/A candidate", x=72, y=740, font_size=20)
    document.save("candidate.pdf")

options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")

result = PdfAValidationResult()
if not options.inputs:
    result.add_error("No inputs registered")

print(result.to_dict())

Unterstützte Formate

FormatErweiterungLesenSchreiben
PDFpdfJaJa

PDF-Lesen und -Schreiben ist Aspose.PDF FOSS für die Kernfunktion von Python. Jede Klasse in diesem Leitfaden — das Haupt-Document, das generated.document.Document-Spiegelbild und die PDF/A-Hilfsprogramme — arbeitet mit PDF-Ein- und -Ausgabe über die gemeinsam genutzte SimplePdf-Engine; aspose_pdf.generated ändert, welche Klasse Sie importieren, nicht welches Dateiformat verarbeitet wird.


Open Source & Lizenzierung

Aspose.PDF FOSS für Python wird unter der MIT-Lizenz veröffentlicht: keine Nutzungsbeschränkungen, keine Laufzeitgebühren und keine Registrierungsanforderungen für kommerzielle oder private Nutzung. Der Quellcode ist gehostet unter github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, und das Paket wird auf PyPI als aspose-pdf-foss-for-python veröffentlicht.


Erste Schritte

Verwandte Ressourcen