使用Python将PDF转化为word

60行Python代码,实现多线程PDF转Word分解任务把PDF转为Word,分几步?两步,第一步读取PDF文件,第二步写入Word文件。

是的,就是这么简单,借助Python第三方包,可以轻松实现上面两个过程,我们要用到pdfminer3kpython-docx这两个包读取PDFfrom pdfminer.pdfinterp import PDFResourceManagerfrom pdfminer.pdfinterp import process_pdffrom pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsresource_manager = PDFResourceManager()return_str = StringIO()lap_params = LAParams()device = TextConverter(resource_manager, return_str, laparams=lap_params)process_pdf(resource_manager, device, file)  # file是使用open方法打开的PDF文件句柄device.close()# 此处content就是转换为文字的PDF内容content = return_str.getvalue()content变量存储的就是我们从PDF文件中读取出的文字内容,可以看到,使用pdfminer3k可以轻松完成这个任务。接下来我们需要把文字内容写入成一个word文件。写入Wordfrom docx import Documentdoc = Document()for line in content.split('\n'):paragraph = doc.add_paragraph()paragraph.add_run(remove_control_characters(line))doc.save(file_path)content是我们前面读取出的文字内容,由于是讲整个PDF读成一个字符串,所以需要使用split方法将每一行分隔开,然后按行写入word,否则所有的文字会在同一行。同时这段代码使用了一个remove_control_characters函数,这个函数是需要自己实现的,目的是移除控制字符(换行符、制表符、转义符等),因为python-docx是不支持控制字符写入的。def remove_control_characters(content):mpa = dict.fromkeys(range(32))return content.translate(mpa)控制字符就是ASCII码在32以下的,所以我们使用str的translate方法,把32以下的字符移除就可以。用是能用,但是太慢了!如果我们用上面代码去转换100个PDF文件,就会发现速度慢到难以接受,每个PDF都需要花很长时间才能转换好,怎么办?别急,接下来我们引入多线程,同时转换多个PDF,可以有效加快转换速度。import osfrom concurrent.futures import ProcessPoolExecutorwith 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)tasks.append(result)while True:exit_flag = Truefor task in tasks:if not task.done():exit_flag = Falseif exit_flag:print('完成')exit(0)代码中config是包含存储PDF文件夹地址和word文件夹地址的字典,使用Python标准库中的concurrent包,实现多进程,pdf_to_word方法是对上面读取PDF和写入word逻辑的封装。后面的while循环是查询任务是否进行完成。效果到这里,我们已经实现了多线程批量转换PDF为word文档。拿谋篇著名文章来试验一下,效果如图(左侧是转换后的word,右侧是PDF):不想写代码,只想用本文介绍的所有代码,已经打包成了一个独立可运行的项目,存放在github,如果不想自己写代码,可以直接clone或下载github项目运行。项目地址如下(记得点star)GitHub - qinweiming/pdf2word: 60行代码实现多线程PDF转Wordhttps://zhuanlan.zhihu.com/p/34109582

(0)

相关推荐

  • 两行代码读取pdf、docx文件

    最近运行课件代码,发现pdf文件读取部分的函数失效.这里找到读取pdf文件的可运行代码,为了方便后续学习使用,我已将pdf和docx读取方法封装成pdfdocx包. pdfdocx 只有简单的两个读取 ...

  • 用 Python 写了一个 PDF 转换器,以后再也不用花钱转了

    作者:不正经的kimol君 https://blog.csdn.net/kimol_justdo/article/details/109267805 前言 想必小伙伴都经历过,当你想要把PDF转为WO ...

  • 用 Python 将 html 转为 pdf、word

    来源:Python 技术「ID: pythonall」 在日常中有时需将 html 文件转换为 pdf.word 文件.网上免费的大多数不支持多个文件转换的情况,而且在转换几个后就开始收费了. 转 p ...

  • 高昂收费?你距离免费PDF编辑工具只差20行Python代码

    PDF(Portable Document Format,可携带文档格式)是一种以PostScript语言图像模型为基础,在不同电脑.打印机上都能够保持固定的格式.正是因为它这一特性,让PDF备受欢迎 ...

  • 将有大量表格图片的Word/PDF识别成文本Word(Python调用阿里云读光接口)

    将有大量表格图片的word转换成文本格式(依然是word格式),暂且记录下,一时间写的比较乱,有空了再好好梳理和调整. 主要是通过"阿里云读光PDF识别"(官方网址)的API实现的 ...

  • 第107天: Python 解析 PDF

    上次给大家介绍了 Python 如何操作 Word 和 Excel ,而今天想为大家再介绍下,用 Python 如何解析 PDF ,PDF 格式不像前面两个那么规范,从它的表现来看,它更像是一张图片, ...

  • 用python提取PDF表格内容保存到excel

    一 提取pdf方法介绍 任务是用python提取PDF里的表格文件到excel里面去.做为一个 学了一个周python的人来说当然像尝试一下看能不能做到,事实证明是可以的只是可能代码有点烂...... ...

  • python读取pdf中的文本

    python处理pdf也是常用的技术了,对于python3来说,pdfminer3k是一个非常好的工具. pip install pdfminer3k 首先,为了满足大部分人的需求,我先给一个通用一点 ...

  • Python 解决相对路径问题:“No such file or directory”

    如果你取相对路径不是在主文件里,可能就会有相对路径问题:"No such file or directory". 因为 python 的相对路径,相对的都是主文件. 如下目录结构: ...

  • 【Python 库】解析PDF文本及表格

    pdf 是个异常坑爹的东西,有很多处理 pdf 的库,但是没有完美的. 一.pdfminer3k pdfminer3k 是 pdfminer 的 python3 版本,主要用于读取 pdf 中的文本. ...

  • 再见PDF提取收费!我用100行Python代码搞定!

    第471篇原创干货,第一时间送达 大家在日常的工作和学习过程中,都少不了与PDF文件打交道,很多的小伙伴都面临着将PDF文件中的文字.图片和表格数据提取出来的问题.能够对PDF文件中的文字.表格等数据 ...