Wprowadzenie

document.py, moduł definiujący Aspose.PDF FOSS dla klasy Document w Python, opisuje go jako klasę, która „opakowuje natywny silnik PDF”. Konkretnie, ten silnik to aspose_pdf.engine.simple_pdf.SimplePdf: Document.load_from tworzy instancję SimplePdf, a każda operacja na poziomie dokumentu — zapisywanie, optymalizacja, naprawa, szyfrowanie — deleguje do niej. To samo dotyczy renderowania: Page.render i Document.render_page oba wywołują aspose_pdf.engine.rasterizer.

Większość kodu aplikacji nigdy nie musi zagłębiać się poza Document i Page. Jednak aspose_pdf.engine jest zwykłym, importowalnym pakietem Python, a kilka elementów pod fasadą jest przydatnych samodzielnie: rasteryzator zamieniający stronę w piksele, kodeki filtrów strumieni, które kompresują i dekompresują strumienie zawartości PDF, oraz narzędzia szyfrowania implementujące algorytmy AES-CBC i RC4, na których opierają się obsługujące bezpieczeństwo PDF. W przeciwieństwie do głównego pakietu, podmoduły aspose_pdf.engine nie są ponownie eksportowane z poziomu najwyższego aspose_pdf — jedynym wyjątkiem jest RasterizedPage, połączony przez aspose_pdf.visualization — więc wszystko poniżej jest importowane przy użyciu pełnej, kropkowanej ścieżki, na przykład from aspose_pdf.engine.filters import StreamDecoder.

Aspose.PDF FOSS dla Python jest pakietem Python, aspose-pdf-foss-for-python, wydanym na licencji MIT, wymagającym Python 3.11 lub nowszego. Jego nazwa modułu najwyższego poziomu to aspose_pdf. Pakiet rdzeniowy zależy wyłącznie od cryptography i asn1crypto; dodatkowe opcje dodają dekodowanie obrazów oparte na Pillow, obsługę czcionek WOFF2 opartą na Brotli oraz układ tekstu złożonego oparty na HarfBuzz.


Kluczowe funkcje

Renderowanie stron przy użyciu silnika rasteryzacji

Document.render_page(page_index, dpi=..., scale=..., background=..., antialias=...) i jego odpowiednik Page.render zwracają RasterizedPage — spakowany raster RGB wygenerowany przez rasteryzator silnika. RasterizedPage udostępnia width, height oraz surowe bajty pixels, dodatkowo get_pixel() do odczytu pojedynczego piksela, to_png() / to_tiff() dla zakodowanych bajtów w pamięci oraz save() do bezpośredniego zapisu pliku .png lub .tif/.tiff. Praca z obiektem w pamięci — zamiast jedynie zapisywania na dysk — jest przydatna, gdy wywołujący chce przejrzeć lub przekształcić piksele przed podjęciem decyzji o ich zachowaniu.

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

Silnik filtrów strumieniowych

Zawartość PDF oraz strumienie obiektów są kompresowane przy użyciu nazwanych filtrów, takich jak 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) implementują strony kodowania i dekodowania tego łańcucha filtrów — te same kodeki, których silnik używa wewnętrznie przy zapisywaniu i odczytywaniu strumieni dokumentu. Oba akceptują pojedynczą nazwę filtru lub listę dla filtrów łańcuchowych, a StreamDecoder.decode() podnosi PdfValidationException przy nierozpoznanej nazwie filtru zamiast zwracać cicho-błędne 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")

Silnik szyfrowania

aspose_pdf.engine.encryption.EncryptionUtils jest klasą pomocniczą z metodami statycznymi, do której SimplePdf odwołuje się przy każdej operacji związanej z szyfrowaniem: Document.encrypt, decrypt() i change_passwords() wszystkie przekładają się na wywołania EncryptionUtils pod maską. Jej metody implementują bezpośrednio szyfrowanie AES-CBC i RC4 (encrypt_aes_cbc, decrypt_aes_cbc, encrypt_rc4, decrypt_rc4), derivację klucza dla wersji obsługi zabezpieczeń standardu PDF (compute_owner_key_v4, compute_user_key_v4, compute_user_owner_keys_v6) oraz generate_file_id() dla losowego 16-bajtowego identyfikatora, którego potrzebują nowe dokumenty.

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

Szybki start

Zainstaluj pakiet, a następnie wyrenderuj stronę bezpośrednio z warstwy silnika w jednym skrypcie.

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

Obsługiwane formaty

FormatRozszerzenieOdczytZapis
PDFpdfTakTak
TIFFtiff-Tak

Odczyt i zapis PDF jest Aspose.PDF FOSS dla głównej funkcji Python — para silników Document/SimplePdf ładuje i zapisuje dokumenty PDF na każdej ścieżce kodu w tym poście. Document.render_page, Page.render i RasterizedPage.to_png() / to_tiff() dodatkowo generują wyjście rastrowe PNG i TIFF; są to wyjścia rasteryzacji stron, a nie formaty ładowania dokumentów.


Open Source i licencjonowanie

Aspose.PDF FOSS dla Python jest udostępniony na licencji MIT: brak ograniczeń w użytkowaniu, brak opłat za działanie i brak wymagań rejestracji dla użytku komercyjnego lub osobistego. Kod źródłowy jest hostowany pod adresem github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, a pakiet jest publikowany na PyPI jako aspose-pdf-foss-for-python.


Rozpoczęcie

Powiązane zasoby