Introduzione

document.py, il modulo che definisce Aspose.PDF FOSS per la classe Document di Python, lo descrive come una classe che “avvolge il motore PDF nativo”. Concretamente, quel motore è aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from crea un’istanza SimplePdf, e ogni operazione a livello di documento — salvataggio, ottimizzazione, riparazione, crittografia — la delega a esso. Lo stesso vale per il rendering: Page.render e Document.render_page entrambi chiamano aspose_pdf.engine.rasterizer.

Il codice della maggior parte delle applicazioni non ha mai bisogno di guardare oltre Document e Page. Ma aspose_pdf.engine è un normale pacchetto Python importabile, e diverse delle componenti sotto la facciata sono utili da sole: il rasterizzatore che trasforma una pagina in pixel, i codec dei filtri di flusso che comprimono e decomprimono i flussi di contenuto PDF, e le utility di crittografia che implementano gli algoritmi AES-CBC e RC4 su cui si basano i gestori di sicurezza PDF. A differenza del pacchetto principale, i sottomoduli aspose_pdf.engine non sono reesportati dal livello superiore aspose_pdf — l’unica eccezione è RasterizedPage, collegato tramite aspose_pdf.visualization — quindi tutto ciò che segue è importato con il suo percorso puntato completo, per esempio from aspose_pdf.engine.filters import StreamDecoder.

Aspose.PDF FOSS per Python è un pacchetto Python, aspose-pdf-foss-for-python, rilasciato sotto licenza MIT, che richiede Python 3.11 o successivo. Il suo nome di modulo di livello superiore è aspose_pdf. Il pacchetto core dipende solo da cryptography e asn1crypto; extra opzionali aggiungono decodifica di immagini basata su Pillow, supporto ai font WOFF2 basato su Brotli, e layout di testo complesso basato su HarfBuzz.


Caratteristiche principali

Rendering delle pagine con il motore di rasterizzazione

Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) e la sua controparte Page.render restituiscono entrambi un RasterizedPage — un raster RGB impacchettato prodotto dal rasterizzatore del motore. RasterizedPage espone width, height e byte grezzi pixels, oltre a get_pixel() per una ricerca a singolo pixel, to_png() / to_tiff() per byte codificati in memoria, e save() per scrivere direttamente un file .png o .tif/.tiff. Lavorare con l’oggetto in memoria — anziché salvarlo solo su disco — è utile quando il chiamante vuole ispezionare o trasformare i pixel prima di decidere se conservarli.

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

Il motore di filtri di flusso

Il contenuto PDF e i flussi di oggetti sono compressi con filtri denominati come FlateDecode e LZWDecode. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) e StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) implementano le parti di codifica e decodifica di quella catena di filtri — gli stessi codec che il motore utilizza internamente quando scrive e legge i flussi di un documento. Entrambi accettano un unico nome di filtro o un elenco per filtri concatenati, e StreamDecoder.decode() genera PdfValidationException su un nome di filtro non riconosciuto invece di restituire byte silenziosamente errati.

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

Il motore di crittografia

aspose_pdf.engine.encryption.EncryptionUtils è la classe di utilità a metodi statici a cui SimplePdf fa riferimento per ogni operazione legata alla crittografia: Document.encrypt, decrypt() e change_passwords() si risolvono tutti in chiamate a EncryptionUtils in fondo. I suoi metodi implementano AES-CBC e la crittografia RC4 direttamente (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), la derivazione delle chiavi per le revisioni del gestore di sicurezza standard PDF (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6), e generate_file_id() per l’ID casuale di 16 byte di cui hanno bisogno i nuovi documenti.

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

Avvio rapido

Installa il pacchetto, poi genera una pagina direttamente dal livello del motore in un unico 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")

Formati supportati

FormatoEstensioneLeggiScrivi
PDFpdf
TIFFtiff-

La lettura e scrittura di PDF è Aspose.PDF FOSS per la funzione principale di Python — la coppia di motori Document/SimplePdf carica e scrive documenti PDF in ogni percorso di codice di questo post. Document.render_page, Page.render e RasterizedPage.to_png()/to_tiff() producono inoltre output raster PNG e TIFF; questi sono output di rasterizzazione di pagina piuttosto che formati di caricamento del documento.


Open Source e 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.


Guida introduttiva

Risorse correlate