Introduction
Aspose.PDF FOSS pour Python comprend un sous-package aspose_pdf.generated avec quatre modules : document.py, forms.py, pdfa.py et security.py. Aucun d’entre eux n’est réexporté depuis le package de niveau supérieur aspose_pdf, de sorte que chaque classe de ce guide est importée via son chemin complet à points — from aspose_pdf.generated.document import Document, et non from aspose_pdf import Document.
Les quatre modules adoptent deux approches différentes. generated.document, generated.forms et generated.pdfa définissent chacun leurs propres classes: des implémentations indépendantes qui reproduisent la structure du Document du package principal, UnsignedContent/UnsignedContentAbsorber et PdfAValidateOptions/PdfAValidationResult — utiles pour du code écrit contre cette disposition d’espace de noms miroir, mais il s’agit d’un vrai ensemble de classes distinctes plutôt que d’alias. generated.security, en revanche, ne réalise aucune réimplémentation: il importe CompromiseCheckResult, SignaturesCompromiseDetector et les énumérations de validation directement depuis aspose_pdf.security et aspose_pdf.validation et les réexporte, de sorte que les deux chemins d’importation aboutissent au même objet classe.
Ce guide couvre les quatre modules et précise où une classe generated se comporte différemment de son homologue du package principal portant le même nom — Document et UnsignedContentAbsorber existent tous deux en deux endroits avec deux implémentations différentes, ce qui est exactement le type de situation facile à mal interpréter lorsqu’on importe uniquement par le nom.
Aspose.PDF FOSS pour Python est un package Python, aspose-pdf-foss-for-python, publié sous licence MIT, nécessitant Python3.11 ou supérieur. Son nom de module de niveau supérieur est aspose_pdf; consultez la section Démarrage rapide ci-dessous pour l’installation. Le package de base ne dépend que de cryptography et asn1crypto; les extras optionnels ajoutent le décodage d’images basé sur Pillow, la prise en charge des polices WOFF2 basée sur Brotli, et la mise en forme de texte complexe basée sur HarfBuzz.
Fonctionnalités clés
Implémentation d’un second document
aspose_pdf.generated.document.Document implémente le même cycle de vie de base que le principal aspose_pdf.Document — load_from(), save(), encrypt()/decrypt()/change_passwords(), optimize()/optimize_resources(), repair(), flatten(), et validate()/check() — sur le même moteur aspose_pdf.engine.simple_pdf.SimplePdf. Il reflète un sous-ensemble du principal Document: il n’a pas de création de pages de style pages.add(), pas de form/outlines/attachments, et pas de render_page(). Parce que le nom de classe entre en conflit avec le Document du paquet principal, importez-le sous un alias lorsque les deux sont nécessaires dans le même module.
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()
Packaging du contenu non signé
aspose_pdf.generated.forms.UnsignedContentAbsorber et UnsignedContent fournissent un conteneur pour les champs de formulaire non signés, les pages et les annotations. C’est différent du aspose_pdf.UnsignedContentAbsorber(document) de niveau supérieur, qui prend un vrai Document et filtre ses form_fields/annotations pour les éléments dont l’attribut is_signed/signed est faux. La version generated.forms ne prend aucun document— extract() se contente d’empaqueter tout pages, form_fields et annotations que vous lui passez en arguments nommés dans une instance UnsignedContent, ce qui est utile lorsque les éléments non signés ont déjà été collectés ailleurs et ont seulement besoin du conteneur partagé et de ses mutateurs de style 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())
PDF/A Options de validation et résultats
aspose_pdf.generated.pdfa.PdfAValidateOptions recueille les paramètres de validation et les sources d’entrée; PdfAValidationResult recueille le résultat. PdfAValidateOptions.add_input() vérifie un chemin sous forme de chaîne avec Path.exists() avant de l’accepter et déclenche PdfIOException si le fichier est absent, de sorte que l’appelant découvre immédiatement un chemin d’entrée incorrect plutôt qu’au moment de la validation.
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())
Types de sécurité et de validation réexportés
aspose_pdf.generated.security importe CompromiseCheckResult et SignaturesCompromiseDetector directement depuis aspose_pdf.security, ainsi que CertificationLevel, RevocationStatus, TrustStatus, ValidationMethod, ValidationMode, ValidationOptions, ValidationResult et ValidationStatus depuis aspose_pdf.validation. Contrairement à Document et UnsignedContentAbsorber, il n’y a aucune réimplémentation indépendante ici— les deux chemins d’importation renvoient le même objet.
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)
Démarrage rapide
Installez le paquet, puis créez un document avec le Document principal, enregistrez-le et exécutez-le avec les options generated.pdfa et les objets de résultat.
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())
Formats pris en charge
| Format | Extension | Lire | Écrire |
|---|---|---|---|
| Oui | Oui |
La lecture et l’écriture de PDF sont Aspose.PDF FOSS pour la fonction principale de Python. Chaque classe de ce guide — le Document principal, le miroir generated.document.Document, et les aides PDF/A — fonctionne sur les entrées et sorties PDF via le moteur partagé SimplePdf ; aspose_pdf.generated modifie la classe que vous importez, pas le format de fichier traité.
Open Source et licence
Aspose.PDF FOSS pour Python est publié sous licence MIT: aucune restriction d’utilisation, aucun frais d’exécution, et aucune exigence d’enregistrement pour une utilisation commerciale ou personnelle. Le code source est hébergé sur github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, et le paquet est publié sur PyPI sous le nom aspose-pdf-foss-for-python.