Hoe Documenten te Maken met de Gegenereerde Compatibiliteitsmodule in Python

Hoe Documenten te Maken met de Gegenereerde Compatibiliteitsmodule in Python

Aspose.PDF FOSS voor Python levert een generated compatibiliteitssubpakket (aspose_pdf.generated) dat een stabiele subset van het hoofd-API oppervlak weerspiegelt — een Document klasse met de kernlevenscyclusbewerkingen, plus UnsignedContent/UnsignedContentAbsorber en PdfAValidateOptions/PdfAValidationResult. Het bestaat voor aanroepers die dit beperktere oppervlak expliciet willen in plaats van de volledig uitgeruste top-level klassen, en de klassen worden niet automatisch geïmporteerd door import aspose_pdf — je importeert ze rechtstreeks vanuit aspose_pdf.generated.*. Het pakket is pure Python en wordt geïnstalleerd met het onderstaande commando.

Stapsgewijze Handleiding

Stap 1: Installeer het Pakket

Installeer het Aspose.PDF FOSS-pakket:

git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .

Verifieer de installatie door de gegenereerde Document te importeren en een bevestigingsbericht af te drukken:

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

Stap 2: Vereiste klassen importeren

De generated compatibiliteitsklassen bevinden zich in aspose_pdf.generated.document, aspose_pdf.generated.forms en aspose_pdf.generated.pdfa — importeer ze expliciet per submodule:

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

Stap 3: Een document maken en laden

Document(source) laadt onmiddellijk wanneer een bron wordt opgegeven; het aanroepen van Document() zonder argument maakt een lege instantie die later kan worden geladen met load_from. Beide accepteren een bestandspad, bytes, of een binaire stream:

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

Stap 7: Niet-ondertekende formulierinhoud extraheren

UnsignedContentAbsorber extraheert de pagina’s, formuliervelden en annotaties die geen deel uitmaken van een digitale handtekening. Roep extract() aan om de extractie uit te voeren, has_extracted() om te controleren of deze heeft plaatsgevonden, en get_extracted() om het resultaat opnieuw op te halen zonder opnieuw te extraheren:

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

Stap 8: Een UnsignedContent container handmatig bouwen

UnsignedContent is ook een eenvoudige container die je zelf kunt vullen met add_page, add_form_field en add_annotation — elk heeft een bijbehorende remove_* methode, en reset() wist alle drie de collecties in één keer:

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

Stap 9: Configureren en uitvoeren van PDF/A validatie

PdfAValidateOptions verzamelt de invoer en instellingen voor een validatierun. add_input(source) registreert een invoer, set_option(key, value) slaat een benoemde optie op, en get_options() retourneert een kopie van de opgeslagen opties. PdfAValidationResult bevat het resultaat — add_error(message) markeert het resultaat als ongeldig en voegt toe aan errors, en to_dict() rendert is_valid en errors als een eenvoudige dictionary:

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

Veelvoorkomende problemen en oplossingen

ImportError or AttributeError bij het openen aspose_pdf.generated

Het generated subpakket wordt niet opnieuw geëxporteerd door import aspose_pdf — importeer elke klasse vanuit zijn specifieke submodule, bijvoorbeeld from aspose_pdf.generated.document import Document, in plaats van te verwachten dat aspose_pdf.generated.Document werkt na een eenvoudige import aspose_pdf.

Verwarring rond de gegenereerde Document met de hoofd aspose_pdf.Document

aspose_pdf.Document (de top-level klasse die opnieuw wordt geëxporteerd door import aspose_pdf) heeft een grotere oppervlakte — hij voegt methoden toe zoals validate_pdfa, iter_pages en redact_text die aspose_pdf.generated.document.Document niet implementeert. Als een methode ontbreekt in de gegenereerde Document, controleer dan of deze in plaats daarvan tot de top-level Document klasse behoort.

save() raises AsposePdfException: Cannot save a disposed document

close()/dispose() maakt de interne staat van het document permanent vrij — een weggegooide Document kan daarna niet meer worden opgeslagen, geoptimaliseerd of gerepareerd. Voer alle resterende bewerkingen uit voordat je close() aanroept, of laad opnieuw vanaf de bron met een verse Document(...)-aanroep.

change_passwords raises PdfSecurityException: Document is not encrypted

change_passwords roteert alleen een wachtwoord op een document dat al versleuteld is. Roep eerst encrypt(password) aan, of controleer document.is_encrypted voordat je probeert het wachtwoord te wijzigen.

PdfAValidationResult.add_error raises TypeError

add_error vereist een str-argument. Converteer exceptie-objecten of andere foutdetails naar een string (str(error)) voordat je ze doorgeeft aan add_error.

Veelgestelde vragen

Waarom bestaat aspose_pdf.generated naast de hoofd-aspose_pdf.Document?

Het spiegelt een smaller, stabiel deel van de Aspose.PDF API voor code die tegen dat gereduceerde oppervlak is geschreven. Nieuwe code die deze compatibiliteitssubset niet specifiek nodig heeft, moet over het algemeen de top-level aspose_pdf.Document gebruiken, die meer bewerkingen ondersteunt (PDF/A conversie, paginatie, tekstredactie en andere).

Accepteert UnsignedContentAbsorber.extract() een Document om te scannen?

extract() accepteert positionele en sleutelwoord-argumenten die worden gebruikt om de geretourneerde UnsignedContent’s pages, form_fields en annotations collecties te vullen — geef de collecties die je wilt weergeven als sleutelwoord-argumenten (pages=, form_fields=, annotations=).

Wat gebeurt er als ik reset() aanroep op UnsignedContentAbsorber voordat er iets wordt geëxtraheerd?

Het wist elk eerder geëxtraheerd resultaat. get_extracted() retourneert vervolgens None en has_extracted() retourneert False totdat extract() opnieuw wordt aangeroepen.

Kan PdfAValidateOptions.add_input meer dan één keer worden aangeroepen?

Ja — elke aanroep voegt een nieuw item toe aan de inputs-lijst, en het retourneert self, zodat aanroepen kunnen worden gekoppeld: options.add_input("a.pdf").add_input("b.pdf").

Is close() anders dan dispose() op de gegenereerde Document?

Nee — close() is een directe alias die dispose() aanroept met dezelfde argumenten; beide namen geven de bronnen van het document vrij.

Zie ook

 Nederlands