Cum să creați documente cu modulul de compatibilitate generat în Python

Cum să creați documente cu modulul de compatibilitate generat în Python

Aspose.PDF FOSS pentru Python livrează un subpachet de compatibilitate generated (aspose_pdf.generated) care reflectă un subset stabil al suprafeței principale API — o clasă Document cu operațiunile de bază ale ciclului de viață, plus UnsignedContent/UnsignedContentAbsorber și PdfAValidateOptions/PdfAValidationResult. Există pentru apelanții care doresc această suprafață mai restrânsă explicit, în loc de clasele de nivel superior cu funcționalități complete, iar clasele sale nu sunt importate automat de import aspose_pdf — le importați direct din aspose_pdf.generated.*. Pachetul este pur Python și este instalat cu comanda de mai jos.

Ghid pas cu pas

Pasul 1: Instalați pachetul

Instalați pachetul FOSS 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 .

Verificați instalarea importând Document generat și afișând un mesaj de confirmare:

import aspose_pdf
from aspose_pdf.generated.document import Document
print("aspose-pdf-foss-for-python is ready.")

Pasul 2: Importă clasele necesare

Clasele de compatibilitate generated se află în aspose_pdf.generated.document, aspose_pdf.generated.forms și aspose_pdf.generated.pdfa — importă-le explicit prin submodul:

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

Pasul 3: Crează și încarcă un document

Document(source) se încarcă imediat când este furnizată o sursă; apelarea lui Document() fără argument creează o instanță goală pe care o poți încărca ulterior cu load_from. Ambele acceptă o cale de fișier, bytes, sau un flux binar:

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

Pasul 7: Extrage conținutul formularului nesemnat

UnsignedContentAbsorber extrage paginile, câmpurile de formular și adnotările care nu fac parte dintr-o semnătură digitală. Apelează extract() pentru a rula extragerea, has_extracted() pentru a verifica dacă a fost rulat și get_extracted() pentru a recupera rezultatul din nou fără a reextrage:

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

Pasul 8: Construiește manual un container UnsignedContent

UnsignedContent este, de asemenea, un container simplu pe care îl poți popula manual cu add_page, add_form_field și add_annotation — fiecare are o metodă remove_* corespunzătoare, iar reset() curăță toate cele trei colecții simultan:

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

Pasul 9: Configurați și rulați validarea PDF/A

PdfAValidateOptions colectează intrările și setările pentru o rulare de validare. add_input(source) înregistrează o intrare, set_option(key, value) stochează o opțiune numită și get_options() returnează o copie a opțiunilor stocate. PdfAValidationResult deține rezultatul — add_error(message) marchează rezultatul ca invalid și adaugă la errors, iar to_dict() redă is_valid și errors ca un dicționar simplu:

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

Probleme comune și remedieri

ImportError or AttributeError la accesare aspose_pdf.generated

Subpachetul generated nu este reexportat de import aspose_pdf — importați fiecare clasă din submodulul său specific, de exemplu from aspose_pdf.generated.document import Document, în loc să așteptați ca aspose_pdf.generated.Document să funcționeze după un simplu import aspose_pdf.

Confundarea generată Document cu principalul aspose_pdf.Document

aspose_pdf.Document (clasa de nivel superior reexportată de import aspose_pdf) are o suprafață mai largă — adaugă metode precum validate_pdfa, iter_pages și redact_text pe care aspose_pdf.generated.document.Document nu le implementează. Dacă o metodă lipsește în Document generat, verificați dacă aparține în schimb clasei de nivel superior Document.

save() raises AsposePdfException: Cannot save a disposed document

close()/dispose() eliberează permanent starea internă a documentului — un Document eliminat nu poate fi salvat, optimizat sau reparat ulterior. Executați toate operațiile rămase înainte de a apela close(), sau reîncărcați din sursă cu un apel proaspăt de Document(...).

change_passwords raises PdfSecurityException: Document is not encrypted

change_passwords rotește parola doar pe un document care este deja criptat. Apelați mai întâi encrypt(password), sau verificați document.is_encrypted înainte de a încerca să schimbați parola.

PdfAValidationResult.add_error raises TypeError

add_error necesită un argument str. Convertiți obiectele de excepție sau alte detalii de eroare într-un șir (str(error)) înainte de a le transmite către add_error.

Întrebări frecvente

De ce există aspose_pdf.generated alături de aspose_pdf.Document principal?

Reflectă un subset mai restrâns și stabil al Aspose.PDF API pentru codul scris împotriva acelei suprafețe reduse. Codul nou care nu are nevoie în mod specific de acest subset de compatibilitate ar trebui, în general, să folosească aspose_pdf.Document de nivel superior, care suportă mai multe operații (PDF/A conversie, iterare pe pagini, redactare de text și altele).

Acceptă UnsignedContentAbsorber.extract() un Document pentru scanare?

extract() acceptă argumente poziționale și cu cuvinte cheie care sunt folosite pentru a popula colecțiile pages, form_fields și annotations ale UnsignedContent returnat — transmite colecțiile pe care le dorești reprezentate ca argumente cu cuvinte cheie (pages=, form_fields=, annotations=).

Ce se întâmplă dacă apelez reset() pe UnsignedContentAbsorber înainte de a extrage ceva?

Șterge orice rezultat extras anterior. get_extracted() returnează apoi None, iar has_extracted() returnează False până când extract() este apelat din nou.

Poate PdfAValidateOptions.add_input să fie apelat de mai multe ori?

Da — fiecare apel adaugă o altă intrare în lista inputs și returnează self, astfel încât apelurile pot fi înlănțuite: options.add_input("a.pdf").add_input("b.pdf").

Este close() diferit de dispose() pe Document generat?

Nu — close() este un alias direct care apelează dispose() cu aceleași argumente; oricare dintre nume eliberează resursele documentului.

Vezi și:

 Română