第一种方法:多线程处理
优点:可以同时处理多个文件,速度非常快。
缺点:只能识别文字信息,对于图片等非文本内容无法识别;另外,pdf文档中避免出现 ‘\n’ 等转义字符,否则可能会出现一些识别歧义。
使用情景:文件量大,且只对文本信息有要求的情况

import os
from configparser import ConfigParser
from io import StringIO
from io import open
from concurrent.futures import ProcessPoolExecutor
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from docx import Document
from docx.oxml.ns import qn
from docx.shared import Pt# 将pdf解析成文本文件
def read_from_pdf(file_path):with open(file_path, 'rb') as file:resource_manager = PDFResourceManager()    # pdf资源管理器 管理共享资源return_str = StringIO()  # 类文本文件对象lap_params = LAParams()  # 参数分析器device = TextConverter(resource_manager, return_str, laparams=lap_params)process_pdf(resource_manager, device, file)device.close() content = return_str.getvalue()return_str.close()return content# 过滤掉控制字符
def remove_control_characters(content):mpa = dict.fromkeys(range(13))return content.translate(mpa)# 将文本保存到word文档中
def save_text_to_word(content, file_path):doc = Document()for line in content.split('\n'):paragraph = doc.add_paragraph()text = paragraph.add_run(remove_control_characters(line))text.font.size = Pt(15)text.font.name = 'Times New Roman'  # 控制是西文时的字体text.element.rPr.rFonts.set(qn('w:eastAsia'), u'楷体')doc.save(file_path)# pdf转word的整个过程打包
def pdf_to_word(pdf_file_path, word_file_path):content = read_from_pdf(pdf_file_path)save_text_to_word(content, word_file_path)def main():config_parser = ConfigParser()config_parser.read('config.cfg', encoding='utf-8')config = config_parser['default']tasks = []with ProcessPoolExecutor(max_workers=int(config['max_worker'])) as executor:    # 为了多任务同时进行for file in os.listdir(config['pdf_folder']):extension_name = os.path.splitext(file)[1]if extension_name != '.pdf':continuefile_name = os.path.splitext(file)[0]pdf_file = config['pdf_folder'] + '/' + fileword_file = config['word_folder'] + '/' + file_name + '.docx'print('正在处理:', file)result = executor.submit(pdf_to_word, pdf_file, word_file)   #  转到pdf_to_word函数tasks.append(result)while True:exit_flag = Truefor task in tasks:if not task.done():exit_flag = Falseif exit_flag:print('完成')exit(0)if __name__ == '__main__':if __name__ == '__main__':main()

这里用到config.cfg(配置文件)。在当前目录建立一个config.cfg文件,将一些重要的参数信息放在这个文件里面。如果觉得麻烦其实也可以直接写在代码中。
config.cfg

[default]
pdf_folder=/Python_ALL/Python_File/3_Interest/testfile
word_folder=/Python_ALL/Python_File/3_Interest/testfile
max_worker=3

第二种方法:使用pdf2docx库来完成
优点:使用包装好的库来进行处理,可以较完美地处理文本和图片等不同内容的信息,还原度较高。
缺点:处理速度较慢,对pdf文档中一页一页进行识别。
适用场景:文件量少,对pdf文档整体信息都有需求的情况。

from pdf2docx import Converter
from configparser import ConfigParser
import osdef main():config_parser = ConfigParser()config_parser.read('config.cfg', encoding='utf-8')config = config_parser['default']for file in os.listdir(config['pdf_folder']):extension_name = os.path.splitext(file)[1]if extension_name != '.pdf':continuefile_name = os.path.splitext(file)[0]pdf_file = config['pdf_folder'] + '/' + fileword_file = config['word_folder'] + '/' + file_name + '.docx'cv = Converter(pdf_file)cv.convert(word_file)cv.close()if __name__=='__main__':main()

