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, PdfAValidationResultStap 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.