Hello,上个周末没能搞事情,被一个代码需求给绊住了:朋友在平时工作中会经常重复性地打开不同PDF文件,选取其中特定的几组信息复制粘贴到不同的Word文档中,完成一份PDF文件平均耗时15分钟,想试试Python代码能否帮忙。

由于其涉及文件隐私,将需求简化如下:我这提供一份PDF版《笨办法学Python》,想把其中第五页的第1段和第4段填充到Word文档 “笔记.docx” 特定位置:

上图为PDF中的目标文字;下图为Word文档要填充的位置:

思路

首先利用PDFMiner模块解析PDF文件,转化成PDF内容的文本列表;根据目标位置在列表中提取目标文本;利用Python处理Word文档的库docx-mailmerge模块,进行文本填充。

PDFMiner模块

PDFMiner是一个专注于从PDF文档中提取、分析文本信息的工具。它不仅可以获取特定页码特定位置处的信息,也能获得字体等信息。其工作原理如图所示:

看不懂原理图没关系,我们关心的是应用问题。首先安装PDFMiner,注意Python3要安装pdfminer3k,可以通过pip install pdfminer3k进行安装

解析PDF涉及代码步骤较多,先不展开,文末提供注释源码供参考。通过PDFMiner解析,文本内容按区域存到不同页码的文本list中;每一页又作为元素存入整个文档的list中。即假设content代表整个PDF文本信息,content[0]为第一页信息,content[4]即我们想要的第五页信息。而第五页中,按照list元素顺序,我们想要的第一段和第四段就可以通过content[4][1]和content[4][4]拿到了:

docx-mailmerge模块

这个模块的应用类似于你先在Word文档中特定位置去定义好变量,之后在代码中通过MailMerge函数为变量赋值

首先是安装:pip install docx-mailmerge

接下来去Word文档中定义要插入的变量,在要插入文本的位置选择 “插入”→“文档部件”→“域”

在弹出的窗口中选择mailmerge变量,中文直译“邮件合并”,域名是自己定义的变量名,这里我用firstTED 来代表第一段:

设置完成后会看到<>出现在Word文档中。同理,我们设置fourthTED来代表第四段,最终结果如图:

至此,Word文档中变量定义完成,继续回到代码中。我们已经拿到了第一段和第四段的文本,接下来就是将其和新定义的firstTED 和 fourthTED 融合:

template = "../读书笔记.docx"document = MailMerge(template)document.merge(firstTED = content[4][1],fourthTED = content[4][4],)document.write("读书笔记更新.docx")

最终在PDF文件旁会生成新的“读书笔记更新.docx”:

其内容如图:

目标达成!写给朋友的初版代码,对于能拿到的文本信息准确度也是很高的,而且可以批量处理文档。代码运行几秒钟,便将人力几个小时的工作完成了,余下的是相对轻松的校验和修正。可能你一天的繁琐工作,对代码而言就是几秒的事情

回顾

就实现效果来看,达到了预期,但仍有待提高。最终效果与PDF文件的格式是否规范有直接关系,有许多扫描件PDF文档每页都像是图片,就无法通过PDFMiner顺利获取到文本信息。后续我们将尝试先把PDF转图片,再通过OCR识别图片中文字信息的思路来搞定

此外,为了展示,选用的PDF和Word文档以及要插入的信息都较规范简洁,在实际需求中,因为批量操作,也会遇到各种大小问题,这些都要在实战中去不断完善。

代码下载

后台回复 文档处理 获取演示用代码下载

最后附上朋友对初版代码的反应,令人很有成就感!

正在学Python或水平挺不错的朋友,不妨问问身边朋友有没有什么繁琐的工作可以用代码改进,如果有,反手甩他一个代码,也是很不错的体验哦~

向上滑动文章好看就点这里

