美文网首页
PDF的拆分、合并和信息提取

PDF的拆分、合并和信息提取

作者: 乔木方思 | 来源:发表于2020-04-23 21:38 被阅读0次

最近有点丧。那就学习吧,都会好起来的。前几天学习了如何拆分pdf文件,思路想去还是对python处理pdf做个系统的梳理。即用python实现pdf文件的信息提取、拆分和合并。

工作中经常会用到pdf,有时候需对pdf文件进行一些处理却让我们束手无策,抓耳挠腮。

比如pdf文件的信息提取、拆分和合并。

目前,关于pdf文件的信息提取、拆分和合并的需求,有哪些解决办法呢?我大致总结了以下途径:

1 官方PDF阅读器

这些需求,官方PDF阅读器大致都能实现。不过许多功能模块都是付费项目。比如合并pdf。另外不能支持批量操作pdf文件。

2 网络工具

网络上有很多关于pdf处理的小工具,也能解决很多我们对于pdf的许多需求。比如pdf信息提取等,网上就有很多工具可以使用。

不过这些工具虽然好用,我却不愿使用。主要基于3个原因:

(1) 我穷。这些网络工具基本上都是要收费的。我没钱。

(2) 个人隐私泄露。大部分软件或工具都需要用户注册,绑定手机号、邮箱或者社交软件。有可能会泄露个人信息。

(3) 文件隐私泄露。网络工具的基本原理大致是用户上传pdf文件给服务器,服务器处理数据,服务器返回处理结果给用户。这中间服务器有没有偷偷备份用户上传的数据也不得而知。如果是工作中需要保密的PDF文件,也有泄露文件隐私的风险。

3 python实现pdf的信息提取、拆分和合并

没有满意的解决办法,工作还是要继续,怎么办?

不如换个思路。那我们就自己动手实现一个解决办法吧。

Python第三方库里有2个处理PDF的库pdfplumber和PyPDF2,可以用它来实现pdf文件的信息提取、拆分和合并的相关需求。

这几个需求可以分别封装到一个函数里,方便以后直接调用。相应的功能函数又可以封装到一个模块里,这个模块文件我命名为mypdf.py。mypdf模块主要实现以下3个需求。

(1)  pdf的拆分

定义一个实现拆分pdf的功能函数split_pdf()。给定一个需求:实现按偶数页或奇数页批量拆分多个pdf文件

 对于该函数的设计,我认为重点是参数的确定。每个人关注的需求点不一样,参数类型或数量也会有一些不同。我主要从我常用需求出发,给split_pdf()确定2个参数。

 输入pdf文件名:标记为infn。参数类型是一个序列,可以是一个元组或列表。这样能保证函数可以批量处理pdf文件,而不是只能处理单个文件。

拆分规则:标记为R。参数类型是可以是一个函数或常量。可以提供常用的分割规则。比如按奇数页分割、按偶数页分割或者其他自定义分割规则。

必须指出的是,与文件路径相关的python标准库是os,为了简化本文暂不涉及os库。故该函数内部会有定义好的文件路径。函数读取pdf的路径统一在D:\before_pdf文件夹下。函数保存pdf的路径统一在D:\after_pdf文件夹下。本文中R为0时,获取pdf偶数页;R为1时,获取pdf奇数页。

 原始pdf文件如图:

运行代码结果如下图,表明已成功实现按偶数页或奇数页批量拆分pdf文件的功能。

 (2) pdf的合分

定义一个实现合并pdf的功能函数merge_pdf()。给定一个需求:分别将(1)中的单页a和单页b合成为一个完整的a.pdf和b.pdf文件。

对于该函数的设计,其实和分割函数split_pdf()类似。合并与拆分本身就是互逆操作。我就不过多赘述。为了简化,函数默认合并指定文件夹路径下的所有文件,只用传入合并后pdf文件名参数。

运行函数前:有a,b文件的所有单页。

运行函数后,成功将a,b单页文件合并成完整的a.pdf和b.pdf文件。

(3)pdf的信息提取。

Pdf文件主要有3种信息形式。文本信息、表格信息和图像信息。图片信息获取暂不讨论。对于这pdf信息提取,可以定义一个获取信息函数extract_data(),通过传入一个参数R,来控制执行获取文本或获取表格。也可以针对需要获取信息的形式,分别定义获取文本信息的函数get_txt()、获取表格信息函数get_table()、获取图片信息函数get_picture()。

mypdf.py部分代码如图,需要完整代码的小伙伴可以关注微信公众号《乔木方思》,后台回复mypdf获取,也可以添加作者微信交流python,一起学习。

 

 

相关文章

网友评论

      本文标题:PDF的拆分、合并和信息提取

      本文链接:https://www.haomeiwen.com/subject/uubzihtx.html