Python 办公自动化之 PDF 的详细操作

网站建设4年前发布
82 0 0

今天的具体内容将会从以下几个小节展开:,上述操作比较常用,也可以解决较多的办公内容,下面直接开始本节内容:,Python 操作 PDF 会用到两个库,分别是:PyPDF2 和 pdfplumber。,其中 PyPDF2 可以更好的读取、写入、分割、合并PDF文件,而 pdfplumber 可以更好的读取 PDF 文件中内容和提取 PDF 中的表格。,对应的官网分别是:,由于这两个库都不是 Python 的标准库,所以在使用之前都需要单独安装。,win+r 后输入 cmd 打开 command 窗口,依次输入如下命令进行安装:,安装完成后显示 success 则表示安装成功。,将一个完整的 PDF 拆分成几个小的 PDF,因为主要涉及到 PDF 整体的操作,所以本小节需要用到 PyPDF2 这个库。,拆分的大概思路如下:,需要注意的是,在拆分的过程中,可以手动设置间隔,例如:每5页保存成一个小的 PDF 文件。,拆分的代码如下:,以“易方达中小盘混合型证券投资基金2020年中期报告”为例,整个 PDF 文件一共 46 页,每5页为间隔,最终生成了10个小的 PDF 文件。,比起拆分来,合并的思路更加简单:,对应的代码比较简单:,涉及到具体的 PDF 内容 操作,本小节需要用到 pdfplumber 这个库。,在进行文字提取的时候,主要用到 extract_text 这个函数。,具体代码如下:,可以看到,直接通过下标即可定位到相应的页码,从而通过 extract_text 函数提取该也的所有文字。,而如果想要提取所有页的文字,只需要改成:,例如,提取“易方达中小盘混合型证券投资基金2020年中期报告” 第一页的内容时,源文件是这样的:,运行代码后提取出来是这样的:,同样的,本节是对具体内容的操作,所以也需要用到 pdfplumber 这个库。,和提取文字十分类似的是,提取表格内容只是将 extract_text 函数换成了 extract_table 函数。,对应的代码如下:,上面代码可以获取到第 18 页的第一个表格内容,并且将其保存为 csv 文件存在本地。,因为读取的表格会被存成二维数组,而多个二维数组就组成一个三维数组。,遍历这个三位数组,就可以得到该页的每一个表格数据,对应的将 extract_table 函数 改成 extract_tables 即可。,具体代码如下:,以“易方达中小盘混合型证券投资基金2020年中期报告” 第 xx 页的第一个表格为例:,源文件中的表格是这样的:,提取并存入 excel 之后的表格是这样的:,提取 PDF 中的图片和将 PDF 转存为图片是不一样的(下一小节),需要区分开。,提取图片:顾名思义,就是将内容中的图片都提取出来;,转存为图片:则是将每一页的 PDF 内容存成一页一页的图片,下一小节会详细说明,转存为图片中,需要用到一个模块叫 fitz,fitz 的最新版 1.18.13,非最新版的在部分函数名称上存在差异,代码中会标记出来,使用 fitz 需要先安装 PyMuPDF 模块,安装方式如下:,提取图片的整体逻辑如下:,实现的具体代码如下:,以本节示例的“易方达中小盘混合型证券投资基金2020年中期报告” 中的图片为例,代码运行后提取的图片如下:,这个结果和文档中的共 1 张图片的结果符合。,转换为照片比较简单,就是将一页页的 PDF 转换为一张张的图片。大致过程如下:,首先需要安装对应的库,最新的 pdf2image 库版本应该是 1.14.0。,它的 github地址 为:https://github.com/Belval/pdf2image ,感兴趣的可以自行了解。,安装方式如下:,对于不同的平台,需要安装相应的组件,这里以 windows 平台和 mac 平台为例:,Windows 平台,对于 windows 用户需要安装 poppler for Windows,安装链接是:http://blog.alivate.com.au/poppler-windows/,另外,还需要添加环境变量, 将 bin 文件夹的路径添加到环境变量 PATH 中。,Mac,对于 mac 用户,需要安装 poppler for Mac,具体可以参考这个链接:http://macappstore.org/poppler/,详细代码如下:,以本节示例的“易方达中小盘混合型证券投资基金2020年中期报告” 中的图片为例,该文档共 46 页,保存后的 PDF 照片如下:,一共 46 张图片,添加水印后的效果如下:,在制作水印的时候,可以自定义水印内容、透明度、斜度、字间宽度等等,可操作性比较好。,前面专门写过一篇文章,讲的特别详细:Python快速给PDF文件添加自定义水印。,你可能在打开部分 PDF 文件的时候,会弹出下面这个界面:,这种就是 PDF 文件被加密了,在打开的时候需要相应的密码才行。,本节所提到的也只是基于 PDF 文档的加密解密,而不是所谓的 PDF 密码破解。,在对 PDF 文件加密需要使用 encrypt 函数,对应的加密代码也比较简单:,代码执行成功后再次打开 PDF 文件则需要输入密码才行。,根据这个思路,破解 PDF 也可以通过暴力求解实现,例如:通过本地密码本一个个去尝试,或者根据数字+字母的密码形式循环尝试,最终成功打开的密码就是破解密码。,另外,针对已经加密的 PDF 文件,也可以使用 decrypt 函数进行解密操作。,解密代码如下:,解密完成后的 PDF 文档打开后不再需要输入密码,如需加密可再次执行加密代码。,以上就是 Python 操作 PDF 的全部内容,文中贴出的代码都已经测试过,可正常运行。

© 版权声明

相关文章