当前位置:   article > 正文

Python解析PDF文件--PDF文件数据结构_pdf解析

pdf解析

引言

        要解析PDF文件,获取其中的数据,那么了解PDF的数据结构是很有必要的一件事。

PDF文件数据组成

        ①document content文档内容,是在它们之间具有链接的多个对象,形成有向图。这些对象描述了文档的结构(页面,元数据,字体和资源)。

        ②page content页面内容,描述了使用一系列操作符将文本和图形放在一个页面上。

        ③file structure文件结构,包括header(文件头),trailer(文件尾)和交叉引用表,帮助程序找到并读取文件的内容。

文档结构(总图)


        PDF文件可以拆分为上述部分,对于我们来说,主要偏向于Document Catalog部分,这部分包含了PDF中的各种数据,我们可以提取文本数据、增减水印等等。

Document Catalog

        概念:文档目录是主对象图的根对象,可以通过间接引用从中到达所有其他对象。

        主要关注两个部分:Page Tree 和 Document Outline。Page Tree其实就是页面对象集合,Document Outline 这个就是书签,俗称就是目录,与WPS中自动生成的目录相似。

        Python去读PDF文件第三方包介绍:       

        pdfplumber可以对PDF文件进行读取,读取后得到一个 pdfplumber.pdf.PDF 对象,而不是Document对象,里面包含有pages方法,但是没有获取书签的的方法。

        pdfplumber官方文档介绍:pdfplumber/README-CN.md at stable · hbh112233abc/pdfplumber · GitHub

        fitz库,底层是用P有MuPDF来读取来读取PDF文件,可以得到document对象,这个可以通过get_toc()方法来获取PDF文件的书签目录,但是需要注意的是,我尝试对PDF文件进行拆分,拆分后的PDF文件无法获取到对应的书签目录。

        PyMuPDF官方文件介绍:Document - PyMuPDF 1.22.3 documentation

Page Tree

        概念:DF文档中的页面字典汇集了使用这些指令使用的资源(字体,图像和其他外部数据)绘制图形和文本内容的说明。 它还包括页面大小,以及定义裁剪等的许多其他框

        主要关注Content即可,这里面就是PDF页面的展示内容

  1. /F0 36.0 Tf
  2. (Hello, World!) Tj

Tj运算符就是展示的数据,对于大部分的水印其实也是通过Tj来添加

         Python去除水印的第三方库:PyPDF,pdfplumber都可以。

   总结

        简单介绍了一下PDF文件底层的文件结构,可以让我们在对PDF文件进行开发的时候,有一个基本的了解,那些数据是可以获取到的,不同的需求选择合适的第三方库来解决。当然每一个第三方库都有各自的优缺点,所以往往在一个需求中,为了最后拿到的数据准确性更高,选择多个库相互结合可能会更好。

        如果想要更加详细的属性功能可以在参考文件中进一步了解,也许我们无需从零开始构造PDF,但是我们可以了解PDF的实现方式,这有利于在解析PDF文件的时候,知道这部分数据可以在哪里获取。

参考文件:

PDF Explained (译作《PDF 解析》) | PDF-Explained (zxyle.github.io)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/549184
推荐阅读
相关标签
  

闽ICP备14008679号