Вступ

Aspose.PDF FOSS для Python — це нова бібліотека з відкритим кодом для роботи з PDF-документами з коду Python. Вона випущена під ліцензією MIT і повністю реалізована на Python — парсер PDF, записувач, растеризатор сторінок та шифрувальні процедури входять до складу пакету, а необхідні залежності обмежені cryptography та asn1crypto. Додаткові опції додають підтримку зображень на базі Pillow, декодування шрифтів WOFF2 на базі Brotli та HarfBuzz-на базі складного формування тексту.

Бібліотека організована навколо класу Document, який завантажує PDF з шляху, байтів або бінарного потоку та надає доступ до його сторінок через document.pages, PageCollection, що підтримує ітерацію, індексування та зрізи. Далі API охоплює додавання тексту та зображень до сторінок, читання та зміну анотацій, створення та заповнення полів AcroForm, шифрування та розшифрування документів, а також витягування тексту та вкладень — операції, необхідні для створення нових PDF-файлів або роботи з існуючими.

Цей випуск призначений для розробників, які потребують обробки PDF у кодовій базі Python без комерційної ліцензії: генерація звітів та рахунків-фактур, конвеєри інжестії документів, автоматизація заповнення форм та сервіси, що потребують рендерингу сторінок PDF у зображення або витягування тексту для подальшого індексування. Проект наразі знаходиться у альфа-версії, тому API та набір функцій можуть змінюватися до першого стабільного випуску. Потрібен Python 3.11 або новішої версії.

Що включено

Створення та завантаження документів

PdfDocument() створює порожній PDF; PdfDocument(source, password=..., limits=...) завантажує існуючий з шляху, необроблених байтів або бінарного потоку і еквівалентний виклику PdfDocument().load_from(source, ...). Обидва піднімають виключення у випадку відсутнього файлу, даних, що не є PDF, або відсутнього пароля, замість повернення порожнього документа. PdfDocument є менеджером контексту, тому ресурси звільняються автоматично, коли блок 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}")

Додавання тексту та зображень

Page.add_text розміщує Standard‑14 або вбудований Unicode‑текст у позиції x/y з заданим font_size; аргумент font може бути FontDescriptor, сирими байтами шрифту або шляхом до TrueType/OpenType шрифту для Unicode поза кодуваннями Standard‑14. Page.add_image розміщує сирий, JPEG або PNG XObject‑зображення на сторінці у вказаній позиції та розмірі.

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

Анотації

Кожен Page відкриває свої анотації через page.annotations, який є AnnotationCollection. add(subtype, rect, contents, title, appearance_normal, properties) створює та вставляє анотацію стандартного підтипу, такого як Square, Circle, Line, Highlight або FreeText, повертаючи Annotation. Виклик generate_appearance() на поверненій анотації синтезує потік відображення на основі її геометрії та властивостей.

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

Поля форми

document.form повертає Form документа, який безпосередньо створює поля AcroForm: add_text_field(), add_checkbox(), add_radio_group(), add_list_box(), add_combo_box() та add_push_button() кожен приймає назву поля, Page або індекс сторінки та прямокутник розташування, повертаючи Field. Встановлення field.value оновлює значення поля, а form.flatten() закріплює зовнішній вигляд кожного поля у статичний вміст сторінки.

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

Шифрування

Document.encrypt(user_password, owner_password, permissions) захищає документ користувацьким паролем, паролем власника та бітовою маскою дозволів, повертаючи той самий Document для ланцюжка. Document.decrypt(password) скасовує операцію, а властивість is_encrypted повідомляє про поточний стан. Повторне завантаження зашифрованого документа вимагає передати password= конструктору або 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}")

Видобування тексту

PdfExtractor прив’язується до джерела за допомогою bind_pdf(), потім extract_text() проходить сторінки документа. get_text() повертає весь видобутий текст одразу, тоді як has_next_page_text() і get_next_page_text() ітерують результат сторінка за сторінкою. PdfExtractor також є менеджером контексту.

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

Швидкий старт

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

Підтримувані формати

ФорматРозширенняЧитанняЗапис
PDF.pdf✓✓
PNG.png—✓
TIFF.tiff—✓

PDF є основним форматом вводу та виводу бібліотеки, читається через Document/load_from() і записується через Document.save. PNG та TIFF — це вихідні формати рендерингу сторінок, які створюються за допомогою Page.render, Page.save_as_image та Document.save_page_as_image.


Відкритий код і ліцензування

Aspose.PDF FOSS для Python розповсюджується під ліцензією MIT, повний вихідний код доступний за адресою github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python. Ліцензія дозволяє комерційне використання, модифікацію та розповсюдження без окремої угоди.


Початок роботи

Пов’язані ресурси