Introducere

document.py, modulul care definește Aspose.PDF FOSS pentru clasa Document a Python, îl descrie ca pe o clasă care “wraps the native PDF engine.” Concret, acel motor este aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from creează o instanță SimplePdf, iar fiecare operație la nivel de document — saving, optimizing, repairing, encrypting — o delegă. Același lucru este valabil pentru randare: Page.render și Document.render_page ambele apelează în aspose_pdf.engine.rasterizer.

Majoritatea codului aplicației nu trebuie să depășească Document și Page. Dar aspose_pdf.engine este un pachet Python obișnuit, importabil, și mai multe dintre componentele de sub fațadă sunt utile de sine stătătoare: rasterizatorul care transformă o pagină în pixeli, codecurile de filtrare a fluxurilor care comprimă și decomprimă fluxurile de conținut PDF, și utilitarele de criptare care implementează algoritmii AES-CBC și RC4 de care se bazează manipulatoarele de securitate PDF. Spre deosebire de pachetul principal, submodulele aspose_pdf.engine nu sunt re-exportate din aspose_pdf de nivel superior — singura excepție este RasterizedPage, legată prin aspose_pdf.visualization — astfel că tot ce este mai jos este importat prin calea sa completă punctată, de exemplu from aspose_pdf.engine.filters import StreamDecoder.

Aspose.PDF FOSS pentru Python este un pachet de Python, aspose-pdf-foss-for-python, lansat sub licența MIT, care necesită PyThon 3.11 sau mai târziu. numele său de modul de nivel superior este aspose_pdf. pachetul principal depinde numai de cryptography și asn1crypto; extra opționale adaugă decodificarea imaginii bazată pe Pillow, suportul fontului WOFF2 bazat pe Brotli și layout complex text bazate pe HarfBuzz .


Caracteristici cheie

Rendering Pages cu motorul de rasterizare

Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) și omologul său Page.render returnează ambele un RasterizedPage — un raster RGB împachetat produs de rasterizatorul motorului. RasterizedPage expune width, height și octeți brut pixels, plus get_pixel() pentru o căutare de un singur pixel, to_png() / to_tiff() pentru octeți codificați în memorie, și save() pentru a scrie un fișier .png sau .tif/.tiff direct. Lucrul cu obiectul în memorie — în loc să fie doar salvat pe disc — este util atunci când un apelant dorește să inspecteze sau să transforme pixeli înainte de a decide dacă să îi păstreze.

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

Motorul de filtrare a fluxului

Conținutul PDF și fluxurile de obiecte sunt comprimate cu filtre denumite, cum ar fi FlateDecode și LZWDecode. aspose_pdf.engine.filters.StreamEncoder.encode(data, filters, decode_parms=None) și StreamDecoder.decode(data, filters, decode_parms, *, limits=None, max_output_bytes=None) implementează părțile de codare și decodare ale lanțului de filtre — aceleași codecuri pe care motorul le folosește intern când scrie și citește fluxurile unui document. Ambele acceptă un singur nume de filtru sau o listă pentru filtre în lanț, iar StreamDecoder.decode() ridică PdfValidationException pentru un nume de filtru nerecunoscut în loc să returneze bytes incorecți în mod silențios.

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

Motorul de criptare

aspose_pdf.engine.encryption.EncryptionUtils este clasa utilitară cu metode statice pe care SimplePdf o apelează pentru fiecare operație legată de criptare: Document.encrypt, decrypt() și change_passwords() se rezolvă în apeluri EncryptionUtils în spate. Metodele sale implementează AES-CBC și criptarea RC4 direct (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), derivarea cheii pentru reviziile manipulantului de securitate standard PDF (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6) și generate_file_id() pentru ID-ul aleator de 16 de octeți de care au nevoie documentele noi.

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

Începe rapid

Instalați pachetul, apoi face o pagină direct de la stratul motorului într-un singur script.

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

Formate susținute

FormatulextindereCiteșteScriu
PDFPDFDaDa
TIFFTIFF-Da

PDF-ul este Aspose.PDF FOSS pentru funcția de bază a Pythonului - perechea de motoare Document/SimplePdf încărcă și scrie documente PDF pe fiecare cale cod în acest post. Document.render_page, Page.render și RasterizedPage.to_png() / to_tiff() produc în plus PNG și TIFF raster output; acestea sunt surse de rastere pagină mai degrabă decât formate document-lăsând.


Sursă deschisă & Licențiere

Aspose.PDF FOSS pentru Python este eliberat sub licența MIT: nu există restricții de utilizare, nu sunt taxe de funcționare și nu au cerințe de înregistrare pentru uz comercial sau personal. codul sursă este găzduit la github.com/aspose-pdf-foss/Aspose-PDF-FOSS - pentru-Ptone, iar pachetul este publicat pe PyPI ca aspose-pdf-foss-for-python.


să înceapă

Resursele conexe