转载自公众号:TEDxPY

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

image

image

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

image

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

image

思路

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

PDFMiner模块

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

image

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

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

image

docx-mailmerge模块

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

首先是安装:pip install docx-mailmerge

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

image

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

image

设置完成后会看到<<firstTED><firstted style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: inherit; line-height: inherit; font-size: inherit;">>出现在Word文档中。同理,我们设置fourthTED来代表第四段,最终结果如图:</firstted>

image

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

<pre style="margin: 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: 宋体; font-size: 8.4pt;">template = "../读书笔记.docx" document = MailMerge(template)
document.merge(
firstTED = content[4][1],
fourthTED = content[4][4],
)
document.write("读书笔记更新.docx")
</pre>

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

image

其内容如图:

image

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

回顾

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

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

代码下载

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

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

image

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

Python读取PDF信息插入Word文档相关推荐

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

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

  2. java读取word文档内容_Python读取PDF信息插入Word文档

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

  3. [Work Summary] Python将PDF转换成Word文档

    美图欣赏2022/08/21 在我们平时的工作和日常生活中,有时候需要将PDF文件转换成Word文件.为此,决定使用Python自己实现将PDF转换成Word文档的功能需求 编写如下程序代码(pdf2 ...

  4. 将word文档导入数据库_如何将用户信息插入Word文档

    将word文档导入数据库 When you install Word, you are asked to enter your name and initials. This user informa ...

  5. 如何用python实现把PDF转化成word文档呢

    大家知道,Python库就是一个宝藏,用的好,可以实现很多功能,让它们为我们所用. 今天,我们这里要将PDF转换为Word文档,可以使用Python中的pyPDF2和python-docx库.pyPD ...

  6. python将图片批量排版插入Word文档

    今天分享一个将图片批量插入word文档的小脚本,本脚本可以实现 jpg\png图片,可以混合在一起! 主要用到的库是python-docx 安装一下:pip install python-docx 首 ...

  7. 【Python】导出docx格式Word文档中的文本、图片和附件等

    [Python]导出docx格式Word文档中的文本.图片和附件等 零.需求 为批量批改学生在机房提交的实验报告,我需要对所有的实验文档内容进行处理.需要批量提取Word文档中的图片和附件以便进一步检 ...

  8. 如何快速将PDF文件转换为Word文档

    PDF文件是一个广泛使用的电子文档格式,其被广泛应用于各种领域,包括教育.商业和政府.虽然PDF文件非常实用,但有时你需要将其转换为Word文档,以便更方便地编辑和处理.以下是几种快速将PDF文件转换 ...

  9. 如何将PDF格式转换为WORD文档

    经常在PDF形式上看到有好的文件时,想把它拿出来,但是却是不行,所以我第一步就是找一下有没有可以到PDF格式与WORD文档的转换,在网上找了一下,原来还真的有很多,今天我就把这些方法也传上来,不过我也 ...

最新文章

  1. Centos7 搭建FastDFS文件管理系统及简单的迁移方法
  2. 微信生成带参数的二维码,合成海报,扫码后推送小程序?
  3. 20155327《Java程序设计》第二周学习总结
  4. html里table的遍历,js遍历table中的tr
  5. 虚拟化系列-Windows server 2012 虚拟机管理
  6. LintCode 1671. 玩游戏(贪心、难)
  7. linux上svn的使用教程,Linux上SVN的搭建使用
  8. SQL Server MYSQL 检查点的好处
  9. 一个根据用户名生成头像的库——@multiavatar/multiavatar在react中的使用
  10. 跟随企业数字化转型,FIT2CLOUD推演全栈云管平台
  11. 滞留在服务器的邮件,outlook 2010 发送邮件时莫名滞留在发件箱
  12. Tmux_Hotkey
  13. 干货 | 拆解一个 Elasticsearch Nested 类型复杂查询问题
  14. ios sdk 穿山甲_Creator iOS接入穿山甲SDK
  15. 8000字干货:那些很厉害的人是怎么构建知识体系的
  16. 360email讲堂:中秋佳节邮件营销大放光彩
  17. 分治法 divide and conquer
  18. js 获取开始时间和结束时间相隔小时及分钟(时间戳操作)
  19. veket linux输入法,智能通用输入法平台(SCIM for veket)
  20. 计算机excel必备知识,Excel超级实用技巧12则 -电脑资料

热门文章

  1. 通过HP Loadrunner VuGen来录制安卓的应用
  2. 查询一个月一来表空间的变化情况
  3. 暑假快来了,又该何去何从
  4. 搭建IntelliJ IDEA+maven+jetty+SpringMVC 开发环境(一)
  5. springboot2源码2-SpringApplication运行
  6. codeforces 1221 A B C D
  7. numpy-ufunc函数
  8. erlang 读取confg文件异常 could not start kernel pid error in config file
  9. sql server 当月天数
  10. 关注 Web Client Software Factory [Weekly Drop 08]