java读取word文档内容_Python读取PDF信息插入Word文档相关推荐

  1. Python 读取 PDF 信息插入 Word 文档

    Python 读取 PDF 信息插入 Word 文档 思路 PDFMiner模块 docx-mailmerge 模块 回顾 代码下载 Hello,上个周末没能搞事情,被一个代码需求给绊住了:朋友在平时 ...

  2. Python读取PDF信息插入Word文档

    转载自公众号:TEDxPY Hello,上个周末没能搞事情,被一个代码需求给绊住了:朋友在平时工作中会经常重复性地打开不同PDF文件,选取其中特定的几组信息复制粘贴到不同的Word文档中,完成一份PD ...

  3. python读取文件中的内容_python 读取文件夹中的文件内容

    看thinking in java的时候发现有个题的答案不确定结果, 于是下载答案看下,结果是 这个样子的,这样要怎么才能找到相对应的答案?于是我就着手写了一个快速遍历的脚本(我这里只是单纯的找了出来 ...

  4. python读取yaml文件的内容_Python读取YAML文件过程详解

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. python读取指定页docx内容_Python读取指定目录下指定后缀文件并保存为docx

    最近有个奇葩要求 要项目中的N行代码 申请专利啥的 然后作为程序员当然不能复制粘贴 用代码解决.. 使用python-docx读写docx文件 环境使用python3.6.0 首先pip安装pytho ...

  6. 用VBA在Word文档中每页页眉插入返回文档目录中相应位置的超链接

    [说明]此文中在页眉插入跳转到目录项的超链接的代码几经改进,但改进后并未删除改进之前的代码,是为了有个对比利于学习.如果想节约时间,该步骤可直接查看该部分最后一个代码块. 对于Word长文档,标准做法 ...

  7. 如何批量提取 PDF 文档内容,将 PDF 格式文档转为 Txt 文本格式

    概要:PDF 文档常常用来阅读.预览或者存档一些资料,PDF 支持的内容也是比较丰富的.可以支持图片.文本等多种类型的元素.那有时候我们就需要将一些纯文本的 PDF 文档中的文字提取出来,转为一个 T ...

  8. js读取word文档内容_Python学习第九十二天:Python操作word

    1.Python写word文档 要操作word文档首先需要安装python-docx库: pip install python-docx 然后导入docx模块,或者从docx模块中导入Document ...

  9. python提取word表格里的内容_python读取word表格 python中如何将word表格内的内容进行替换...

    python如何获取word文件中某个关键字之后的表格一片春愁待酒浇.江上舟摇,楼上帘招.秋娘度与泰娘娇.风又飘飘,雨又萧萧.何日归家洗客袍?银字笙调,心字香烧.流光容易把人抛.红了樱桃,绿了芭蕉. ...

最新文章

  1. RuntimeException: Package manager has died
  2. java jdbc 登录_java web JDBC 判断用户登录问题!
  3. 用了python之后笔记本卡了_应用
  4. 控制台应用和空项目有什么区别_互联网小程序的应用以及APP的应用有什么区别及发展...
  5. Maven 仓库、镜像
  6. MySQL实现时间按月,日,小时分组查询
  7. mysql流程函数if之类
  8. NPS内网穿透服务端一键安装脚本
  9. 优化vmware mac神器beamoff
  10. Pascal VOC Dataset 下载地址
  11. UVALive 4487 - Exclusive-OR (加权并查集+异或运算的性质)
  12. BMS专题之BMS的分类与功能
  13. 基于php的心理测试,据说是韩国最受欢迎的心理测试~~
  14. L1正则项-稀疏性-特征选择
  15. Android开发 环境搭建(ubuntu)
  16. python——常见运算符号
  17. python 3d图表_matplotlib 三维图表绘制方法简介
  18. 【技美百人计划】美术 2.2 模型基础
  19. Android MediaPlayer源码分析
  20. vscode代码索引_VSCode 配置文件的变量索引

热门文章

  1. codeforces 735C Tennis Championship(贪心+递推)
  2. 用Ultra ISO制作启动U盘装系统
  3. 记录一下ListItem类的常用的方法
  4. Linux符号连接的层数过多
  5. mysql创建存储过程及遍历查询结果,mysql 用存储过程遍历结果集
  6. python 检查代码规范_Python代码规范检测
  7. webRTC之fatal error: ‘absl/strings/string_view.h‘ file not found(二十)
  8. Go搭建REPL环境
  9. 高通driver模块编译方法
  10. C++之编写dll库