Introduzione
Aspose.PDF FOSS per Python include un sottopacchetto aspose_pdf.generated con quattro moduli: document.py, forms.py, pdfa.py e security.py. Nessuno di essi è riesportato dal pacchetto di livello superiore aspose_pdf, quindi ogni classe in questa guida è importata tramite il suo percorso puntato completo — from aspose_pdf.generated.document import Document, non from aspose_pdf import Document.
I quattro moduli adottano due approcci differenti. generated.document, generated.forms e generated.pdfa definiscono ciascuno le proprie classi: implementazioni indipendenti che rispecchiano la struttura del pacchetto principale Document, UnsignedContent/UnsignedContentAbsorber e PdfAValidateOptions/PdfAValidationResult — utili per il codice scritto contro quella struttura di namespace specchiata, ma costituiscono un vero e proprio insieme separato di classi anziché alias. generated.security, invece, non effettua alcuna reimplementazione: importa CompromiseCheckResult, SignaturesCompromiseDetector e gli enum di validazione direttamente da aspose_pdf.security e aspose_pdf.validation e li riesporta, così entrambi i percorsi di importazione puntano allo stesso oggetto classe.
Questa guida copre tutti e quattro i casi e specifica chiaramente dove una classe generated si comporta diversamente rispetto al suo omonimo nel pacchetto principale — Document e UnsignedContentAbsorber esistono entrambi in due luoghi con due implementazioni differenti, il che è esattamente il tipo di situazione che è facile sbagliare quando si importa solo per nome.
Aspose.PDF FOSS per Python è un pacchetto Python, aspose-pdf-foss-for-python, rilasciato sotto licenza MIT, che richiede Python 3.11 o successiva. Il nome del modulo di livello superiore è aspose_pdf; consulta la sezione Avvio rapido qui sotto per l’installazione. Il pacchetto core dipende solo da cryptography e asn1crypto; le opzioni aggiuntive includono decodifica di immagini basata su Pillow, supporto ai font WOFF2 basato su Brotli e layout di testo complesso basato su HarfBuzz.
Caratteristiche principali
Una seconda implementazione del documento
aspose_pdf.generated.document.Document implementa lo stesso ciclo di vita core del principale aspose_pdf.Document — load_from(), save(), encrypt()/decrypt()/change_passwords(), optimize()/optimize_resources(), repair(), flatten() e validate()/check() — basato sullo stesso motore aspose_pdf.engine.simple_pdf.SimplePdf. Riproduce un sottoinsieme del principale Document: non dispone di authoring di pagine in stile pages.add(), né di form/outlines/attachments, e né di render_page(). Poiché il nome della classe entra in conflitto con il Document del pacchetto principale, importalo con un alias quando entrambi sono necessari nello stesso modulo.
from aspose_pdf import Document
from aspose_pdf.generated.document import Document as CompatDocument
with Document() as document:
document.pages.add()
document.save("source.pdf")
compat = CompatDocument()
compat.load_from("source.pdf")
print(compat.page_count, compat.is_encrypted)
compat.optimize(compress_images=True)
compat.save("optimized.pdf", overwrite=True)
compat.dispose()
Imballaggio del contenuto non firmato
aspose_pdf.generated.forms.UnsignedContentAbsorber e UnsignedContent forniscono un contenitore per campi di modulo non firmati, pagine e annotazioni. Questo è diverso dal aspose_pdf.UnsignedContentAbsorber(document) di livello superiore, che accetta un vero Document e filtra i suoi form_fields/annotations per gli elementi il cui attributo is_signed/signed è falsy. La versione generated.forms non richiede alcun documento — extract() si limita a impacchettare qualsiasi pages, form_fields e annotations tu le passi come argomenti keyword in un’istanza UnsignedContent, utile quando gli elementi non firmati sono già stati raccolti altrove e hanno solo bisogno del contenitore condiviso e dei suoi mutatori in stile add_page()/remove_page().
from aspose_pdf.generated.forms import UnsignedContentAbsorber
absorber = UnsignedContentAbsorber()
content = absorber.extract(
form_fields=["signature_field", "initials_field"],
annotations=["review_stamp"],
)
print(absorber.has_extracted(), content.form_fields, content.annotations)
content.add_page("page-1")
absorber.reset()
print(absorber.get_extracted())
Opzioni di convalida e risultati di PDF/A
aspose_pdf.generated.pdfa.PdfAValidateOptions raccoglie le impostazioni di convalida e le fonti di input; PdfAValidationResult raccoglie il risultato. PdfAValidateOptions.add_input() verifica un percorso stringa con Path.exists() prima di accettarlo e solleva PdfIOException se il file è mancante, così il chiamante scopre subito un percorso di input errato invece che al momento della convalida.
from aspose_pdf import Document
from aspose_pdf.exceptions import PdfIOException
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult
with Document() as document:
document.pages.add()
document.save("candidate.pdf")
options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")
print(options.get_options(), options.inputs)
try:
options.add_input("missing.pdf")
except PdfIOException as error:
print(f"rejected: {error}")
result = PdfAValidationResult()
result.add_error("Missing /OutputIntent for PDF/A-2b")
print(result.is_valid, result.to_dict())
Tipi di sicurezza e convalida riesportati
aspose_pdf.generated.security importa CompromiseCheckResult e SignaturesCompromiseDetector direttamente da aspose_pdf.security, e CertificationLevel, RevocationStatus, TrustStatus, ValidationMethod, ValidationMode, ValidationOptions, ValidationResult e ValidationStatus da aspose_pdf.validation. A differenza di Document e UnsignedContentAbsorber, qui non c’è una reimplementazione indipendente — entrambi i percorsi di importazione restituiscono lo stesso oggetto.
from aspose_pdf.generated.security import SignaturesCompromiseDetector
from aspose_pdf.security import SignaturesCompromiseDetector as CanonicalDetector
assert SignaturesCompromiseDetector is CanonicalDetector
detector = SignaturesCompromiseDetector(document=None)
result = detector.check()
print(result.compromised, result.reasons)
Avvio rapido
Installa il pacchetto, quindi crea un documento con il principale Document, salvalo e passalo attraverso le opzioni generated.pdfa e gli oggetti risultato.
git clone https://github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python.git
cd Aspose-PDF-FOSS-for-Python
pip install -e .from aspose_pdf import Document
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult
with Document() as document:
page = document.pages.add()
page.add_text("PDF/A candidate", x=72, y=740, font_size=20)
document.save("candidate.pdf")
options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")
result = PdfAValidationResult()
if not options.inputs:
result.add_error("No inputs registered")
print(result.to_dict())
Formati supportati
| Formato | Estensione | Leggi | Scrivi |
|---|---|---|---|
| Sì | Sì |
La lettura e scrittura PDF è Aspose.PDF FOSS per la funzione principale di Python. Ogni classe in questa guida — il principale Document, lo specchio generated.document.Document, e gli helper PDF/A — opera su input e output PDF tramite il motore condiviso SimplePdf; aspose_pdf.generated cambia quale classe importi, non il formato di file che viene elaborato.
Open Source & Licenze
Aspose.PDF FOSS per Python è rilasciato sotto licenza MIT: nessuna restrizione d’uso, nessuna tariffa di runtime e nessun requisito di registrazione per uso commerciale o personale. Il codice sorgente è ospitato su github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, e il pacchetto è pubblicato su PyPI come aspose-pdf-foss-for-python.