上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件,但是有时候我们也想要将pdf文件转换为word或者txt文件,方便复制和处理。本文主要通过调用pdfminer3k模块进行处理。
说明:本文是在Windows10下使用python最新的3.6版本虚拟环境
1. pdfminer3k相关链接:
GitHub:https://github.com/jaepil/pdfminer3k
PyPI:https://pypi.org/project/pdfminer3k/
2. 解析pdf文件用到的类:
PDFParser:PDF文档分析器:从一个文件中获取数据
PDFDocument:PDF文档对象:保存获取的数据,和PDFParser是相互关联的
PDFResourceManager:PDF资源管理器:用于存储共享资源,如字体或图像。
LAParams:PDF参数分析器:分析pdf文件参数
PDFPageAggregator:PDF聚合器:读取获取的文档对象
PDFPageInterpreter:PDF文档解析器:处理页面内容变成Python可以解析
3.分析思路:
整体思路为:构造文档对象,解析文档对象,提取所需内容
4. 具体的代码:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:pdfConvertor.py
#日期:2018-04-29
#备注:通过调用PDF解析器:pdfminer3k,批量将PDF文件转换为word或者txt文件,先要在python环境安装pdfminer3k在python运行环境通过命令行方式运行:pip3 install pdfminer3k
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# F:\python_env\PaChong_env
# -*- coding: utf-8 -*-from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
import osdef pdf_to_word(folder,password):# 获取指定目录下面的所有文件files = os.listdir(folder)# 获取pdf类型的文件放到一个列表里面pdfFiles = [f for f in files if f.endswith(".pdf")]for pdfFile in pdfFiles:# 将pdf文件放到指定的路径下面pdfPath = os.path.join(folder, pdfFile)# 设置将要转换后存放word文件的路径wdPath = pdfPath# 判断是否已经存在对应的word文件,如果不存在就加入到存放word的路径内if wdPath[-3:] != 'doc':wdPath = wdPath + ".doc"fn = open(pdfPath, 'rb')# 创建一个PDF文档分析器:PDFParserparser = PDFParser(fn)# 创建一个PDF文档:PDFDocumentdoc = PDFDocument()# 连接分析器与文档parser.set_document(doc)doc.set_parser(parser)# 提供初始化密码,如果无密码,输入空字符串doc.initialize("")# 检测文档是否提供txt转换,不提供就忽略if not doc.is_extractable:print("PDFTextExtractionNotAllowed")else:# 创建PDF资源管理器:PDFResourceManagerresource = PDFResourceManager()# 创建一个PDF参数分析器:LAParamslaparams = LAParams()# 创建聚合器,用于读取文档的对象:PDFPageAggregatordevice = PDFPageAggregator(resource, laparams=laparams)# 创建解释器,对文档编码,解释成Python能够识别的格式:PDFPageInterpreterinterpreter = PDFPageInterpreter(resource, device)# doc.get_pages() 获取page列表for page in doc.get_pages():# 利用解释器的process_page()方法解析读取单独页数interpreter.process_page(page)# 这里layout是一个LTPage对象,里面存放着这个page解析出的各种对象,# 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal等等,想要获取文本就获得对象的text属性,# 使用聚合器get_result()方法获取页面内容layout = device.get_result()for out in layout:if (isinstance(out, LTTextBoxHorizontal)):print(out.get_text())with open(wdPath, 'a',encoding='utf-8') as f:f.write(out.get_text() + '\n')if __name__ == '__main__':pdf_to_word("F:\PythonProject\Pacong\docs","")