介绍
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 完全不进行重新实现:它直接从 aspose_pdf.security 与 aspose_pdf.validation 中导入 CompromiseCheckResult、SignaturesCompromiseDetector 以及验证枚举,并重新导出它们,因此两个导入路径都解析为相同的类对象。
本指南覆盖所有四个模块,并明确指出 generated 类在何处表现得不同于主包中同名的对应类——Document 和 UnsignedContentAbsorber 分别在两个位置存在,且实现各异,这正是仅凭名称导入时容易出错的情况。
Aspose.PDF FOSS 用于 Python 是一个 Python 包,aspose-pdf-foss-for-python,在 MIT 许可证下发布,要求 Python 3.11 或更高版本。其顶层模块名为 aspose_pdf;请参阅下方的快速入门章节了解安装。核心包仅依赖 cryptography 和 asn1crypto;可选的扩展添加基于 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.UnsignedContentAbsorber 和 UnsignedContent 提供一个用于未签名表单字段、页面和注释的容器。这不同于顶层的 aspose_pdf.UnsignedContentAbsorber(document),后者接受一个真实的 Document 并过滤其 form_fields/annotations,仅保留其 is_signed/signed 属性为 falsy 的项目。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 直接从 aspose_pdf.security 导入 CompromiseCheckResult 和 SignaturesCompromiseDetector,并从 aspose_pdf.validation 导入 CertificationLevel、RevocationStatus、TrustStatus、ValidationMethod、ValidationMode、ValidationOptions、ValidationResult 和 ValidationStatus。与 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())
支持的格式
| 格式 | 扩展名 | 读取 | 写入 |
|---|---|---|---|
| 是 | 是 |
PDF 读取和写入对于 Python 的核心功能来说是 Aspose.PDF FOSS。本指南中的每个类——主 Document、generated.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。