python 实用程序 | PDF 转 Word

阅读文本大概需要 6 分钟。

现在网上有很多文档是 pdf 格式,虽然这个格式阅读起来很方便,并且里面的内容不会乱掉,但相应的我们就无法修改里面的内容。虽然现在市面上有很多 pdf 转 word 软件,比如 wps,但大多数的软件是要收费的,并且价格不菲。

前些天就有人叫我帮她把 pdf 文档转成 word 的文档。因为 pdf 文档里面的内容有很多,如果全部打印的话,费用还是挺高的。所以她想把里面的内容格式修改下,比如行间距,字间距等等。通过这样的修改,可以把文档的页数减少很多,这样就省下不少的钱。

于是乎我就想到了利用 python 来写个程序,把 pdf 转成 word 文档。秉承着不要重复造轮子的想法,我首先在网上搜索了下。果然已经有人写好了,我们直接拿来用就行。程序一共只有 60 行代码,使用也非常的简单,

程序源代码

  1. import os
  2. from configparser import ConfigParser
  3. from io import StringIO
  4. from io import open
  5. from concurrent.futures import ProcessPoolExecutor
  6. from pdfminer.pdfinterp import PDFResourceManager
  7. from pdfminer.pdfinterp import process_pdf
  8. from pdfminer.converter import TextConverter
  9. from pdfminer.layout import LAParams
  10. from docx import Document
  11. def read_from_pdf(file_path):
  12. with open(file_path, 'rb') as file:
  13. resource_manager = PDFResourceManager()
  14. return_str = StringIO()
  15. lap_params = LAParams()
  16. device = TextConverter(
  17. resource_manager, return_str, laparams=lap_params)
  18. process_pdf(resource_manager, device, file)
  19. device.close()
  20. content = return_str.getvalue()
  21. return_str.close()
  22. return content
  23. def save_text_to_word(content, file_path):
  24. doc = Document()
  25. for line in content.split('\n'):
  26. paragraph = doc.add_paragraph()
  27. paragraph.add_run(remove_control_characters(line))
  28. doc.save(file_path)
  29. def remove_control_characters(content):
  30. mpa = dict.fromkeys(range(32))
  31. return content.translate(mpa)
  32. def pdf_to_word(pdf_file_path, word_file_path):
  33. content = read_from_pdf(pdf_file_path)
  34. save_text_to_word(content, word_file_path)
  35. def main():
  36. config_parser = ConfigParser()
  37. config_parser.read('config.cfg')
  38. config = config_parser['default']
  39. tasks = []
  40. with ProcessPoolExecutor(max_workers=int(config['max_worker'])) as executor:
  41. for file in os.listdir(config['pdf_folder']):
  42. extension_name = os.path.splitext(file)[1]
  43. if extension_name != '.pdf':
  44. continue
  45. file_name = os.path.splitext(file)[0]
  46. pdf_file = config['pdf_folder'] + '/' + file
  47. word_file = config['word_folder'] + '/' + file_name + '.docx'
  48. print('正在处理: ', file)
  49. result = executor.submit(pdf_to_word, pdf_file, word_file)
  50. tasks.append(result)
  51. while True:
  52. exit_flag = True
  53. for task in tasks:
  54. if not task.done():
  55. exit_flag = False
  56. if exit_flag:
  57. print('完成')
  58. exit(0)
  59. if __name__ == '__main__':
  60. main()
  61. 复制代码

使用方法

首先去 github 上把项目 clone 或下载项目到本地.

github : https://github.com/python-fan/pdf2word

  1. git clone git@github.com:simpleapples/pdf2word.git
  2. 复制代码

然后进入项目目录,建立虚拟环境,并安装依赖。

  1. pip install -r requirements.txt
  2. 复制代码

最后修改 config.cfg 文件,指定存放 pdf 和 word 文件的文件夹,以及同时工作的进程数,就可以执行 python main.py。

具体的程序逻辑,可以去查看原文。作者都分析的很详细。

https://zhuanlan.zhihu.com/p/34109582。

本文首发于公众号「痴海」,每天分享 Python 干货,后台回复「1024」,领取 2018 最新 Python 教程。

(0)

相关推荐