Introducción

Aspose.PDF FOSS para Python incluye un subpaquete aspose_pdf.generated con cuatro módulos: document.py, forms.py, pdfa.py y security.py. Ninguno de ellos se reexporta desde el paquete de nivel superior aspose_pdf, por lo que cada clase en esta guía se importa mediante su ruta completa con puntos — from aspose_pdf.generated.document import Document, no from aspose_pdf import Document.

Los cuatro módulos adoptan dos enfoques diferentes. generated.document, generated.forms y generated.pdfa definen cada uno sus propias clases: implementaciones independientes que replican la estructura del paquete principal Document, UnsignedContent/UnsignedContentAbsorber y PdfAValidateOptions/PdfAValidationResult — útil para código escrito contra ese esquema de espacio de nombres reflejado, pero constituye un conjunto real y separado de clases en lugar de alias. Por otro lado, generated.security no realiza ninguna reimplementación: importa CompromiseCheckResult, SignaturesCompromiseDetector y los enums de validación directamente de aspose_pdf.security y aspose_pdf.validation y los reexporta, de modo que ambas rutas de importación resuelven al mismo objeto de clase.

Esta guía cubre los cuatro y es explícita acerca de dónde una clase generated se comporta de manera diferente a su contraparte del paquete principal con el mismo nombre — Document y UnsignedContentAbsorber existen en dos lugares con dos implementaciones distintas, lo cual es precisamente el tipo de situación que es fácil equivocarse al importar solo por nombre.

Aspose.PDF FOSS para Python es un paquete Python, aspose-pdf-foss-for-python, lanzado bajo la licencia MIT, que requiere Python 3.11 o superior. Su nombre de módulo de nivel superior es aspose_pdf; consulte la sección de Inicio rápido a continuación para la instalación. El paquete central depende solo de cryptography y asn1crypto; los extras opcionales añaden decodificación de imágenes basada en Pillow, soporte de fuentes WOFF2 basado en Brotli y maquetación de texto complejo basada en HarfBuzz.


Características clave

Una segunda implementación de documento

aspose_pdf.generated.document.Document implementa el mismo ciclo de vida central que el principal aspose_pdf.Document — load_from(), save(), encrypt()/decrypt()/change_passwords(), optimize()/optimize_resources(), repair(), flatten(), y validate()/check() — sobre el mismo motor aspose_pdf.engine.simple_pdf.SimplePdf. Refleja un subconjunto del principal Document: no tiene autoría de páginas al estilo pages.add(), no incluye form/outlines/attachments, y no tiene render_page(). Como el nombre de la clase colisiona con el Document del paquete principal, impórtela bajo un alias cuando ambos se necesiten en el mismo módulo.

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()

Empaquetado de contenido sin firmar

aspose_pdf.generated.forms.UnsignedContentAbsorber y UnsignedContent proporcionan un contenedor para campos de formulario, páginas y anotaciones sin firmar. Esto difiere del aspose_pdf.UnsignedContentAbsorber(document) de nivel superior, que toma un Document real y filtra sus form_fields/annotations para los elementos cuyo atributo is_signed/signed es falso. La versión generated.forms no recibe ningún documento — extract() simplemente empaqueta lo que sea pages, form_fields y annotations que le pases como argumentos con nombre en una instancia de UnsignedContent, lo cual es útil cuando los elementos sin firmar ya fueron recopilados en otro lugar y solo necesitan el contenedor compartido y sus mutadores al estilo 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())

Opciones y resultados de validación de PDF/A

aspose_pdf.generated.pdfa.PdfAValidateOptions recopila la configuración de validación y las fuentes de entrada; PdfAValidationResult recopila el resultado. PdfAValidateOptions.add_input() verifica una ruta de cadena con Path.exists() antes de aceptarla y lanza PdfIOException si el archivo falta, de modo que el llamador se entere de una ruta de entrada incorrecta inmediatamente en lugar de en tiempo de validación.

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())

Tipos de seguridad y validación reexportados

aspose_pdf.generated.security importa CompromiseCheckResult y SignaturesCompromiseDetector directamente desde aspose_pdf.security, y CertificationLevel, RevocationStatus, TrustStatus, ValidationMethod, ValidationMode, ValidationOptions, ValidationResult y ValidationStatus desde aspose_pdf.validation. A diferencia de Document y UnsignedContentAbsorber, no hay una reimplementación independiente aquí — ambas rutas de importación devuelven el mismo objeto.

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)

Inicio rápido

Instale el paquete, luego cree un documento con el Document principal, guárdelo y ejecútelo con las opciones generated.pdfa y los objetos de resultado.

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())

Formatos compatibles

FormatoExtensiónLeerEscribir
PDFpdfSíSí

La lectura y escritura de PDF es Aspose.PDF FOSS para la función central de Python. Cada clase en esta guía — el Document principal, el espejo generated.document.Document, y los auxiliares PDF/A — opera con entrada y salida PDF a través del motor compartido SimplePdf; aspose_pdf.generated cambia la clase que importa, no el formato de archivo que se procesa.


Código abierto y licencias

Aspose.PDF FOSS para Python se publica bajo la licencia MIT: sin restricciones de uso, sin tarifas de ejecución y sin requisitos de registro para uso comercial o personal. El código fuente está alojado en github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, y el paquete se publica en PyPI como aspose-pdf-foss-for-python.


Primeros pasos

Recursos relacionados