pypdf 如何解析 PDF 文件¶
pypdf 使用 PdfReader
来解析 PDF 文件。方法 PdfReader.read
展示了解析的基本结构:
查找并读取交叉引用表 (xref) 和尾部 (trailer):
交叉引用表 (xref table) 是一个包含字节偏移量的表,用于指示文件中对象的位置。尾部 (trailer) 提供了附加信息,例如根对象 (Catalog) 和包含元数据的 Info 对象。解析对象:
在定位到 xref 表和尾部之后,pypdf 继续解析 PDF 中的对象。PDF 中的对象可以是多种类型,例如字典 (dictionaries)、数组 (arrays)、流 (streams) 和简单数据类型(如整数、字符串)。pypdf 解析这些对象并将其存储在PdfReader.resolved_objects
中,并通过cache_indirect_object
进行填充。解码内容流:
PDF 的内容通常存储在内容流中,这些流是 PDF 操作符和操作数的序列。pypdf 通过应用流字典中指定的过滤器(例如FlateDecode
、LZWDecode
)来解码这些内容流。仅当对象通过PdfReader.get_object
请求时,才会进行此解码,该方法使用PdfReader._get_object_from_stream
方法。
参考资料¶
7.5 文件结构
7.5.4 交叉引用表
7.8 内容流和资源