Úvod

Aspose.PDF FOSS pro Python zahrnuje podbalíček aspose_pdf.generated se čtyřmi moduly: document.py, forms.py, pdfa.py a security.py. Žádný z nich není znovu exportován z balíčku nejvyšší úrovně aspose_pdf, takže každá třída v tomto průvodci je importována pomocí jejího plného tečkového názvu — from aspose_pdf.generated.document import Document, ne from aspose_pdf import Document.

Čtyři moduly používají dva různé přístupy. generated.document, generated.forms a generated.pdfa každý definují své vlastní třídy: nezávislé implementace, které odrážejí strukturu hlavního balíčku Document, UnsignedContent/UnsignedContentAbsorber a PdfAValidateOptions/PdfAValidationResult — užitečné pro kód psaný proti tomuto zrcadlenému rozložení jmenného prostoru, ale jde o skutečnou, samostatnou sadu tříd, nikoli aliasy. generated.security naopak neprovádí žádnou přeimplementaci: importuje CompromiseCheckResult, SignaturesCompromiseDetector a validační výčty přímo z aspose_pdf.security a aspose_pdf.validation a znovu je exportuje, takže oba importní cesty odkazují na identický objekt třídy.

Tento průvodce pokrývá všechny čtyři a jasně uvádí, kde se třída generated chová odlišně od svého protějšku v hlavním balíčku se stejným názvem — Document a UnsignedContentAbsorber existují na dvou místech se dvěma různými implementacemi, což je přesně ten typ situace, která se snadno špatně pochopí při importu pouze podle názvu.

Aspose.PDF FOSS pro Python je Python balíček, aspose-pdf-foss-for-python, vydaný pod licencí MIT, vyžadující Python 3.11 nebo novější. Název jeho modulu nejvyšší úrovně je aspose_pdf; viz sekce Rychlý start níže pro instalaci. Jádrový balíček závisí pouze na cryptography a asn1crypto; volitelné doplňky přidávají dekódování obrázků založené na Pillow, podporu fontů WOFF2 založenou na Brotli a komplexní rozvržení textu založené na HarfBuzz.


Klíčové vlastnosti

Implementace druhého dokumentu

aspose_pdf.generated.document.Document implementuje stejný základní životní cyklus jako hlavní aspose_pdf.Documentload_from(), save(), encrypt()/decrypt()/change_passwords(), optimize()/optimize_resources(), repair(), flatten() a validate()/check() — na stejném aspose_pdf.engine.simple_pdf.SimplePdf enginu. Zrcadlí podmnožinu hlavního Document: nemá žádné pages.add()-stylové vytváření stránek, žádné form/outlines/attachments a žádné render_page(). Protože se název třídy střetává s Document hlavního balíčku, importujte jej pod aliasem, pokud jsou oba potřeba ve stejném modulu.

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()

Balíčkování Nepodepsaného Obsahu

aspose_pdf.generated.forms.UnsignedContentAbsorber a UnsignedContent poskytují kontejner pro nepodepsaná pole formuláře, stránky a anotace. To se liší od vrchní úrovně aspose_pdf.UnsignedContentAbsorber(document), která přijímá skutečný Document a filtruje jeho form_fields/annotations na položky, jejichž atribut is_signed/signed je nepravdivý. Verze generated.forms nevyžaduje žádný dokument — extract() jednoduše zabalí cokoli pages, form_fields a annotations, co jí předáte jako pojmenované argumenty, do instance UnsignedContent, což je užitečné, když byly nepodepsané položky již shromážděny jinde a potřebují jen sdílený kontejner a jeho add_page()/remove_page()-stylové mutátory.

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 Možnosti validace a výsledky

aspose_pdf.generated.pdfa.PdfAValidateOptions shromažďuje nastavení validace a vstupní zdroje; PdfAValidationResult shromažďuje výsledek. PdfAValidateOptions.add_input() ověří řetězcovou cestu pomocí Path.exists() před jejím přijetím a vyvolá PdfIOException, pokud soubor chybí, takže volající zjistí špatnou vstupní cestu okamžitě, místo až při validaci.

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())

Znovu exportované typy zabezpečení a validace

aspose_pdf.generated.security importuje CompromiseCheckResult a SignaturesCompromiseDetector přímo z aspose_pdf.security a CertificationLevel, RevocationStatus, TrustStatus, ValidationMethod, ValidationMode, ValidationOptions, ValidationResult a ValidationStatus z aspose_pdf.validation. Na rozdíl od Document a UnsignedContentAbsorber zde neexistuje samostatná reimplementace – oba importní cesty vrací stejný 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)

Rychlý start

Nainstalujte balíček, poté vytvořte dokument s hlavním Document, uložte jej a spusťte jej přes generated.pdfa možnosti a objekty výsledků.

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())

Podporované formáty

FormátRozšířeníČístZapsat
PDFpdfAnoAno

Čtení a zápis PDF je Aspose.PDF FOSS pro jádro funkce Python. Každá třída v tomto průvodci — hlavní Document, zrcadlo generated.document.Document a pomocné PDF/A — pracuje s PDF vstupem a výstupem prostřednictvím sdíleného motoru SimplePdf; aspose_pdf.generated mění, kterou třídu importujete, nikoli jaký souborový formát se zpracovává.


Open Source & licencování

Aspose.PDF FOSS pro Python je vydáno pod licencí MIT: žádná omezení používání, žádné poplatky za běh a žádné požadavky na registraci pro komerční nebo osobní použití. Zdrojový kód je hostován na github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python a balíček je publikován na PyPI jako aspose-pdf-foss-for-python.


Začínáme

Související zdroje