介绍

Aspose.PDF FOSS 用于 Python 包含一个 aspose_pdf.generated 子包,内有四个模块:document.pyforms.pypdfa.pysecurity.py。它们都没有从顶层 aspose_pdf 包重新导出,因此本指南中的每个类都必须使用完整的点分路径导入——from aspose_pdf.generated.document import Document,而不是 from aspose_pdf import Document

这四个模块采用两种不同的方式。generated.documentgenerated.formsgenerated.pdfa 各自定义自己的类:独立的实现,镜像主包的 DocumentUnsignedContent/UnsignedContentAbsorberPdfAValidateOptions/PdfAValidationResult 的结构——这对基于该镜像命名空间布局编写的代码有用,但它们是真正的、独立的类集合,而非别名。另一方面,generated.security 完全不进行重新实现:它直接从 aspose_pdf.securityaspose_pdf.validation 中导入 CompromiseCheckResultSignaturesCompromiseDetector 以及验证枚举,并重新导出它们,因此两个导入路径都解析为相同的类对象。

本指南覆盖所有四个模块,并明确指出 generated 类在何处表现得不同于主包中同名的对应类——DocumentUnsignedContentAbsorber 分别在两个位置存在,且实现各异,这正是仅凭名称导入时容易出错的情况。

Aspose.PDF FOSS 用于 Python 是一个 Python 包,aspose-pdf-foss-for-python,在 MIT 许可证下发布,要求 Python 3.11 或更高版本。其顶层模块名为 aspose_pdf;请参阅下方的快速入门章节了解安装。核心包仅依赖 cryptographyasn1crypto;可选的扩展添加基于 Pillow 的图像解码、基于 Brotli 的 WOFF2 字体支持,以及基于 HarfBuzz 的复杂文本布局。


关键特性

第二文档实现

aspose_pdf.generated.document.Document 实现了与主 aspose_pdf.Document 相同的核心生命周期——load_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.UnsignedContentAbsorberUnsignedContent 提供一个用于未签名表单字段、页面和注释的容器。这不同于顶层的 aspose_pdf.UnsignedContentAbsorber(document),后者接受一个真实的 Document 并过滤其 form_fields/annotations,仅保留其 is_signed/signed 属性为 falsy 的项目。generated.forms 版本根本不接受文档——extract() 只是将你以关键字参数传入的任意 pagesform_fieldsannotations 打包进一个 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 直接从 aspose_pdf.security 导入 CompromiseCheckResultSignaturesCompromiseDetector,并从 aspose_pdf.validation 导入 CertificationLevelRevocationStatusTrustStatusValidationMethodValidationModeValidationOptionsValidationResultValidationStatus。与 DocumentUnsignedContentAbsorber 不同,这里没有独立的重新实现——两个导入路径返回的是同一个对象。

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 读取和写入对于 Python 的核心功能来说是 Aspose.PDF FOSS。本指南中的每个类——主 Documentgenerated.document.Document 镜像以及 PDF/A 辅助类——都通过共享的 SimplePdf 引擎对 PDF 输入和输出进行操作;aspose_pdf.generated 只改变你导入的类,而不是处理的文件格式。


开源与授权

Aspose.PDF FOSS 对于 Python 在 MIT 许可证下发布:没有使用限制、没有运行时费用,也无需为商业或个人使用进行注册。源代码托管在 github.com/aspose-pdf-foss/Aspose-PDF-FOSS-for-Python,该软件包在 PyPI 上发布为 aspose-pdf-foss-for-python


开始使用

相关资源