用Python开发一个PDF转Word的小工具

877 阅读3分钟

作者:江夏

| 知乎:www.zhihu.com/people/1024…

| GitHub:github.com/JiangXia-10…

| CSDN:blog.csdn.net/qq_4115394…

| 掘金:juejin.cn/user/651387…

| 公众号:1024笔记

本文一共1469字,阅读时长9分钟

PDF格式的文档在我们使用的时候比较方便,因为不会因为编辑器和其他原因导致格式不正常,但是有时候我们又需要对这个文档进行修改,这时候我们就需要将PDF解析成word格式的。网上有很多的格式转换的网站和软件,但是大多数只能免费使用几次,后面再使用的话就要升级vip了,那如果我们自己写一个pdf转换的程序,是不是很方便又很niuability呢?

这篇文章就说说如何使用python来写一个pdf转换word的小工具。

这里我使用的系统是win10系统,python版本是3.7:

图片 使用的依赖包是pdfminer3k,可以通过下面的命令进行安装:

pip install pdfminer3k

具体代码如下,每行代码的功能都写在了注释中,就不再一一进行赘述:

# author:江夏
# date: 2020-10-31
# description:python将pdf文档转换为word格式
 
import sys 
import importlib 
importlib.reload(sys) 
from pdfminer.pdfparser import PDFParser,PDFDocument 
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter 
from pdfminer.converter import PDFPageAggregator 
from pdfminer.layout import * 
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed 
 
# 首先定义一个解析pdf文档的函数 
# 解析pdf文件,获取文件中包含的各种对象 
def parse(pdf_path):
  # 这里以二进制读模式打开pdf文档  
  fp = open(pdf_path, 'rb') 
  # 接着用文件对象来创建一个pdf文档解析
  parser = PDFParser(fp) 
  # 创建一个PDF文档 
  doc = PDFDocument() 
  # 连接分析器 与文档对象 
  parser.set_document(doc) 
  doc.set_parser(parser) 
  doc.initialize() 
 
  # 检测文档是否提供txt转换,不提供就忽略 
  if not doc.is_extractable: 
    raise PDFTextExtractionNotAllowed 
  else: 
    # 创建PDf 资源管理器 来管理共享资源 
    rsrcmgr = PDFResourceManager() 
    # 创建一个PDF设备对象 
    laparams = LAParams() 
    device = PDFPageAggregator(rsrcmgr, laparams=laparams) 
    # 创建一个PDF解释器对象 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
 
    # 用来计数页面,图片,曲线,figure,水平文本框等对象的数量 
    num_page, num_image, num_curve, num_figure, num_TextBoxHorizontal = 0, 0, 0, 0, 0 
 
    # 循环遍历列表,每次处理一个page的内容
    # doc.get_pages() 获取page列表 
    for page in doc.get_pages(): 
     # 页面加1 
      num_page += 1 
      interpreter.process_page(page) 
      # 接受该页面的LTPage对象 
      layout = device.get_result() 
      for x in layout: 、
       # 图片对象
        if isinstance(x,LTImage): 
          num_image += 1
        # 曲线对象  
        if isinstance(x,LTCurve): 
          num_curve += 1
        # figure对象 
        if isinstance(x,LTFigure):  
          num_figure += 1
         # 获取文本内容  
        if isinstance(x, LTTextBoxHorizontal):
          # 水平文本框对象加1 
          num_TextBoxHorizontal += 1 
          # 保存文本内容,生成doc文件的文件名及路径 
          with open(r'test.doc', 'a',encoding='utf-8') as f:
            results = x.get_text() 
            f.write(results) 
            f.write('\n') 

    # 打印出paf文档的对象情况
    print('对象数量:\n','页面数:%s\n'%num_page,'图片数:%s\n'%num_image,'曲线数:%s\n'%num_curve,'水平文本框:%s\n' 
       %num_TextBoxHorizontal) 
 
# 执行主函数
if __name__ == '__main__': 
  #读取pdf文件路径及文件名 
  pdf_path = r'C:\Users\Jiang\Desktop\test.pdf'
  #对该路径下的pdf文件执行上面自定义的解析pdf文档的函数
  parse(pdf_path)

pdf文档的内容如下:

图片

执行代码:

图片

解析出doc文档:

图片

打开内容如下:

图片

上面就是python如何使用pdfminer3k将pdf文档转换为doc文本格式,类似的还有将pdf转换为txt、doc转pdf,其实实现方式就差不多了,感兴趣的同学可以自己试试,有任何问题欢迎交流讨论。

另外所有实战文章的源码都会同步至github,有需要的欢迎下载使用。

最后如果觉得本文写得不错,就点下赞和再看推荐给更多的人呗。欢迎关注公众号:1024笔记,免费获取海量学习资源(涵盖视频、源码、文档)!

其他推荐: