附录 2:嵌入文件注意事项#
本章提供了关于 PyMuPDF 中嵌入文件支持的一些背景信息。
概述#
从版本 1.4 开始,PDF 支持将任意文件作为 PDF 文档文件的一部分进行嵌入(“嵌入文件流”)(参见《Adobe PDF 参考手册》第 103 页“7.11.4 嵌入文件流”一章)。
在许多方面,这与 ZIP 文件或 MS Windows 中的 OLE 技术概念类似。然而,PDF 嵌入文件**不**支持像 ZIP 格式那样的目录结构。一个嵌入文件自身也可以包含嵌入文件。
此概念的优势在于嵌入文件受到 PDF 的保护,受益于其权限/密码保护和完整性方面:PDF 可能引用甚至依赖的所有数据都可以捆绑到其中,从而形成一个单一、一致的信息单元。
除了嵌入文件外,PDF 1.7 还增加了对*集合*的支持。这是一种存储和呈现嵌入文件元信息(即任意和可扩展属性)的高级方式。
MuPDF 支持#
MuPDF 在 1.11 版本中首次添加了对集合(portfolio)和 */EmbeddedFiles* 的支持后,在 1.15 版本中又取消了这一支持。
因此,命令行工具 *mutool* 不再提供对嵌入文件的访问。
PyMuPDF 在 1.11.0 版本中对此做出响应,实现了 */EmbeddedFiles* API,因此从 1.16.0 版本开始被迫改变策略(我们从未发布兼容 MuPDF v1.15.x 的 PyMuPDF)。
我们现在维护自己的代码库来支持嵌入文件。此代码仅使用了 MuPDF 的基本字典和数组函数。
PyMuPDF 支持#
我们继续支持嵌入文件的完整旧 API – 仅进行了一些微小的、表面上的改动。
甚至还有一个新函数 Document.embfile_names()
,它提供 PDF 中注册的所有嵌入数据名称的列表。