遍历 .doc 文件以将它们转换为 .pdf (Python)

Looping over the .doc files to convert them to .pdf (Python)

我正在寻找将 .doc 文件转换为 .pdf 的解决方案 Python 2.7.x 在 [=] 中处理 .doc 文件似乎并不那么直接21=],与 .docx 和 pdf 相比。到目前为止,最合适和最有效的解决方案似乎对我来说 this 尽管当我尝试扩展它以循环遍历给定目录中的 .doc 文件时,我遇到了一个错误:

_ctypes.COMError: (-2146823114, None, (u"Sorry, we couldn't find your file.     Was it moved, renamed, or deleted?\r (C:\windows\system32\PrivateCourse_AR.doc)", u'Microsoft Word', u'wdmain11.chm', 24654, None))

代码如下:

import os
import comtypes.client

os.chdir('C:\Users\Domi\PycharmProjects\STStransl-auto\doc')
path = os.getcwd()
print path

input = os.listdir(path)
print input
print len(input)

wdFormatPDF = 17 #pdf

i=0

output = '.\doc2txt_{}'.format(i)

word = comtypes.client.CreateObject('Word.Application')
for file in input:
    if file.endswith('.doc'):
        print file
        doc = word.Documents.Open(file)
        doc.SaveAs(output, FileFormat=wdFormatPDF)
        i += 1
        doc.Close()
        word.Quit()

欢迎并非常感谢任何有关代码或如何有效处理 Python 中的 .doc 文件的建议。我正在开发一个自动化脚本来处理 .docx 和 .pdf 文件(合并、提取文本并将文本拆分为多个文件)。有了这些就没有任何问题。遗憾的是,我也有很多 .doc 文件。非常感谢。

请注意,错误中提到了您的文件名,但在系统路径中

C:\windows\system32\PrivateCourse_AR.doc

那是因为您实际上并没有调用 Word 子进程,而是使用 MSWord 的更复杂的通信协议,显然这里 MSWord 是 运行 使用另一个当前目录。因此在这种情况下传递相对文件路径失败(幸运的是 MSWord 提供了未找到文件的绝对路径)

要解决这个问题,只需执行以下操作:

word.Documents.Open(os.path.abspath(file))

使路径相对于你的脚本(在正确的目录中)

save 部分可能是相同的 issue/fix:

doc.SaveAs(os.path.abspath(output), FileFormat=wdFormatPDF)

旁白:始终对 windows 文件路径使用原始前缀,您可能会对 C:\temp 之类的路径感到惊讶(制表符而不是 \t,写入 r"C:\temp"