现在WPS和百度网盘都提供了PDF转Word的功能,但是需要充值会员。网上也有其他网站可以把PDF转成Word的,可是有一定限制。还有一些开源软件,效果就达不到要求了。经过了一番调查,发现真正完成PDF转Word的是一个来自Soliddocuments公司的程序,在smallpdf、adobe acrobat dc等网站上都有提到。
本地实现
经过一番搜索,没有找到Soliddocuments的免费程序。我的目的是通过程序自动完成PDF转Word,转换一下思路,想到Adobe Acrobat DC Pro既然有PDF转Word的功能,内部一定就是Soliddocuments,那我直接控制Acrobat DC Pro不就可以了!果然,Acrobat DC Pro是可以通过Python控制的。这样,我就找到了这样一套几乎完美的本地方法,完成PDF转Word:
【步骤1】
在淘宝上搜“Acrobat DC Pro“,花几块钱就可以买到,然后本地安装好。(如果不需要实现自动转换,直接用这个软件的”导出到->Word“就可以了)
【步骤2】
安装Anaconda Python,是一套完整的Python程序环境。安装时一定要选中”Add anaconda to my PATH environment variable“,这样才能从命令行调用python。
【步骤3】
编写Python调用Acrobat DC Pro的程序(pdf2word.py)。该程序将当前目录下的所有PDF文件转换为Word,并保存到output目录。
代码语言:javascript复制from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT
import os
import winerror
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
files = list(filter(lambda f: f.endswith('.pdf'), os.listdir()))
def pdf2word(f_path, d_path):
try:
AvDoc = Dispatch("AcroExch.AVDoc")
AvDoc.Open(f_path, "")
pdDoc = AvDoc.GetPDDoc()
jsObject = pdDoc.GetJSObject()
jsObject.SaveAs(d_path, "com.adobe.acrobat.docx")
print('ok')
except Exception as e:
print('error')
print(e)
finally:
pdDoc.Close()
AvDoc.Close(True)
os.mkdir('output')
for file in files:
print('convert:', file)
out_file = file.replace('.pdf', '.docx')
f_path = os.path.abspath(file)
d_path = os.path.abspath('output/' out_file)
pdf2word(f_path, d_path)
【步骤4】
将PDF文件和pdf2word.py放在一个文件夹内,打开命令行运行Python程序,完成转换
代码语言:javascript复制python pdf2word.py
先给大家演示一下以上流程
远程实现
虽然以上实现了自动转换,但是也只能自己本地操作,不能远程使用。接下来,我将用 Y20持续部署系统 把以上流程编排为流水线,实现远程自动操作。Y20持续部署系统如何使用,这里就不详细说明了,简单的说,她是个流水线的编排和运行系统。
这条远程自动PDF转Word流水线的步骤,我将做如下编排(已发布到 PDF转WORD):
- 指定哪一台电脑完成转换
- 将pdf2word.py程序传输到这台电脑
- 将PDF文件传输到这台电脑
- 打开终端,执行Python程序
- 将转换好的Word文件传到服务器,以供下载
运行前,需要把安装好Acrobat DC Pro和Anaconda Python的机器接入到持续部署系统,将步骤1的节点参数指定为这台电脑。
启动流水线时,上传PDF文件。结束后,在流水线详情页面的”上传的文件“中,就可以下载转换好的Word文件了。
给大家演示一下远程通过流水线完成PDF转Word