python pdf转word的两种方法相关推荐

  1. python文字教程-Python在图片中添加文字的两种方法

    本文主要介绍的是利用Python在图片中添加文字的两种方法,下面分享处理供大家参考学习,下来要看看吧 一.使用OpenCV 在图片中添加文字看上去很简单,但是如果是利用OpenCV来做却很麻烦.Ope ...

  2. python自带的shell是什么-python中执行shell的两种方法总结

    一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...

  3. python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...

    今天为大家带来的内容是:干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏) 文章主要介绍了python爬虫模拟浏览器的两种方法,结合实例形式分析了Python爬虫模拟浏览器的两种常见操 ...

  4. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  5. python 手动安装包的两种方法

    python 手动安装包的两种方法 对于 .tar.gz 的包来说 解压缩文件 aaaxxxx-1.0.1.tar.gz 移动到压缩文件所在目录 使用tar -zxvf aaaxxxx-1.0.1.t ...

  6. python list列表排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  7. ​CAD图纸怎么转换成PDF格式?这两种方法快速转换

    怎么把CAD图纸转换成PDF格式呢?大家在使用CAD绘图工具制作CAD图纸的时候,在将图纸绘制好后为了能够方便发送和浏览,会选择把图纸转换成PDF文件格式来保存发送,这样就不会出现文件打不开的现象.但 ...

  8. Java调用打印机打印PDF文档的两种方法

    最近,由于项目需求,需要增加系统调用打印机打印PDF文档功能.以前在Asp.Net项目中做过套打,但是现在的需求直接文档打印,下面是实现代码调用打印机的两种方法. 1.Java Print Servi ...

  9. OFD文件怎么转换成PDF格式?这两种方法轻松实现转换

    怎么把OFD文件转换成PDF格式呢?OFD文件大家可能不太熟悉,使用的也不多,它其实也是一种归档保存的一种文件格式,在很多方面与PDF文件有些相似,但是打开它需要使用到相关的OFD阅读器,这个就会让很 ...

最新文章

  1. 精通python要多久-小白到精通python要多久
  2. Go 语言读写 Excel
  3. 基于Boost::beast模块的无栈协程WebSocket服务器
  4. 自定义ViewGroup实现仿微信图片选择器
  5. node.js——麻将算法(七)简易版麻将出牌AI2.0
  6. Java图片压缩 BufferedImage Linux 下代码阻塞不工作
  7. 开源 -- 机器学习相关报道
  8. SAS编程基础 - 数据获取与数据集操作(1)
  9. 虚拟机网卡和linux bridge上tap设备的关系
  10. stm32f103r6最小系统原理图_stm32f103c8t6封装及最小系统原理图
  11. HPU算法协会公开课第一期:【基础算法1】(STL 自定义sort 前缀和差分)
  12. SyntaxError:Non-UTF-8 code starting with ‘\xb6‘ in file E:/...py on line 16, but no encoding declare
  13. 第六届世界互联网大会乌镇峰会简评
  14. 分享一款CHROME极速下载管理器插件
  15. AI会让AI工程师失业吗?
  16. 微信开发者.js.json_非中国开发者如何利用微信的1.1B每月活跃用户
  17. 移动网络运营商显示无服务器,无线路由器忽然拨不上号,显示网络运营商远端无响应怎么处理...
  18. 十二核能让联发科引爆核弹战吗?
  19. 【流畅的Python学习笔记】2023.4.29
  20. 华为交换机的配置大全

热门文章

  1. 以太网模块支持SCADA 软件通过三菱以太网协议连接
  2. bjui框架中用icheck实现单选全选效果
  3. 这个仰望星空的地方,藏着马化腾的梦想
  4. 手机密码用计算机怎么解锁,手机忘记开机密码怎么办,有这四招1分钟就搞定...
  5. 储能系统双向DCDC变换器蓄电池充放电仿真模型有buck模式 储能系统双向
  6. 以患者到医院就诊为背景,使用列表对象(ArrayList)和泛型机制实现就诊排队叫号系统
  7. 用循环不停地输出2的倍数
  8. 浩顺考勤机二次开发(第二版,附实测可用的demo)
  9. iphone计算机如何打字速度,如何使用iphone打字速度倍增 4个技能不能错过
  10. 量化分析师的Python日记【第4天:一大波金融Library来袭之scipy篇】