两行Python代码实现pdf转word功能

 更新时间:2023年03月30日 15:38:56   作者:Dr.sky_  
这篇文章主要为大家详细介绍了如何利用两行Python代码就能实现pdf转word功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

一、安装依赖包

pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ python-office

二、pdf转word

2.1 代码实现

import office
office.pdf.pdf2docx(file_path = 'test.pdf')

运行过程如下:

[1/4] Opening document...
[INFO] [2/4] Analyzing document...
[WARNING] 'created' timestamp seems very low; regarding as unix timestamp
[WARNING] 'modified' timestamp seems very low; regarding as unix timestamp
[WARNING] 'created' timestamp seems very low; regarding as unix timestamp
[WARNING] 'modified' timestamp seems very low; regarding as unix timestamp
[INFO] [3/4] Parsing pages...
[INFO] (1/9) Page 1
[INFO] (2/9) Page 2
[INFO] (3/9) Page 3
[INFO] (4/9) Page 4
[INFO] (5/9) Page 5
[INFO] (6/9) Page 6
[INFO] (7/9) Page 7
[INFO] (8/9) Page 8
[INFO] (9/9) Page 9
[INFO] [4/4] Creating pages...
[INFO] (1/9) Page 1
[INFO] (2/9) Page 2
[INFO] (3/9) Page 3
[INFO] (4/9) Page 4
[INFO] (5/9) Page 5
[INFO] (6/9) Page 6
[INFO] (7/9) Page 7
[INFO] (8/9) Page 8
[INFO] (9/9) Page 9
[INFO] Terminated in 1.30s.
 
Process finished with exit code 0

2.2 pdf内容

2.3 转换后的word

由上可见,效果还不错。

补充

除了上文的办法,小编还为大家整理了更多Python实现的PDF转Word方法,需要的可以参考一下

方法一:

import os
from configparser import ConfigParser
from io import StringIO
from io import open
from concurrent.futures import ProcessPoolExecutor

from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from docx import Document


def 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 content


def 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':
                continue
            file_name = os.path.splitext(file)[0]
            pdf_file = config['pdf_folder'] + '/' + file
            word_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 = True
        for task in tasks:
            if not task.done():
                exit_flag = False
        if exit_flag:
            print('完成')
            exit(0)


if __name__ == '__main__':
    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通过cron或schedule实现爬虫的自动定时运行

    Python通过cron或schedule实现爬虫的自动定时运行

    自动定时运行爬虫是很多数据采集项目的基本需求,通过 Python 实现定时任务,可以保证数据采集的高效和持续性,本文将带大家了解如何在 Python 中使用 cron 和 schedule 来实现爬虫的自动定时运行,需要的朋友可以参考下
    2024-12-12
  • Python中不可忽视的docstring妙用

    Python中不可忽视的docstring妙用

    docstring是Python中用于记录模块、类、方法和函数行为的字符串,帮助开发者和用户快速了解代码的功能和用法,本文将详细介绍docstring的使用,需要的可以参考下
    2024-12-12
  • Python使用asyncio标准库对异步IO的支持

    Python使用asyncio标准库对异步IO的支持

    Python中,所有程序的执行都是单线程的,但可同时执行多个任务,不同的任务被时间循环(Event Loop)控制及调度,Asyncio是Python并发编程的一种实现方式;是Python 3.4版本引入的标准库,直接内置了对异步IO的支持
    2023-11-11
  • Python字典及字典基本操作方法详解

    Python字典及字典基本操作方法详解

    这篇文章主要介绍了Python字典及字典基本操作方法,结合实例形式详细分析了Python字典的概念、创建、格式化及常用操作方法与相关注意事项,需要的朋友可以参考下
    2018-01-01
  • python兼容VBA的用法详解

    python兼容VBA的用法详解

    这篇文章主要介绍了python兼容VBA的用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Python调用高德API实现批量地址转经纬度并写入表格的功能

    Python调用高德API实现批量地址转经纬度并写入表格的功能

    这篇文章主要介绍了Python调用高德API实现批量地址转经纬度并写入表格的功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • python深度学习tensorflow安装调试教程

    python深度学习tensorflow安装调试教程

    这篇文章主要为大家介绍了python深度学习tensorflow安装调试教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 浅析Python 3 字符串中的 STR 和 Bytes 有什么区别

    浅析Python 3 字符串中的 STR 和 Bytes 有什么区别

    Python2的str相当于Python3的Bytes,而Unicode相当于Python3的Bytes。这篇文章主要介绍了Python 3 字符串中的 STR 和 Bytes 究竟有什么区别?需要的朋友可以参考下
    2018-10-10
  • 分享5个方便好用的Python自动化脚本

    分享5个方便好用的Python自动化脚本

    这篇文章主要介绍了分享5个方便好用的Python自动化脚本,这次我们使用Python来实现几个自动化场景,或许可以用到你的工作中或者对你的学习有所帮助,需要的朋友可以参考一下
    2022-03-03
  • python3实现zabbix告警推送钉钉的示例

    python3实现zabbix告警推送钉钉的示例

    今天小编就为大家分享一篇python3实现zabbix告警推送钉钉的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02

最新评论