Wprowadzenie

Aspose.PDF FOSS dla Python to nowa biblioteka open-source do pracy z dokumentami PDF z kodu Python. Została wydana na licencji MIT i jest w pełni zaimplementowana w Python — parser PDF, writer, page rasterizer oraz rutyny szyfrowania są częścią samego pakietu, a wymagane zależności ograniczają się do cryptography i asn1crypto. Opcjonalne dodatki dodają obsługę obrazów opartą na Pillow, dekodowanie czcionek WOFF2 oparte na Brotli oraz kształtowanie tekstu oparte na HarfBuzz.

Biblioteka jest zorganizowana wokół klasy Document, która ładuje PDF z ścieżki, bajtów lub strumienia binarnego i udostępnia jej strony poprzez document.pages, PageCollection obsługujący iterację, indeksowanie i wycinanie. Stamtąd API obejmuje dodawanie tekstu i obrazów do stron, odczytywanie i modyfikowanie adnotacji, tworzenie i wypełnianie pól AcroForm, szyfrowanie i odszyfrowywanie dokumentów oraz wyodrębnianie tekstu i załączników — operacje potrzebne do tworzenia nowych PDF-ów lub pracy z istniejącymi.

To wydanie jest przeznaczone dla deweloperów, którzy potrzebują przetwarzania PDF w ramach kodu Python bez komercyjnej licencji: generowanie raportów i faktur, pipeline’y przetwarzania dokumentów, automatyzacja wypełniania formularzy oraz usługi, które muszą renderować strony PDF jako obrazy lub wyodrębniać tekst do dalszego indeksowania. Projekt jest obecnie w fazie alfa, więc API i zakres funkcji mogą się zmienić przed pierwszym stabilnym wydaniem. Wymagany jest Python 3.11 lub nowszy.

Co zawiera

Tworzenie i ładowanie dokumentów

PdfDocument() tworzy pusty PDF; PdfDocument(source, password=..., limits=...) ładuje istniejący z ścieżki, surowych bajtów lub strumienia binarnego i jest równoważny wywołaniu PdfDocument().load_from(source, ...). Oba zgłaszają wyjątek w przypadku brakującego pliku, danych nie‑PDF lub brakującego hasła, zamiast zwracać pusty dokument. PdfDocument jest menedżerem kontekstu, więc zasoby są zwalniane automatycznie po wyjściu z bloku with.

from aspose_pdf import Document

with Document() as document:
    page = document.pages.add()
    page.add_text("Generated by Aspose.PDF FOSS", x=72, y=720, font_size=14)
    document.save("report.pdf")

with Document("report.pdf") as document:
    print(f"Pages: {document.page_count}")
    print(f"PDF version: {document.version}")

Dodawanie tekstu i obrazów

Page.add_text umieszcza tekst Standard‑14 lub osadzony Unicode w pozycji x/y z podanym font_size; argument font może być FontDescriptor, surowymi bajtami czcionki lub ścieżką do czcionki TrueType/OpenType dla Unicode spoza kodowań Standard‑14. Page.add_image umieszcza surowy obiekt XObject obrazu JPEG lub PNG na stronie w określonej pozycji i rozmiarze.

from aspose_pdf import Document

with Document() as document:
    page = document.pages.add()
    page.add_text(
        "Quarterly Summary",
        x=72,
        y=740,
        font_size=16,
    )
    page.add_image(
        "chart.png",
        x=72,
        y=420,
        width=300,
        height=200,
    )
    document.save("summary.pdf")

Adnotacje

Każdy Page udostępnia swoje adnotacje poprzez page.annotations, czyli AnnotationCollection. add(subtype, rect, contents, title, appearance_normal, properties) tworzy i wstawia adnotację standardowego podtypu, takiego jak Square, Circle, Line, Highlight lub FreeText, zwracając Annotation. Wywołanie generate_appearance() na zwróconej adnotacji generuje strumień wyglądu na podstawie jej geometrii i właściwości.

from aspose_pdf import Document

with Document() as document:
    page = document.pages.add()
    annotation = page.annotations.add(
        "Square",
        (100, 600, 300, 680),
        "Needs review",
        properties={"C": [1, 0, 0]},
    )
    annotation.generate_appearance()
    document.save("annotated.pdf")

Pola formularza

document.form zwraca Form dokumentu, który tworzy pola AcroForm bezpośrednio: add_text_field(), add_checkbox(), add_radio_group(), add_list_box(), add_combo_box() i add_push_button() każdy przyjmuje nazwę pola, Page lub indeks strony oraz prostokąt umiejscowienia, zwracając Field. Ustawienie field.value aktualizuje wartość pola, a form.flatten() zapisuje wygląd każdego pola jako statyczną treść strony.

from aspose_pdf import Document

with Document() as document:
    page = document.pages.add()
    form = document.form
    field = form.add_text_field(
        "customer_name",
        page,
        (72, 700, 300, 720),
    )
    field.value = "Jane Doe"
    form.flatten()
    document.save("form.pdf")

Szyfrowanie

Document.encrypt(user_password, owner_password, permissions) chroni dokument hasłem użytkownika, hasłem właściciela i maską uprawnień, zwracając ten sam Document umożliwiający łańcuchowanie. Document.decrypt(password) odwraca operację, a właściwość is_encrypted raportuje bieżący stan. Ponowne wczytanie zaszyfrowanego dokumentu wymaga przekazania password= do konstruktora lub do load_from().

from aspose_pdf import Document

with Document("report.pdf") as document:
    document.encrypt(user_password="user-pass", owner_password="owner-pass", permissions=0)
    document.save("encrypted.pdf")

with Document("encrypted.pdf", password="user-pass") as document:
    print(f"Encrypted: {document.is_encrypted}")

Ekstrakcja tekstu

PdfExtractor wiąże się ze źródłem przy użyciu bind_pdf(), następnie extract_text() przegląda strony dokumentu. get_text() zwraca cały wyekstrahowany tekst jednorazowo, podczas gdy has_next_page_text() i get_next_page_text() iterują wynik strona po stronie. PdfExtractor jest również menedżerem kontekstu.

from aspose_pdf import PdfExtractor

with PdfExtractor() as extractor:
    extractor.bind_pdf("report.pdf")
    extractor.extract_text()
    while extractor.has_next_page_text():
        print(extractor.get_next_page_text())

Szybki start

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(
        "Hello from Aspose.PDF FOSS!",
        x=72,
        y=720,
        font_size=18,
    )
    document.save("hello.pdf")

with Document("hello.pdf") as document:
    print(f"Pages: {document.page_count}")
    print(f"PDF version: {document.version}")

Obsługiwane formaty

FormatRozszerzenieOdczytZapis
PDF.pdf✓✓
PNG.png—✓
TIFF.tiff—✓

PDF jest podstawowym formatem wejściowym i wyjściowym biblioteki, odczytywanym za pośrednictwem Document/load_from() i zapisywanym za pośrednictwem Document.save. PNG i TIFF są wyjściami renderowania stron generowanymi przez Page.render, Page.save_as_image i Document.save_page_as_image.


Open Source i licencjonowanie

Aspose.PDF FOSS dla Python jest rozpowszechniany na licencji MIT, a pełne źródło jest dostępne pod adresem github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python. Licencja zezwala na komercyjne użycie, modyfikację i redystrybucję bez osobnej umowy.


Rozpoczęcie

Powiązane zasoby