Introducción
document.py, el módulo que define Aspose.PDF FOSS para la clase Document de Python, lo describe como una clase que “envuelve el motor PDF nativo”. Concretamente, ese motor es aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from crea una instancia de SimplePdf, y cada operación a nivel de documento — guardar, optimizar, reparar, cifrar — la delega a él. Lo mismo ocurre con el renderizado: Page.render y Document.render_page ambos llaman a aspose_pdf.engine.rasterizer.
La mayor parte del código de la aplicación nunca necesita mirar más allá de Document y Page. Pero aspose_pdf.engine es un paquete Python ordinario e importable, y varias de las piezas bajo la fachada son útiles por sí solas: el rasterizador que convierte una página en píxeles, los códecs de filtros de flujo que comprimen y descomprimen los flujos de contenido PDF, y las utilidades de cifrado que implementan los algoritmos AES-CBC y RC4 de los manejadores de seguridad PDF. A diferencia del paquete principal, los submódulos de aspose_pdf.engine no se reexportan desde el aspose_pdf de nivel superior — la única excepción es RasterizedPage, enlazado a través de aspose_pdf.visualization — por lo que todo lo que está debajo se importa mediante su ruta completa con puntos, por ejemplo from aspose_pdf.engine.filters import StreamDecoder.
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 posterior. Su nombre de módulo de nivel superior es aspose_pdf. 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
Renderizado de páginas con el motor de rasterización
Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) y su contraparte Page.render devuelven ambos un RasterizedPage — un raster RGB empaquetado producido por el rasterizador del motor. RasterizedPage expone width, height y bytes pixels sin procesar, además get_pixel() para una búsqueda de un solo píxel, to_png() / to_tiff() para bytes codificados en memoria, y save() para escribir directamente un archivo .png o .tif/.tiff. Trabajar con el objeto en memoria — en lugar de solo guardarlo en disco — es útil cuando el llamador desea inspeccionar o transformar los píxeles antes de decidir si conservarlos.
from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Rendered by the engine", x=72, y=700, font_size=18)
raster = document.render_page(0, dpi=150)
print(raster.width, raster.height)
corner = raster.get_pixel(0, 0)
print("top-left pixel:", corner)
with open("page-0.png", "wb") as handle:
handle.write(raster.to_png())
raster.save("page-0.tiff")
El motor de filtros de flujo
El contenido PDF y los flujos de objetos se comprimen con filtros nombrados como FlateDecode y LZWDecode. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) y StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) implementan los lados de codificación y decodificación de esa cadena de filtros — los mismos códecs que el motor usa internamente al escribir y leer los flujos de un documento. Ambos aceptan un solo nombre de filtro o una lista para filtros encadenados, y StreamDecoder.decode() lanza PdfValidationException ante un nombre de filtro no reconocido en lugar de devolver bytes silenciosamente incorrectos.
from aspose_pdf.engine.filters import StreamDecoder, StreamEncoder
raw = b"Sample content-stream payload.\n" * 40
compressed = StreamEncoder.encode(raw, "FlateDecode")
restored = StreamDecoder.decode(compressed, "FlateDecode", None)
assert restored == raw
print(f"{len(raw)} bytes -> {len(compressed)} bytes with FlateDecode")
El motor de cifrado
aspose_pdf.engine.encryption.EncryptionUtils es la clase de utilidad de método estático a la que SimplePdf llama para cada operación relacionada con el cifrado: Document.encrypt, decrypt() y change_passwords() se resuelven en llamadas a EncryptionUtils bajo el capó. Sus métodos implementan AES-CBC y cifrado RC4 directamente (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), derivación de claves para las revisiones del manejador de seguridad estándar PDF (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6), y generate_file_id() para el ID aleatorio de 16 bytes que necesitan los documentos nuevos.
from aspose_pdf.engine.encryption import EncryptionUtils
key = b"0123456789ABCDEF" # 16 bytes -> AES-128
ciphertext = EncryptionUtils.encrypt_aes_cbc(key, b"Reviewer notes: approved")
plaintext = EncryptionUtils.decrypt_aes_cbc(key, ciphertext)
assert plaintext == b"Reviewer notes: approved"
file_id = EncryptionUtils.generate_file_id()
print(file_id.hex())
Inicio rápido
Instala el paquete y luego renderiza una página directamente desde la capa del motor en un único script.
asposefoss/pdf is not yet published — build from source until it ships. See the project README for build instructions.from aspose_pdf import Document
with Document() as document:
page = document.pages.add()
page.add_text("Engine-rendered page", x=72, y=740, font_size=20)
raster = document.render_page(0, dpi=150)
raster.save("engine-render.png")
document.save("engine-quickstart.pdf")
print("Saved engine-quickstart.pdf and engine-render.png")
Formatos compatibles
| Formato | Extensión | Leer | Escribir |
|---|---|---|---|
| Sí | Sí | ||
| TIFF | tiff | - | Sí |
La lectura y escritura de PDF es Aspose.PDF FOSS para la función central de Python — el par de motores Document/SimplePdf carga y escribe documentos PDF en cada ruta de código en este artículo. Document.render_page, Page.render y RasterizedPage.to_png() / to_tiff() también generan salida rasterizada PNG y TIFF; estas son salidas de rasterización de página en lugar de formatos de carga de documento.
Código abierto y licencias
Aspose.PDF FOSS para Python se publica bajo la licencia MIT: sin restricciones de uso, sin tarifas de tiempo 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.