Python代码教你批量将PDF转为Word - 无名小妖

wumingxiaoyao 2021-10-31 原文


Python代码教你批量将PDF转为Word

很多时候在学习时发现许多文档都是PDF格式,PDF格式却不利于学习使用,因此需要将PDF转换为Word文件,但或许你从网上下载了很多软件,但只能转换前五页(如WPS等),要不就是需要收费,那有没有免费的转换软件呢?

 

so,我们给各位带来了一个免费简单快速的方法,手把手教你用Python批量处理PDF格式文件,获取自己想要的内容,存为word形式。

 

在实现PDF转Word功能之前,我们需要一个python的编写和运行环境,同时安装好相关的依赖包。 对于python环境,我们推荐使用PyCharm。 

 

PDF转Word功能所需的依赖包如下:

    • PDFParser(文档分析器)

    • PDFDocument(文档对象)

    • PDFResourceManager(资源管理器)

    • PDFPageInterpreter(解释器)

    • PDFPageAggregator(聚合器)

    • LAParams(参数分析器)

步骤:

安装pdfminer3k模块

 

代码:

#!/usr/bin/env python
# Version = 3.5.2
# __auth__ = \'无名小妖\'
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
from docx import Document

document = Document()


def parse():
    # rb以二进制读模式打开本地pdf文件
    fn = open(\'Django-日志配置.md.pdf\',\'rb\')
    # 创建一个pdf文档分析器
    parser = PDFParser(fn)
    # 创建一个PDF文档
    doc = PDFDocument()
    # 连接分析器 与文档对象
    parser.set_document(doc)
    doc.set_parser(parser)

    # 提供初始化密码doc.initialize("lianxipython")
    # 如果没有密码 就创建一个空的字符串
    doc.initialize("")
    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed

    else:
        # 创建PDf资源管理器
        resource = PDFResourceManager()
        # 创建一个PDF参数分析器
        laparams = LAParams()
        # 创建聚合器,用于读取文档的对象
        device = PDFPageAggregator(resource,laparams=laparams)
        # 创建解释器,对文档编码,解释成Python能够识别的格式
        interpreter = PDFPageInterpreter(resource,device)
        # 循环遍历列表,每次处理一页的内容
        # doc.get_pages() 获取page列表
        for page in doc.get_pages():
            # 利用解释器的process_page()方法解析读取单独页数
            interpreter.process_page(page)
            # 使用聚合器get_result()方法获取内容
            layout = device.get_result()
            # 这里layout是一个LTPage对象,里面存放着这个page解析出的各种对象
            for out in layout:
                # 判断是否含有get_text()方法,获取我们想要的文字
                if hasattr(out,"get_text"):
                    # print(out.get_text(), type(out.get_text()))
                    content = out.get_text().replace(u\'\xa0\', u\' \')  # 将\'\xa0\'替换成u\' \'空格,这个\xa0就是&nbps空格
                    # with open(\'test.txt\',\'a\') as f:
                    #     f.write(out.get_text().replace(u\'\xa0\', u\' \')+\'\n\')
                    document.add_paragraph(
                        content, style=\'ListBullet\'    # 添加段落,样式为unordered list类型
                    )
                document.save(\'demo1.docx\')  # 保存这个文档


if __name__ == \'__main__\':
    parse()

  

 

发表于
2018-02-23 10:08 
无名小妖 
阅读(31413
评论(4
编辑 
收藏 
举报

 

版权声明:本文为wumingxiaoyao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wumingxiaoyao/p/8460973.html

Python代码教你批量将PDF转为Word - 无名小妖的更多相关文章

  1. apache 二级域名设置完整步骤 – 防空洞123

    apache 二级域名设置完整步骤 http://blog.csdn.net/cz666/article/de […]...

  2. DM642 视频采集基本架构 – My小菜一碟

    DM642 视频采集基本架构 分享到 一键分享 QQ空间 新浪微博 百度云收藏 人人网 腾讯微博 百度相册 开 […]...

  3. 如何让图片太大时自动缩小显示? – proving

    如何让图片太大时自动缩小显示? 网页制作,如何让图片太大时自动缩小显示? http://wenda.tiany […]...

  4. NPM – 检查并更新项目依赖的版本

    原文地址:https://acme.top/nodejs-npm-check-updates 前言 经常会遇到 […]...

  5. 【转载】声学——科学、技术与艺术 – A-SP Studio

    【转载】声学——科学、技术与艺术 声学是一门具有广泛应用性的学科,涉及到人类生产、生活及社会活动的各个方面;同 […]...

  6. APK签名替换检测 – Mysticbinary

    APK签名替换检测 APK二次打包的危害 APK二次打包是Android应用安全风险中的一部分, 一般是通过反 […]...

  7. 领域驱动设计(DDD)的实践经验分享之持久化透明 – netfocus

    前一篇文章中,我谈到了领域驱动设计中,关于ORM工具该如何使用的问题。谈了很多我心里的想法,大家也对我的观点做 […]...

  8. MySQL获取分组后的TOP 1和TOP N记录 – 诗圆

    MySQL获取分组后的TOP 1和TOP N记录 有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录 […]...

随机推荐

  1. noip模拟5[string·matrix·big·所驼门王的宝藏]

    怎么说呢这一场考得还算可以呢 拿了120pts,主要是最后一个题灵光开窍,想起来是tarjan,然后勉勉强强拿 […]...

  2. 后处理对比多工况的差异总结

    有时候我们在计算完多个工况以后需要对比不同工况的差异,在CFD-Post当中可以使用case comparis […]...

  3. 缓冲区溢出攻击

    缓冲区溢出攻击   缓冲区溢出(Buffer Overflow)是计算机安全领域内既经典而又古老的话题。随着计 […]...

  4. 带着新人看java虚拟机04(多线程篇)

      我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一 […]...

  5. 戴尔R730xd服务器从U盘启动设置方法

    一、开机后在左上角出现提示的时候按F2    等一会自动进入系统BIOS选择菜单:选择system bios  […]...

  6. 如何删除顽固文件或文件夹?

      大家在使用电脑的时候,无论是办公还是学习都需要创建一些文件或文件夹,亦或安装一些应用软件。但是当不再使用的 […]...

  7. GDB 基本用法

    GDB 基本用法 1、编译文件时需要加上 -g 选项,并非是将源码嵌入可执行文件,只是加入源代码的信息。eg: […]...

  8. 再谈 APISIX 高性能实践

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open T […]...

展开目录

目录导航