Вступ

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.


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

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