Introduktion

document.py, modulen som definierar Aspose.PDF FOSS för Pythons Document klass, beskriver den som en klass som “wraps the native PDF engine.” Konkret är den motorn aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from bygger en SimplePdf instans, och varje dokumentnivåoperation — saving, optimizing, repairing, encrypting — delegaterar till den. Detsamma gäller rendering: Page.render och Document.render_page anropar båda aspose_pdf.engine.rasterizer.

De flesta applikationskoder behöver aldrig titta förbi Document och Page. Men aspose_pdf.engine är ett vanligt, importbart Python-paket, och flera av delarna under fasaden är användbara på egen hand: rasteriseraren som omvandlar en sida till pixlar, strömfiltercodecs som komprimerar och dekomprimerar PDF-innehållsströmmar, och krypteringsverktygen som implementerar AES-CBC och RC4-algoritmerna som PDF-säkerhetshanterare förlitar sig på. Till skillnad från huvudpaketet exporteras inte aspose_pdf.engine-undermoduler från top-nivå aspose_pdf — det enda undantaget är RasterizedPage, kopplat via aspose_pdf.visualization — så allt nedanför importeras med sin fulla punktseparerade sökväg, till exempel from aspose_pdf.engine.filters import StreamDecoder.

Aspose.PDF FOSS för Python är en Pythons paket, aspose-pdf-foss-for-python, som släpps under MIT-licensen, kräver PyThons 3.11 eller senare. dess toppmodulnamn är aspose_pdf. Kärnan beror endast på cryptography och asn1crypto; valfria extras lägg till Pillow-baserad bildkodning, Brotli- baserat WOFF2-formt stöd och komplex text layout baserad på HarfBuzz .


Nyckelfunktioner

Rendering sidor med rasteriseringsmotorn

Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) och dess Page.render motsvarighet returnerar båda en RasterizedPage — en packad RGB-raster som produceras av motorens rasteriserare. RasterizedPage exponerar width, height och råa pixels byte, plus get_pixel() för en en-pixeluppslagning, to_png() / to_tiff() för kodade byte i minnet, och save() för att skriva en .png eller .tif/.tiff fil direkt. Att arbeta med objektet i minnet — snarare än att bara spara till disk — är användbart när en anropar vill inspektera eller transformera pixlar innan de beslutar om de ska behållas.

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

Streamfiltermotor

PDF-innehåll och objektströmmar komprimeras med namngivna filter som FlateDecode och LZWDecode. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) samt StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) implementerar kodning och dekodering sidor av den filtraden - samma koder motor använder intern när det skriver och läser strömmar av ett dokument. Båda accepterar en enda filtrnamn eller en lista för kedjfiltrar, ochStreamDecoder.decode() lyfter PdfValidationException på ett okända filternamnet istället för att returnera tyst-smutsiga bytes.

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

Den krypteringsmotor

aspose_pdf.engine.encryption.EncryptionUtils är den statiska metodverktygsklassen som SimplePdf anropar för varje krypteringsrelaterad operation: Document.encrypt, decrypt() och change_passwords() löser alla till EncryptionUtils-anrop under huven. Dess metoder implementerar AES-CBC och RC4-kryptering direkt (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), nyckelderivering för PDF-standardens säkerhetshanterarens revisioner (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6), och generate_file_id() för det slumpmässiga 16-byte-ID som nya dokument behöver.

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

Snabb start

Installera paketet, sedan göra en sida rakt från motorn i ett enda skript.

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

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

Stödda format

FormateraUtvidgningenLäsningSkrivande
PDFpdfJa jaJa ja
TIFFTif-Ja ja

PDF-läsning och skrivning är Aspose.PDF FOSS för Pythons kärnfunktion - den Document/SimplePdf motorparen lader och skriver PDF dokument på varje kodvägen i denna post. Document.render_page, Page.render och RasterizedPage.to_png() / to_tiff() dessutom producerar PNG och TIFF raster utgångar; dessa är sidrasteriserings utfall snarare än dokumentladdningsformat.


Öppen källkod och licens

Aspose.PDF FOSS för Python släpps under MIT-licensen: inga användningsrestriktioner, inga körningsavgifter och inga registreringskrav för kommersiell eller personlig användning. Källkoden finns på github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, och paketet publiceras på PyPI som aspose-pdf-foss-for-python.


Att börja

Relaterade resurser