Python实现PDF转Word的方法详解

 更新时间:2023年02月16日 11:01:23   作者:Sir 老王  
由于PDF的文件大多都是只读文件,有时候为了满足可以编辑的需要通常可以将PDF文件直接转换成Word文件进行操作。本文为大家整理了一些实现方法,希望对大家有所帮助

由于PDF的文件大多都是只读文件,有时候为了满足可以编辑的需要通常可以将PDF文件直接转换成Word文件进行操作。

看了网络上面的python转换PDF文件为Word的相关文章感觉都比较复杂,并且关于一些图表的使用还要进行特殊的处理。

本篇文章主要讲解关于如何使用python是实现将PDF转换成Word的业务过程,这次没有使用GUI应用的操作。

由于可能存在版本冲突的问题,这里将开发过程中需要使用的python非标准库的版本列举出来。

  • python内核版本:3.6.8
  • PyMuPDF版本:1.18.17
  • pdf2docx版本:0.5.1

可以选择pip的方式对使用到的python非标准库进行安装。

pip install PyMuPDF==1.18.17

pip install pdf2docx==0.5.1

完成上述的python依赖库安装以后,将pdf2docx导入到我们的代码块中。

# Importing the Converter class from the pdf2docx module.
from pdf2docx import Converter

然后,编写业务函数的代码块,新建一个pdfToWord函数来处理转换逻辑,主要就几行代码可以实现比较简单。

def pdfToWord(pdf_file_path=None, word_file_path=None):
    """
    It takes a pdf file path and a word file path as input, and converts the pdf file to a word file.

    :param pdf_file_path: The path to the PDF file you want to convert
    :param word_file_path: The path to the word file that you want to create
    """
    # Creating a Converter object.
    converter_ = Converter(pdf_file_path)
    # The `convert` method takes the path to the word file that you want to create, and the start and end pages of the PDF
    # file that you want to convert.
    converter_.convert(word_file_path, start=0, end=None)
    converter_.close()

最后,使用main函数调用pdfToWord函数可以直接完成文档格式的转换。

# A special variable in Python that evaluates to `True` if the module is being run directly by the Python interpreter, and
# `False` if it has been imported by another module.
if __name__ == '__main__':
    pdfToWord('D:/test-data-work/test_pdf.pdf', 'D:/test-data-work/test_pdf.docx')

# Parsing Page 2: 2/5...Ignore Line "∑" due to overlap
# Ignore Line "∑" due to overlap
# Ignore Line "ç" due to overlap
# Ignore Line "A" due to overlap
# Ignore Line "i =1" due to overlap
# Ignore Line "æ" due to overlap
# Parsing Page 5: 5/5...
# Creating Page 5: 5/5...
# --------------------------------------------------
# Terminated in 3.2503201s.

方法补充

除了上面的方法,小编还为大家准备了其他方法,需要的小伙伴可以了解一下

方法一:

from pdf2docx import Converter
import PySimpleGUI as sg
 
 
def pdf2word(file_path):
    file_name = file_path.split('.')[0]
    doc_file = f'{file_name}.docx'
    p2w = Converter(file_path)
    p2w.convert(doc_file, start=0, end=None)
    p2w.close()
    return doc_file
 
 
def main():
    # 选择主题
    sg.theme('DarkAmber')
 
    layout = [
        [sg.Text('pdfToword', font=('微软雅黑', 12)),
         sg.Text('', key='filename', size=(50, 1), font=('微软雅黑', 10))],
        [sg.Output(size=(80, 10), font=('微软雅黑', 10))],
        [sg.FilesBrowse('选择文件', key='file', target='filename'), sg.Button('开始转换'), sg.Button('退出')]]
    # 创建窗口
    window = sg.Window("张卧虎", layout, font=("微软雅黑", 15), default_element_size=(50, 1))
    # 事件循环
    while True:
        # 窗口的读取,有两个返回值(1.事件;2.值)
        event, values = window.read()
        print(event, values)
 
        if event == "开始转换":
 
            if values['file'] and values['file'].split('.')[1] == 'pdf':
                filename = pdf2word(values['file'])
                print('文件个数 :1')
                print('\n' + '转换成功!' + '\n')
                print('文件保存位置:', filename)
            elif values['file'] and values['file'].split(';')[0].split('.')[1] == 'pdf':
                print('文件个数 :{}'.format(len(values['file'].split(';'))))
                for f in values['file'].split(';'):
                    filename = pdf2word(f)
                    print('\n' + '转换成功!' + '\n')
                    print('文件保存位置:', filename)
            else:
                print('请选择pdf格式的文件哦!')
        if event in (None, '退出'):
            break
 
    window.close()
