使用生成的兼容性 API

使用生成的兼容性 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.Document API。

常见问题

问题原因修复
错误的 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() 返回 Noneextract() 从未在该 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返回验证结果的字典表示形式

另请参阅

 中文