python 实用程序 | PDF 转 Word
阅读文本大概需要 6 分钟。
现在网上有很多文档是 pdf 格式,虽然这个格式阅读起来很方便,并且里面的内容不会乱掉,但相应的我们就无法修改里面的内容。虽然现在市面上有很多 pdf 转 word 软件,比如 wps,但大多数的软件是要收费的,并且价格不菲。
前些天就有人叫我帮她把 pdf 文档转成 word 的文档。因为 pdf 文档里面的内容有很多,如果全部打印的话,费用还是挺高的。所以她想把里面的内容格式修改下,比如行间距,字间距等等。通过这样的修改,可以把文档的页数减少很多,这样就省下不少的钱。
于是乎我就想到了利用 python 来写个程序,把 pdf 转成 word 文档。秉承着不要重复造轮子的想法,我首先在网上搜索了下。果然已经有人写好了,我们直接拿来用就行。程序一共只有 60 行代码,使用也非常的简单,
程序源代码
import osfrom configparser import ConfigParserfrom io import StringIOfrom io import openfrom concurrent.futures import ProcessPoolExecutorfrom pdfminer.pdfinterp import PDFResourceManagerfrom pdfminer.pdfinterp import process_pdffrom pdfminer.converter import TextConverterfrom pdfminer.layout import LAParamsfrom docx import Documentdef read_from_pdf(file_path):with open(file_path, 'rb') as file:resource_manager = PDFResourceManager()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 contentdef save_text_to_word(content, file_path):doc = Document()for line in content.split('\n'):paragraph = doc.add_paragraph()paragraph.add_run(remove_control_characters(line))doc.save(file_path)def remove_control_characters(content):mpa = dict.fromkeys(range(32))return content.translate(mpa)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')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)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__':main()复制代码
使用方法
首先去 github 上把项目 clone 或下载项目到本地.
github : https://github.com/python-fan/pdf2word
git clone git@github.com:simpleapples/pdf2word.git复制代码
然后进入项目目录,建立虚拟环境,并安装依赖。
pip install -r requirements.txt复制代码
最后修改 config.cfg 文件,指定存放 pdf 和 word 文件的文件夹,以及同时工作的进程数,就可以执行 python main.py。
具体的程序逻辑,可以去查看原文。作者都分析的很详细。
https://zhuanlan.zhihu.com/p/34109582。
本文首发于公众号「痴海」,每天分享 Python 干货,后台回复「1024」,领取 2018 最新 Python 教程。
赞 (0)