main()

方法二:

加密过的PDF转word

#-*- coding: UTF-8 -*- 
#!/usr/bin/python
#-*- coding: utf-8 -*-
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
import os
#设置工作目录文件夹
os.chdir(r'c:/users/dicey/desktop/codes/pdf-docx')
#解析pdf文件函数
def parse(pdf_path):
 fp = open('diya.pdf', '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的内容
  for page in doc.get_pages(): # doc.get_pages() 获取page列表
   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
    if isinstance(x,LTFigure): # figure对象
     num_figure += 1
    if isinstance(x, LTTextBoxHorizontal): # 获取文本内容
     num_TextBoxHorizontal += 1 # 水平文本框对象增一
     # 保存文本内容
     with open(r'test2.doc', 'a',encoding='utf-8') as f: #生成doc文件的文件名及路径
      results = x.get_text()
      f.write(results)
      f.write('\n')
  print('对象数量:\n','页面数:%s\n'%num_page,'图片数:%s\n'%num_image,'曲线数:%s\n'%num_curve,'水平文本框:%s\n'
    %num_TextBoxHorizontal)

if __name__ == '__main__':
 pdf_path = r'diya.pdf' #pdf文件路径及文件名
 parse(pdf_path)

到此这篇关于Python实现PDF转Word的方法详解的文章就介绍到这了,更多相关Python PDF转Word内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Python读取配置文件模块ConfigParser

    详解Python读取配置文件模块ConfigParser

    本篇文章主要介绍了详解Python读取配置文件模块ConfigParser,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Python Web框架Flask中使用七牛云存储实例

    Python Web框架Flask中使用七牛云存储实例

    这篇文章主要介绍了Python Web框架Flask中使用七牛云存储实例,本文也对七牛云存储Python SDK的一个使用示例,需要的朋友可以参考下
    2015-02-02
  • python神经网络使用Keras进行模型的保存与读取

    python神经网络使用Keras进行模型的保存与读取

    这篇文章主要为大家介绍了python神经网络使用Keras进行模型的保存与读取,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • uwsgi启动django项目的实现步骤

    uwsgi启动django项目的实现步骤

    本文主要介绍了uwsgi启动django项目的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Py之pycocotools库的简介、安装、使用方法及说明

    Py之pycocotools库的简介、安装、使用方法及说明

    这篇文章主要介绍了Py之pycocotools库的简介、安装、使用方法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • pandas分组聚合(agg,transform,apply)

    pandas分组聚合(agg,transform,apply)

    在SQL中我们经常使用 GROUP BY 将某个字段,按不同的取值进行分组, 在pandas中也有groupby函数,本文主要介绍了pandas分组聚合(agg,transform,apply),具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • python使用线程封装的一个简单定时器类实例

    python使用线程封装的一个简单定时器类实例

    这篇文章主要介绍了python使用线程封装的一个简单定时器类,实例分析了Python线程的使用及定时器类的实现技巧,需要的朋友可以参考下
    2015-05-05
  • Python实现的排列组合、破解密码算法示例

    Python实现的排列组合、破解密码算法示例

    这篇文章主要介绍了Python实现的排列组合、破解密码算法,结合实例形式分析了Python排列组合、密码破解相关数学运算操作技巧,需要的朋友可以参考下
    2019-04-04
  • Keras自定义IOU方式

    Keras自定义IOU方式

    这篇文章主要介绍了Keras自定义IOU方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • pytest-sugar 执行过程中显示进度条的脚本分享

    pytest-sugar 执行过程中显示进度条的脚本分享

    Pytest-sugar是一款用来改善控制台显示的插件,增加了进度条显示,使得在用例执行过程中可以看到进度条,而且进度条是根据用例是否通过标注不同颜色,非常醒目,接下来通过本文给大家分享下pytest sugar 显示进度条的脚本,感兴趣的朋友一起看看吧
    2022-12-12

最新评论