在日常工作或学习中, 经常会遇到这样的无奈:
小任, 你把这个 PDF 中的文件码出来发我
艹, 倒霉, 2M 的 PDF12 点也完不了啊!
很多时候在学习时发现许多文档都是 PDF 格式, PDF 格式却不利于学习使用, 因此需要将 PDF 转换为 Word 文件, 但或许你从网上下载了很多软件, 但只能转换前五页 (如 WPS 等), 要不就是需要收费, 那有没有免费的转换软件呢?
so, 我们给各位带来了一个免费简单快速的方法, 手把手教你用 Python 批量处理 PDF 格式文件, 获取自己想要的内容, 存为 word 形式
在实现 PDF 转 Word 功能之前, 我们需要一个 python 的编写和运行环境, 同时安装好相关的依赖包 对于 python 环境, 我们推荐使用 PyCharm 在本地电脑环境, anaconda 提供了非常便利的安装和部署
PDF 转 Word 功能所需的依赖包如下:
PDFParser(文档分析器)
PDFDocument(文档对象)
PDFResourceManager(资源管理器)
PDFPageInterpreter(解释器)
PDFPageAggregator(聚合器)
LAParams(参数分析器)
前期准备工作
说明: 本文是在 Windows7 下使用 python 最新的 3.6 版本
1. 安装 pdfminer3k 模块
安装 anaconda 后, 直接可以通过 pip 安装
2. 若安装不成功, 可以试试下面方法
首先下载 pdfminer3k:https://pypi.python.org/pypi/pdfminer3k; 然后安装 pdfminer, 将下载好的 pdfminer3k 解压到 D: 或其他合适的盘符, 通过 win+r 打开运行窗口, 输入 cmd; 输入 D: 切换到 D 盘, cd pdfminer3k(pdf 解压的文件夹), 输入 setup.py install 安装软件
最终显示 Finished, 则代表成功
代码实操
1. 导入相关包
- from pdfminer.pdfparser import PDFParser, PDFDocument
- from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
- from pdfminer.layout import LAParams
- from pdfminer.converter import PDFPageAggregator
整体思路为: 构造文档对象, 解析文档对象, 提取所需内容
构造文档对象
构造解释器
2. 导入需要解析的 PDF 文件
将所需解析的文件与执行代码放到同一个目录下, 如图:
test.pdf 内容
3. 具体代码如下:
- from pdfminer.pdfparser import PDFParser, PDFDocument
- from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
- from pdfminer.layout import LAParams
- from pdfminer.converter import PDFPageAggregator
- from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
- def parse():
- #rb 以二进制读模式打开本地 pdf 文件
- fn = open('test.pdf','rb')
- #创建一个 pdf 文档分析器
- parser = PDFParser()
- #创建一个 PDF 文档
- doc = PDFDocument()
- #连接分析器 与文档对象
- parser.set_document()
- doc.set_parser()
- # 提供初始化密码 doc.initialize("lianxipython")
- # 如果没有密码 就创建一个空的字符串
- doc.initialize("")
- # 检测文档是否提供 txt 转换, 不提供就忽略
- if not doc.is_extractable:
- raise PDFTextExtractionNotAllowed
- else:
- #创建 PDf 资源管理器
- resource = PDFResourceManager()
- #创建一个 PDF 参数分析器
- laparams = LAParams()
- #创建聚合器, 用于读取文档的对象
- device = PDFPageAggregator(resource,laparams=laparams)
- #创建解释器, 对文档编码, 解释成 Python 能够识别的格式
- interpreter = PDFPageInterpreter(resource,device)
- # 循环遍历列表, 每次处理一页的内容
- # doc.get_pages() 获取 page 列表
- for page in doc.get_pages():
- #利用解释器的 process_page() 方法解析读取单独页数
- interpreter.process_page(page)
- #使用聚合器 get_result() 方法获取内容
- layout = device.get_result()
- #这里 layout 是一个 LTPage 对象, 里面存放着这个 page 解析出的各种对象
- for out in layout:
- #判断是否含有 get_text() 方法, 获取我们想要的文字
- if hasattr(out,"get_text"):
- print(out.get_text())
- with open('test.txt','a') as f:
- f.write(out.get_text()+'\n')
- if __name__ == '__main__':
- parse()
最终得到的 test.txt 结果如下:
结束
对于 Python 批量 PDF 转 Word 的操作介绍就到此, 本文仅仅作为一种运用库展示代码编写过程, 具体技术还需要有兴趣的朋友, 与我一起讨论专研, 互相学习进步
来源: https://yq.aliyun.com/articles/487610