使用生成的兼容性 API
使用生成的兼容性 API
Aspose.PDF FOSS for Python 提供了第二套更小的 API 接口,位于 aspose_pdf.generated 子包下:generated.document.Document、generated.forms.UnsignedContent 和 UnsignedContentAbsorber,以及 generated.pdfa.PdfAValidateOptions 和 PdfAValidationResult。这些类的名称与库的主 API(aspose_pdf.Document、aspose_pdf.UnsignedContent 等)中的类相同,但它们是独立定义的、方法集合更精简的类。它们作为独立的兼容层存在——始终使用完整的 aspose_pdf.generated.* 路径导入,以确保调用到正确的类。
通过生成的 Document 管理文档生命周期
generated.document.Document 支持核心文档生命周期:加载、保存、基本优化、加密和验证。其大多数属性的类型为 Any,而不是主 Document 类中暴露的更丰富的类型。
from aspose_pdf.generated.document import Document
doc = Document()
doc.load_from("input.pdf")
doc.optimize(compress_images=True)
doc.optimize_resources(remove_unused=True)
if doc.validate():
doc.save("output.pdf")
doc.dispose()加密和密码更改使用单密码形式,而不是主 Document.encrypt 中的用户/所有者分离密码:
from aspose_pdf.generated.document import Document
doc = Document()
doc.load_from("input.pdf")
doc.encrypt("secret")
doc.change_passwords("secret", "new-secret")
doc.save("protected.pdf")提取未签名内容
generated.forms.UnsignedContentAbsorber 将文档中尚未签名的页面、表单字段和批注提取到 UnsignedContent 容器中。调用 extract() 进行提取,然后使用 get_extracted() 或 has_extracted() 检查结果,而无需重新运行。
from aspose_pdf.generated.document import Document
from aspose_pdf.generated.forms import UnsignedContentAbsorber
doc = Document()
doc.load_from("input.pdf")
absorber = UnsignedContentAbsorber()
extracted = absorber.extract()
print(len(extracted.pages), len(extracted.form_fields), extracted.annotations)
if absorber.has_extracted():
same_result = absorber.get_extracted()
absorber.reset()UnsignedContent 也可以直接构建并填充,独立于吸收器:
from aspose_pdf.generated.forms import UnsignedContent
bundle = UnsignedContent()
bundle.add_page(some_page)
bundle.add_form_field(some_field)
bundle.add_annotation(some_annotation)
bundle.remove_page(some_page)
bundle.reset()PDF/A 验证选项和结果
generated.pdfa.PdfAValidateOptions 和 PdfAValidationResult 是用于 PDF/A 风格验证工作流的独立选项/结果对。它们不是由主 API 的 Document.validate_pdfa() 返回的类,也不是被 PdfAValidator.process() 消费的——后者使用它们自己单独定义的 PdfAValidateOptions 和 PdfAValidationResult 类,具有更丰富的表面(level、warnings、is_heuristic,以及一个 font_lookup_directory)。
from aspose_pdf.generated.pdfa import PdfAValidateOptions, PdfAValidationResult
options = PdfAValidateOptions()
options.add_input()
options.set_option("level", "1b")
stored_options = options.get_options()
result = PdfAValidationResult()
result.add_error("Font not embedded: Arial")
summary = result.to_dict()
is_valid = result.is_valid提示与最佳实践
- 通过完整的子模块路径导入每个
generated类(from aspose_pdf.generated.document import Document,以及同样适用于generated.forms和generated.pdfa)——永远不要假设裸露的Document或UnsignedContent导入会解析为兼容版本。 - 每当同一模块的文件同时使用主 API 时,为导入的类指定一个区分度高的本地名称,以便在每个调用点两种表面保持明显分离。
- 将
generated.pdfa.PdfAValidateOptions/PdfAValidationResult视为自包含的配对:构建选项,运行您自己的验证逻辑,并自行使用add_error()记录发现——它们不会被Document.validate_pdfa()自动填充。 - 如果不确定
extract()已经运行,请在调用get_extracted()之前检查UnsignedContentAbsorber.has_extracted()。 - 除非你特别需要精简的、生成的兼容层,否则在新代码中应优先使用主要的
aspose_pdf.DocumentAPI。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
错误的 Document 方法可用(缺少 pages、form、xmp_metadata 等) | 导入了 generated.document.Document 而不是主要的 aspose_pdf.Document | 除非您想要精简的接口,否则请导入主类(import aspose_pdf; aspose_pdf.Document()) |
PdfAValidateOptions/PdfAValidationResult 来自 generated.pdfa 与 PdfAValidator.process() 不兼容 | 主要的 API 的 PdfAValidator 期望使用它自己的 PdfAValidateOptions/PdfAValidationResult 类,而不是 generated.pdfa 版本 | 使用从 aspose_pdf 导出的 PdfAValidateOptions/PdfAValidationResult 类来处理 PdfAValidator 工作流 |
get_extracted() 返回 None | extract() 从未在该 UnsignedContentAbsorber 实例上被调用 | 在调用 get_extracted() 之前先调用 extract(),或先检查 has_extracted() |
generated.document.Document 上的属性被标记为 Any 类型,且没有自动完成提示 | 生成的表层放弃静态类型,以获得更小、更简洁的 API | 在调用位置进行类型转换或记录预期类型,或切换到主要的 Document 类以获得更丰富的类型信息 |
FAQ
aspose_pdf.generated 是存根还是占位符?
不是。它是一个真实的、可导入的子包,包含可用的类 —— Document、UnsignedContent、UnsignedContentAbsorber、PdfAValidateOptions 和 PdfAValidationResult —— 它只是比库的主要 API 更小的、独立的表面而已。
为什么 generated.document.Document 与 aspose_pdf.Document 同名?
它们是两个独立定义的类,恰好共享同一个名称。从 aspose_pdf.generated.document 导入会得到兼容版本;而导入 aspose_pdf.Document(或 from aspose_pdf import Document)则会得到主要版本。
我可以将 generated.pdfa.PdfAValidateOptions 传递给 PdfAValidator.process() 吗?
不。PdfAValidator.process() 是主要 API 的一部分,并且期望主要 API 自己的 PdfAValidateOptions 类,该类具有不同的方法签名(add_input(source) 而不是无参数的 add_input())。
UnsignedContentAbsorber.extract() 需要 Document 参数吗?
不。extract() 在生成的兼容层中不接受任何参数;构造吸收器并直接调用 extract()。
API Reference 摘要
| 类 / 方法 | 描述 |
|---|---|
Document.load_from | 从文件路径、字节或流加载文档 |
Document.save | 将文档保存到目标位置 |
Document.optimize | 执行通用优化,可选地压缩图像 |
Document.optimize_resources | 优化共享资源,例如字体和图像 |
Document.encrypt | 用单个密码加密文档 |
Document.change_passwords | 更改文档的密码 |
Document.validate | 返回文档是否结构有效 |
Document.dispose | 释放与文档关联的资源 |
UnsignedContent.add_page / remove_page | 向 unsigned-content 捆绑中添加或删除页面 |
UnsignedContent.add_form_field / remove_form_field | 向 unsigned-content 捆绑中添加或删除表单字段 |
UnsignedContent.add_annotation / remove_annotation | 向 unsigned-content 捆绑中添加或删除注释 |
UnsignedContentAbsorber.extract | 将 unsigned content 提取到 UnsignedContent 实例中 |
UnsignedContentAbsorber.get_extracted | 返回最后提取的 UnsignedContent(如果有的话) |
UnsignedContentAbsorber.has_extracted | 报告是否已执行提取 |
PdfAValidateOptions.add_input | 注册用于验证的输入源 |
PdfAValidateOptions.set_option / get_options | 设置或读取验证选项值 |
PdfAValidationResult.add_error | 添加错误信息并将结果标记为无效 |
PdfAValidationResult.to_dict | 返回验证结果的字典表示形式 |