【Python】pdfminer3k模块批量转换本地PDF文件

上一篇文章自己研究了一下如何批量将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 os

def 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文档分析器:PDFParser
            parser = PDFParser(fn)
            # 创建一个PDF文档:PDFDocument
            doc = PDFDocument()
            # 连接分析器与文档
            parser.set_document(doc)
            doc.set_parser(parser)
            # 提供初始化密码,如果无密码,输入空字符串
            doc.initialize("")
            # 检测文档是否提供txt转换,不提供就忽略
            if not doc.is_extractable:
                print("PDFTextExtractionNotAllowed")
            else:
                # 创建PDF资源管理器:PDFResourceManager
                resource = PDFResourceManager()
                # 创建一个PDF参数分析器:LAParams
                laparams = LAParams()
                # 创建聚合器,用于读取文档的对象:PDFPageAggregator
                device = PDFPageAggregator(resource, laparams=laparams)
                # 创建解释器,对文档编码,解释成Python能够识别的格式:PDFPageInterpreter
                interpreter = 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","")

 

  • 0
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值