Введение

Aspose.PDF FOSS для Python включает подпакет aspose_pdf.generated с четырьмя модулями: document.py, forms.py, pdfa.py и security.py. Ни один из них не переэкспортируется из верхнеуровневого пакета aspose_pdf, поэтому каждый класс в этом руководстве импортируется по его полному точечному пути — from aspose_pdf.generated.document import Document, а не from aspose_pdf import Document.

Четыре модуля используют два разных подхода. generated.document, generated.forms и generated.pdfa каждый определяют свои собственные классы: независимые реализации, которые отражают структуру основных пакетов Document, UnsignedContent/UnsignedContentAbsorber и PdfAValidateOptions/PdfAValidationResult — полезно для кода, написанного под эту зеркальную структуру пространств имён, но это реальный, отдельный набор классов, а не псевдонимы. generated.security, с другой стороны, вовсе не делает пере-реализацию: он импортирует CompromiseCheckResult, SignaturesCompromiseDetector и перечисления валидации напрямую из aspose_pdf.security и aspose_pdf.validation и переэкспортирует их, так что оба пути импорта разрешаются к одинаковому объекту класса.

Это руководство охватывает все четыре модуля и явно указывает, где класс generated ведёт себя иначе, чем его аналог из основного пакета с тем же именем — Document и UnsignedContentAbsorber существуют в двух местах с двумя разными реализациями, что именно тот случай, когда легко ошибиться, импортируя только по имени.

Aspose.PDF FOSS для Python — это Python пакет, aspose-pdf-foss-for-python, выпущенный под лицензией MIT, требующий Python версии 3.11 или новее. Его верхнеуровневое имя модуля — aspose_pdf; см. раздел «Быстрый старт» ниже для установки. Ядро пакета зависит только от cryptography и asn1crypto; дополнительные опции добавляют декодирование изображений на основе Pillow, поддержку шрифтов WOFF2 на основе Brotli и сложную верстку текста на основе HarfBuzz.


Ключевые возможности

Вторая реализация документа

aspose_pdf.generated.document.Document реализует тот же основной жизненный цикл, что и основной aspose_pdf.Documentload_from(), save(), encrypt()/decrypt()/change_passwords(), optimize()/optimize_resources(), repair(), flatten() и validate()/check() — поверх того же движка aspose_pdf.engine.simple_pdf.SimplePdf. Он отражает подмножество основного Document: не имеет pages.add()-подобного создания страниц, не поддерживает form/outlines/attachments и не имеет render_page(). Поскольку имя класса конфликтует с Document основного пакета, импортируйте его под псевдонимом, когда оба требуются в одном модуле.

from aspose_pdf import Document
from aspose_pdf.generated.document import Document as CompatDocument

with Document() as document:
    document.pages.add()
    document.save("source.pdf")

compat = CompatDocument()
compat.load_from("source.pdf")
print(compat.page_count, compat.is_encrypted)

compat.optimize(compress_images=True)
compat.save("optimized.pdf", overwrite=True)
compat.dispose()

Упаковка неподписанного контента

aspose_pdf.generated.forms.UnsignedContentAbsorber и UnsignedContent предоставляют контейнер для неподписанных полей форм, страниц и аннотаций. Это отличается от верхнеуровневого aspose_pdf.UnsignedContentAbsorber(document), который принимает реальный Document и фильтрует его form_fields/annotations на предмет элементов, у которых атрибут is_signed/signed имеет ложное значение. Версия generated.forms не принимает документ вовсе — extract() просто упаковывает любые pages, form_fields и annotations, которые вы передаете ей в виде именованных аргументов, в экземпляр UnsignedContent, что полезно, когда неподписанные элементы уже собраны где-то ещё и требуется только общий контейнер и его add_page()/remove_page()-подобные мутаторы.

from aspose_pdf.generated.forms import UnsignedContentAbsorber

absorber = UnsignedContentAbsorber()
content = absorber.extract(
    form_fields=["signature_field", "initials_field"],
    annotations=["review_stamp"],
)
print(absorber.has_extracted(), content.form_fields, content.annotations)

content.add_page("page-1")
absorber.reset()
print(absorber.get_extracted())

Опции проверки PDF/A и результаты

aspose_pdf.generated.pdfa.PdfAValidateOptions собирает настройки проверки и источники ввода; PdfAValidationResult собирает результат. PdfAValidateOptions.add_input() проверяет строковый путь с помощью Path.exists() перед принятием и вызывает PdfIOException, если файл отсутствует, поэтому вызывающий код узнает о неверном пути ввода сразу, а не во время проверки.

from aspose_pdf import Document
from aspose_pdf.exceptions import PdfIOException
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

with Document() as document:
    document.pages.add()
    document.save("candidate.pdf")

options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")
print(options.get_options(), options.inputs)

try:
    options.add_input("missing.pdf")
except PdfIOException as error:
    print(f"rejected: {error}")

result = PdfAValidationResult()
result.add_error("Missing /OutputIntent for PDF/A-2b")
print(result.is_valid, result.to_dict())

Переэкспортированные типы безопасности и проверки

aspose_pdf.generated.security импортирует CompromiseCheckResult и SignaturesCompromiseDetector напрямую из aspose_pdf.security, а также CertificationLevel, RevocationStatus, TrustStatus, ValidationMethod, ValidationMode, ValidationOptions, ValidationResult и ValidationStatus из aspose_pdf.validation. В отличие от Document и UnsignedContentAbsorber, здесь нет независимой пере реализации — оба пути импорта возвращают один и тот же объект.

from aspose_pdf.generated.security import SignaturesCompromiseDetector
from aspose_pdf.security import SignaturesCompromiseDetector as CanonicalDetector

assert SignaturesCompromiseDetector is CanonicalDetector

detector = SignaturesCompromiseDetector(document=None)
result = detector.check()
print(result.compromised, result.reasons)

Быстрый старт

Установите пакет, затем создайте документ с основным Document, сохраните его и пропустите через параметры generated.pdfa и объекты результата.

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
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult

with Document() as document:
    page = document.pages.add()
    page.add_text("PDF/A candidate", x=72, y=740, font_size=20)
    document.save("candidate.pdf")

options = PdfAValidateOptions()
options.set_option("pdfa_version", "PDF/A-2b")
options.add_input("candidate.pdf")

result = PdfAValidationResult()
if not options.inputs:
    result.add_error("No inputs registered")

print(result.to_dict())

Поддерживаемые форматы

ФорматРасширениеЧитатьЗаписать
PDFpdfДаДа

Чтение и запись PDF Aspose.PDF FOSS для основной функции Python. Каждый класс в этом руководстве — основной Document, зеркальный generated.document.Document и вспомогательные PDF/A — работает с входными и выходными PDF через общий движок SimplePdf; aspose_pdf.generated меняет тот класс, который вы импортируете, а не формат обрабатываемого файла.


Открытый исходный код и лицензирование

Aspose.PDF FOSS для Python выпущен под лицензией MIT: нет ограничений по использованию, нет платы за выполнение и нет требований к регистрации для коммерческого или личного использования. Исходный код размещён по адресу github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python, а пакет опубликован на PyPI как aspose-pdf-foss-for-python.


Начало работы

Связанные ресурсы