Jak vytvořit dokumenty s vygenerovaným kompatibilním modulem v Python
Aspose.PDF FOSS pro Python dodává podbalíček kompatibility generated (aspose_pdf.generated), který odráží stabilní podmnožinu hlavního rozhraní API — třídu Document s hlavními operacemi životního cyklu, plus UnsignedContent/UnsignedContentAbsorber a PdfAValidateOptions/PdfAValidationResult. Existuje pro volající, kteří chtějí tuto užší plochu explicitně místo plnohodnotných vrcholových tříd, a jeho třídy nejsou automaticky importovány import aspose_pdf — importujete je přímo z aspose_pdf.generated.*. Balíček je čistý Python a instalujete jej pomocí níže uvedeného příkazu.
Průvodce krok za krokem
Krok 1: Nainstalujte balíček
Nainstalujte FOSS balíček Aspose.PDF:
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .Ověřte instalaci importováním vygenerovaného Document a vytištěním potvrzovací zprávy:
import aspose_pdf
from aspose_pdf.generated.document import Document
print("aspose-pdf-foss-for-python is ready.")Krok 2: Importovat požadované třídy
Kompatibilní třídy generated se nacházejí v aspose_pdf.generated.document, aspose_pdf.generated.forms a aspose_pdf.generated.pdfa — importujte je explicitně podle podmodulu:
import aspose_pdf
from aspose_pdf.generated.document import Document
from aspose_pdf.generated.forms import UnsignedContent, UnsignedContentAbsorber
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResultKrok 3: Vytvořit a načíst dokument
Document(source) se načte okamžitě, když je zadán zdroj; volání Document() bez argumentu vytvoří prázdnou instanci, kterou můžete později načíst pomocí load_from. Oba přijímají cestu k souboru, bytes, nebo binární proud:
from aspose_pdf.generated.document import Document
document = Document("report.pdf")
print(f"Loaded {len(document.pages)} page(s)")
empty_doc = Document()
empty_doc.load_from("report.pdf")Krok 7: Extrahovat nepodepsaný obsah formuláře
UnsignedContentAbsorber extrahuje stránky, formulářová pole a anotace, které nejsou součástí digitálního podpisu. Zavolejte extract() pro spuštění extrakce, has_extracted() pro kontrolu, zda byla provedena, a get_extracted() pro opětovné získání výsledku bez opětovné extrakce:
from aspose_pdf.generated.forms import UnsignedContentAbsorber
absorber = UnsignedContentAbsorber()
unsigned = absorber.extract()
print(f"Unsigned pages: {len(unsigned.pages)}")
print(f"Unsigned form fields: {len(unsigned.form_fields)}")
if absorber.has_extracted():
same_result = absorber.get_extracted()Krok 8: Ručně vytvořit kontejner UnsignedContent
UnsignedContent je také jednoduchý kontejner, který můžete naplnit sami pomocí add_page, add_form_field a add_annotation — každý má odpovídající metodu remove_* a reset() vymaže všechny tři kolekce najednou:
from aspose_pdf.generated.forms import UnsignedContent
content = UnsignedContent()
content.add_page("page-1")
content.add_annotation("signature-placeholder")
print(content) # UnsignedContent(pages=1, form_fields=0, annotations=1)
content.remove_annotation("signature-placeholder")
content.reset()Krok 9: Nakonfigurujte a spusťte validaci PDF/A
PdfAValidateOptions sbírá vstupy a nastavení pro běh validace. add_input(source) registruje vstup, set_option(key, value) ukládá pojmenovanou volbu a get_options() vrací kopii uložených voleb. PdfAValidationResult obsahuje výsledek — add_error(message) označí výsledek jako neplatný a přidá do errors, a to_dict() vykreslí is_valid a errors jako prostý slovník:
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult
options = PdfAValidateOptions()
options.add_input("report.pdf")
options.set_option("pdfa_version", "1b")
print(options.get_options())
result = PdfAValidationResult()
result.add_error("Font 'Arial' is not embedded")
print(result.is_valid) # False
print(result.to_dict())Běžné problémy a opravy
ImportError or AttributeError při přístupu aspose_pdf.generated
Podbalíček generated není znovu exportován import aspose_pdf — importujte každou třídu z jejího konkrétního podmodulu, například from aspose_pdf.generated.document import Document, místo očekávání, že aspose_pdf.generated.Document bude fungovat po prostém import aspose_pdf.
Zaměňování vygenerovaného Document s hlavním aspose_pdf.Document
aspose_pdf.Document (třída nejvyšší úrovně znovu exportovaná import aspose_pdf) má větší rozhraní — přidává metody jako validate_pdfa, iter_pages a redact_text, které aspose_pdf.generated.document.Document neimplementuje. Pokud metoda chybí ve vygenerovaném Document, zkontrolujte, zda nepatří spíše do třídy nejvyšší úrovně Document.
save() raises AsposePdfException: Cannot save a disposed document
close()/dispose() uvolní interní stav dokumentu trvale — zlikvidovaný Document pak nelze uložit, optimalizovat ani opravit. Proveďte všechny zbývající operace před voláním close(), nebo načtěte znovu ze zdroje pomocí čerstvého volání Document(...).
change_passwords raises PdfSecurityException: Document is not encrypted
change_passwords pouze rotuje heslo u dokumentu, který je již zašifrován. Nejprve zavolejte encrypt(password) nebo zkontrolujte document.is_encrypted před pokusem o změnu hesla.
PdfAValidationResult.add_error raises TypeError
add_error vyžaduje argument str. Před předáním add_error převeďte objekty výjimek nebo jiné podrobnosti o chybě na řetězec (str(error)).
Často kladené otázky
Proč aspose_pdf.generated existuje vedle hlavního aspose_pdf.Document?
Zrcadlí užší, stabilní podmnožinu Aspose.PDF API pro kód psaný proti této zmenšené vrstvě. Nový kód, který tuto podmnožinu kompatibility výslovně nepotřebuje, by měl obecně používat vrcholovou aspose_pdf.Document, která podporuje více operací (PDF/A konverze, iterace stránek, redakce textu a další).
Přijímá UnsignedContentAbsorber.extract() Document ke skenování?
extract() přijímá poziční a pojmenované argumenty, které se použijí k naplnění vrácených kolekcí pages, form_fields a annotations objektu UnsignedContent — předávejte požadované kolekce jako pojmenované argumenty (pages=, form_fields=, annotations=).
Co se stane, když zavolám reset() na UnsignedContentAbsorber před jakýmkoli extrahováním?
Vymaže jakýkoli dříve extrahovaný výsledek. get_extracted() pak vrátí None a has_extracted() vrací False až do opětovného zavolání extract().
Lze PdfAValidateOptions.add_input zavolat více než jednou?
Ano — každé volání přidá další položku do seznamu inputs a vrátí self, takže volání lze řetězit: options.add_input("a.pdf").add_input("b.pdf").
Je close() odlišné od dispose() na vygenerovaném Document?
Ne — close() je přímý alias, který volá dispose() se stejnými argumenty; oba názvy uvolňují zdroje dokumentu.