• 5、【办公自动化】Python实现PDF转Word


    这周 HR 小姐姐让我提供一份可编辑的简历,于是,我找了半天发现只留存了 PDF 格式的简历,这显然不符合小姐姐的要求。

    为了省事,我从网上顺手下了一个声称免费文档的转换器应用程序,没想到只给我免费转一页,超过一页需要充值会员,这不是坑吗?打着免费的幌子诱导用户注册和充值,哎,不是厂商的套路太深就是自己想的太天真啊,哈哈哈哈,果断卸载了!!!

    白嫖不易,冷静了一下,决定自己写个 Python 程序实现这个需求,前面自己动手实现过 Word 转 PDF ,现在再搞一个 PDF 转 Word 吧。

    于是,去 Pypi 官网搜索一下是否存在类似 pdf2word、pdf2doxc 等名称的第三方库,果然发现了一个 pdf2doxc,而且安装、入门示例、API 文档也很详细,赶紧去学习下吧!

    经过一番研究,这个依赖库有三种转换方式可以选择使用,下面逐一介绍下:

    1、写代码实现

    支持将PDF所有页进行转换,也支持指定页的转换。

    <1>. 转换PDF所有页

    1. from pdf2docx import Converter
    2. from pdf2docx import parse
    3. # 测试用例1
    4. pdf_filename = 'D:\\XXX\\简历-wxx.pdf'
    5. docx_filename_all = 'D:\\XXX\\简历-wxx_all.docx'
    6. """默认转换pdf所有页"""
    7. # 方式1:
    8. parse(pdf_filename, docx_filename_all)
    9. # 方式2:
    10. # pdf = Converter(pdf_filename)
    11. # pdf.convert(docx_filename_all)
    12. # pdf.close()

    转换过程中,日志如下:

    <2>. 转换PDF指定页

    1. from pdf2docx import Converter
    2. # 测试用例1
    3. pdf_filename = 'D:\\XXX\\简历-wxx.pdf'
    4. docx_filename_part = 'D:\\XXX\\简历-wxx_part.docx'
    5. """
    6. 转换pdf指定页(比如:只转换第三页到第五页):
    7. start=0表示第一页,end=5表示第六页但不包括
    8. """
    9. pdf = Converter(pdf_filename)
    10. # 方式1:使用start~end参数,转换前两页简历,start=0可省略
    11. pdf.convert(docx_filename_part, start=0, end=2)
    12. # 方式2:使用pages参数
    13. # pdf.convert(docx_filename_part, pages=[2, 3, 4])
    14. pdf.close()

    转换效果如下:(两页的简历)

    2、命令行模式

    这种方式不用编码,但需要熟悉命令行的书写方式,可以通过 help 查看下 pdf2docx 命令的用法:

    <1>. 转换PDF所有页

    <2>. 转换PDF指定页

    方式1,通过start、end参数,转换第二页到第三页

    方式2,通过pages参数,转换第二页和第三页

    转换效果如下:

     3、GUI界面模式

    通过命令 pdf2docx gui 调出 GUI 界面进行转换,操作步骤如下:

    总结

    至此,通过 pdf2doxc 已经实现了我的 PDF 转 Word 需求,实现效果也很棒!另外,如果再深入一点的话,会有这么几个问题值得思考:

    • 如果 PDF 是加密类型的怎么办?
    • 如果PDF含有大量的图片,表格、代码块等特殊区域是否也可以完美转换呢?

    <1>. 加密场景转换

    查看 API 文档可知,通过 Converter() 函数加入打开 PDF 文档的密码参数password

    <2>. 含有大量的图片,表格、代码块等特殊区域的场景转换

    这里,有一篇111页的学习笔记,存在着大量的特殊区域,测试一下转换效果~

    1. from pdf2docx import Converter
    2. # 测试用例
    3. pdf_filename = 'D:\\XXX\\SpringBoot经典学习笔记.pdf'
    4. docx_filename_all = 'D:\\XXX\\SpringBoot经典学习笔记_all.docx'
    5. docx_filename_part = 'D:\\XXX\\SpringBoot经典学习笔记_part_3.docx'
    6. pdf = Converter(pdf_filename)
    7. pdf.convert(docx_filename_all)
    8. pdf.close()

    效果如下:

    有些没有转换过来,成为了空白页!!通过控制台输出信息可以看到:出现错误时,当前页不会转换输出的。

    该问题主要是 PDF 存在无法识别的特殊区域导致的,因此,PDF的内容尽量不要太复杂,不要太花里胡哨。通常情况下,pdf2doxc 库已经可以满足常见的转换需求了。

    最后,Pypi官网还能搜索到 pdfminer、pdfminer1、pdfminer2、pdfminer3、pdfminer3k 等 PDF 转换/分析器的第三方库,看着都混乱,这里不再考虑使用这些库了,感兴趣的话可以再研究研究~

  • 相关阅读:
    HTML5期末考核大作业网站——卫生与健康HTML+CSS+JavaScript
    WEB前端网页设计 HTML CSS 网页设计参数 - 【浮动与定位】
    创建项目与认识DevEco Studio界面
    Java中的枚举和注解
    abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3上(五十八)
    管理与系统思维
    生于云、长于云,RocketMQ 5.0 再出发
    人体的神经系统图 分布,人体脑神经系统分布图
    一些场景题
    MYSQL中的锁
  • 原文地址:https://blog.csdn.net/qq_29119581/article/details/127355377