Hur man skapar dokument med den genererade kompatibilitetsmodulen i Python
Aspose.PDF FOSS för Python levererar ett generated kompatibilitetssubpaket (aspose_pdf.generated) som speglar en stabil delmängd av huvud-API-ytan — en Document-klass med kärn-livscykeloperationer, plus UnsignedContent/UnsignedContentAbsorber och PdfAValidateOptions/PdfAValidationResult. Det finns för anropare som explicit vill ha denna snävare yta istället för de fullständiga top-nivåklasserna, och dess klasser importeras inte automatiskt av import aspose_pdf — du importerar dem direkt från aspose_pdf.generated.*. Paketet är rent Python och installeras med kommandot nedan.
Steg-för-steg guide
Steg 1: Installera paketet
Installera Aspose.PDF FOSS-paketet:
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .Verifiera installationen genom att importera den genererade Document och skriva ut ett bekräftelsemeddelande:
import aspose_pdf
from aspose_pdf.generated.document import Document
print("aspose-pdf-foss-for-python is ready.")Steg 2: Importera nödvändiga klasser
De generated kompatibilitetsklasserna finns i aspose_pdf.generated.document, aspose_pdf.generated.forms och aspose_pdf.generated.pdfa — importera dem explicit via delmodul:
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, PdfAValidationResultSteg 3: Skapa och ladda ett dokument
Document(source) laddas omedelbart när en källa anges; att anropa Document() utan argument skapar en tom instans som du kan ladda senare med load_from. Båda accepterar en filsökväg, bytes, eller en binär ström:
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")Steg 7: Extrahera osignerat formulärinnehåll
UnsignedContentAbsorber extraherar sidorna, formulärfälten och annotationerna som inte har varit en del av en digital signatur. Anropa extract() för att köra extraktionen, has_extracted() för att kontrollera om den har körts, och get_extracted() för att hämta resultatet igen utan att extrahera på nytt:
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()Steg 8: Bygg en UnsignedContent behållare manuellt
UnsignedContent är också en enkel behållare som du kan fylla själv med add_page, add_form_field och add_annotation — varje har en motsvarande remove_*-metod, och reset() rensar alla tre samlingar på en gång:
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()Steg 9: Konfigurera och kör PDF/A validering
PdfAValidateOptions samlar in indata och inställningar för en valideringskörning. add_input(source) registrerar en indata, set_option(key, value) lagrar ett namngivet alternativ, och get_options() returnerar en kopia av de lagrade alternativen. PdfAValidationResult innehåller resultatet — add_error(message) markerar resultatet som ogiltigt och lägger till errors, och to_dict() renderar is_valid och errors som en enkel 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())Vanliga problem och lösningar
ImportError or AttributeError vid åtkomst aspose_pdf.generated
Det generated delpaketet exporteras inte om igen av import aspose_pdf — importera varje klass från dess specifika delmodul, till exempel from aspose_pdf.generated.document import Document, snarare än att förvänta sig att aspose_pdf.generated.Document ska fungera efter en enkel import aspose_pdf.
Förvirrande den genererade Document med huvud aspose_pdf.Document
aspose_pdf.Document (den översta klassen som exporteras om av import aspose_pdf) har ett större gränssnitt — den lägger till metoder som validate_pdfa, iter_pages och redact_text som aspose_pdf.generated.document.Document inte implementerar. Om en metod saknas i den genererade Document, kontrollera om den istället tillhör den översta Document klassen.
save() raises AsposePdfException: Cannot save a disposed document
close()/dispose() frigör dokumentets interna tillstånd permanent — en kassad Document kan inte sparas, optimeras eller repareras efteråt. Utför alla återstående operationer innan du anropar close(), eller ladda om från källan med ett nytt Document(...)-anrop.
change_passwords raises PdfSecurityException: Document is not encrypted
change_passwords roterar endast ett lösenord på ett dokument som redan är krypterat. Anropa encrypt(password) först, eller kontrollera document.is_encrypted innan du försöker ändra lösenordet.
PdfAValidationResult.add_error raises TypeError
add_error kräver ett str-argument. Konvertera undantagsobjekt eller andra feluppgifter till en sträng (str(error)) innan du skickar dem till add_error.
Vanliga frågor
Varför finns aspose_pdf.generated bredvid huvud-aspose_pdf.Document?
Den återspeglar en smalare, stabil delmängd av Aspose.PDF API för kod skriven mot den reducerade ytan. Ny kod som inte specifikt behöver denna kompatibilitetsdelmängd bör generellt använda top-nivå aspose_pdf.Document, som stödjer fler operationer (PDF/A konvertering, siditeration, textredigering och andra).
Accepterar UnsignedContentAbsorber.extract() en Document för att skanna?
extract() accepterar positions- och nyckelordsargument som används för att fylla de returnerade UnsignedContents pages, form_fields och annotations samlingar — skicka de samlingar du vill ha representerade som nyckelordsargument (pages=, form_fields=, annotations=).
Vad händer om jag anropar reset() på UnsignedContentAbsorber innan jag extraherar något?
Den rensar alla tidigare extraherade resultat. get_extracted() returnerar sedan None och has_extracted() returnerar False tills extract() anropas igen.
Kan PdfAValidateOptions.add_input anropas mer än en gång?
Ja — varje anrop lägger till en ny post i inputs-listan och returnerar self, så anrop kan kedjas: options.add_input("a.pdf").add_input("b.pdf").
Är close() annorlunda än dispose() på den genererade Document?
Nej — close() är ett direkt alias som anropar dispose() med samma argument; båda namnen frigör dokumentets resurser.