Úvod

document.py, modul který definuje Aspose.PDF FOSS pro třídu Document v Python, popisuje ji jako třídu, která „zabaluje nativní PDF engine.“ Konkrétně je tento engine aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from vytváří instanci SimplePdf a každá operace na úrovni dokumentu — ukládání, optimalizace, oprava, šifrování — ji deleguje. To samé platí pro renderování: Page.render a Document.render_page oba volají do aspose_pdf.engine.rasterizer.

Většina aplikačního kódu nikdy nepotřebuje se dívat dál než Document a Page. Ale aspose_pdf.engine je běžný, importovatelný balíček Python, a několik částí pod fasádou je užitečných samostatně: rasterizér, který převádí stránku na pixely, kodeky streamových filtrů, které komprimují a dekomprimují PDF obsahové streamy, a šifrovací utility, které implementují algoritmy AES-CBC a RC4, na nichž závisí bezpečnostní handlery PDF. Na rozdíl od hlavního balíčku nejsou podmoduly aspose_pdf.engine znovu exportovány z vrchní úrovně aspose_pdf — výjimkou je RasterizedPage, propojený přes aspose_pdf.visualization — takže vše pod tím je importováno pomocí plné tečkové cesty, např. from aspose_pdf.engine.filters import StreamDecoder.

Aspose.PDF FOSS pro Python je balíček Python, aspose-pdf-foss-for-python, vydaný pod licencí MIT, vyžadující Python 3.11 nebo vyšší. Název jeho vrchního modulu je aspose_pdf. Jádrový balíček závisí jen na cryptography a asn1crypto; volitelné rozšíření přidávají dekódování obrázků založené na Pillow, podporu fontů WOFF2 založenou na Brotli a komplexní rozvržení textu založené na HarfBuzz.


Klíčové vlastnosti

Renderování stránek pomocí rasterizačního enginu

Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) a jeho Page.render protějšek oba vrací RasterizedPage — zabalený RGB raster vytvořený rasterizérem enginu. RasterizedPage zpřístupňuje width, height a surové bajty pixels, plus get_pixel() pro vyhledání jednoho pixelu, to_png() / to_tiff() pro kódované bajty v paměti a save() pro přímý zápis souboru .png nebo .tif/.tiff. Práce s objektem v paměti — místo pouhého ukládání na disk — je užitečná, když volající chce prověřit nebo transformovat pixely před tím, než se rozhodne, zda je zachová.

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

Motor filtrů proudu

Obsah PDF a streamy objektů jsou komprimovány pojmenovanými filtry, jako jsou FlateDecode a LZWDecode. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) a StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) implementují kódovací a dekódovací část této řetězce filtrů — stejné kodeky, které engine interně používá při zápisu a čtení streamů dokumentu. Oba přijímají buď jeden název filtru, nebo seznam pro řetězení filtrů, a StreamDecoder.decode() vyvolá PdfValidationException při neznámém názvu filtru místo toho, aby tiše vrátil špatné bajty.

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

Šifrovací engine

aspose_pdf.engine.encryption.EncryptionUtils je třída utilit s statickými metodami, do které SimplePdf volá při každé operaci související se šifrováním: Document.encrypt, decrypt() a change_passwords() všechny interně přecházejí na volání EncryptionUtils. Její metody přímo implementují AES-CBC a šifrování RC4 (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), odvození klíče pro revize standardního bezpečnostního handleru PDF (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6) a generate_file_id() pro náhodné 16-byte ID, které nové dokumenty potřebují.

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

Rychlý start

Nainstalujte balíček a poté vykreslete stránku přímo z vrstvy engine v jediném skriptu.

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

Podporované formáty

FormátPříponaČístZapsat
PDFpdfAnoAno
TIFFtiff-Ano

Čtení a zápis PDF je Aspose.PDF FOSS pro Python— hlavní funkci Python — dvojice motorů Document/SimplePdf načítá a zapisuje PDF dokumenty na každé cestě kódu v tomto příspěvku. Document.render_page, Page.render a RasterizedPage.to_png()/to_tiff() také produkují rasterový výstup PNG a TIFF; jedná se o výstupy rasterizace stránek, nikoli o formáty načítání dokumentů.


Open Source a licencování

Aspose.PDF FOSS pro Python je vydán pod licencí MIT: žádná omezení používání, žádné poplatky za běh a žádné požadavky na registraci pro komerční nebo osobní použití. Zdrojový kód je hostován na github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, a balíček je publikován na PyPI jako aspose-pdf-foss-for-python.


Začínáme

Související zdroje