Jak vytvořit dokumenty s vygenerovaným kompatibilním modulem v Python

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, PdfAValidationResult

Krok 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.

Viz také:

 Čeština