0

0

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

王林

王林

发布时间:2023-04-28 18:25:06

|

2221人浏览过

|

来源于亿速云

转载

    一、安装依赖包

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

    二、pdfword

    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内容

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

    2.3 转换后的word

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

    由上可见,效果还不错。

    补充

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

    立即学习Python免费学习笔记(深入)”;

    Bing图像创建器
    Bing图像创建器

    必应出品基于DALL·E的AI绘图工具

    下载

    方法一:

    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)

    相关文章

    WPS零基础入门到精通全套教程!
    WPS零基础入门到精通全套教程!

    全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    python开发工具
    python开发工具

    php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

    758

    2023.06.15

    python打包成可执行文件
    python打包成可执行文件

    本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

    639

    2023.07.20

    python能做什么
    python能做什么

    python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

    761

    2023.07.25

    format在python中的用法
    format在python中的用法

    Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    618

    2023.07.31

    python教程
    python教程

    Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

    1264

    2023.08.03

    python环境变量的配置
    python环境变量的配置

    Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    548

    2023.08.04

    python eval
    python eval

    eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    579

    2023.08.04

    scratch和python区别
    scratch和python区别

    scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

    708

    2023.08.11

    高德地图升级方法汇总
    高德地图升级方法汇总

    本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

    40

    2026.01.16

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    最新Python教程 从入门到精通
    最新Python教程 从入门到精通

    共4课时 | 2.8万人学习

    Django 教程
    Django 教程

    共28课时 | 3.2万人学习

    SciPy 教程
    SciPy 教程

    共10课时 | 1.2万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号