Hur man skapar dokument med den genererade kompatibilitetsmodulen i Python

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

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

Se även

 Svenska