可能你正在心里默想,终于讲到将PDF文档转换为Word文档了。是的,从PDF转成Word文档的需求更大,而目前市面上很多的转换工具都是收费的,或者只免费转换几页,根本无法满足我们的转换需求。
现在学了PDF的操作了,如果只是想要提取PDF文档里的文本,那么pypdf2和pymupdf都能满足,但麻烦的是,如果是一个图文并茂的PDF文档,以我们现在学的知识点根本无法完成。不要紧张,只要存在这种大需求就肯定会有大佬去解决,我们就是站在他们的肩膀上的人。
网上确实有一些能把PDF文档转换成Word文档的免费开源的库,笔者觉得目前最好用的是pdf2docx,它能创建解析文档布局、图片、表格等,会尽可能保证样式不错乱。
但注意,它是不可能生成一个与转换前的PDF文档一模一样的Word文档的,即使是当前市场上非常优秀的转换软件也不可能做到,这取决于文档排版的复杂程度,但相对来说,pdf2docx库已经是很不错的了。pdf2docx库名与docx2pdf倒是挺像的,但pdf2docx要比docx2pdf复杂多了,毕竟这两者要实现的功能难度根本不是同一个量级。
pdf2docx库是基于pymupdf和python-docx的,很明显,它是用pymupdf来提取PDF元素和样式布局,然后再用python-docx构建Word文档,如果对具体的实现步骤感兴趣的话可以看一下它的源码。
既然是第三方库,第一件事就是安装,因为这个库会安装很多其他关联的库,而且那些库都不小,所以建议安装的时候使用国内的源,比如说清华源,代码如下:
pip install pdf2docx -i https://pypi.tuna.tsinghua.edu.cn/simple/
这里演示一下pdf2docx的使用方法,代码如下:
from pdf2docx import Converter
converter = Converter("./convert_ files/转换测试文档.pdf")
converter.convert("./convert_ files/test.docx")
converter.close()
使用方法是先实例化一个Converter对象,实例化的时候就指定PDF文档的路径,然后再调用它的convert()方法,把保存Word文档的路径传进去就好了,最后记得调用一下它的close()方法把它关掉。
如果文档有密码的话,实例化Converter的时候的第二个参数可以指定密码,如果只想转换其中几页的话,可以在convert()方法中指定start和end参数,比如说只要转换前2页,代码如下:
from pdf2docx import Converter
converter = Converter("./convert_ files/转换测试文档.pdf",
password="你的密码")
converter.convert("./convert_ files/test.docx",start=0,end=2)
converter.close()
转换之后得到的文档,其实样式还是会有些许错乱,这时候需要手动调整,毕竟程序已经帮我们做了大部分工作了。