Python word转换成PDF速度问题

使用python将word文件转换成PDF,代码如下:

def convertDocxToPDF(infile,outfile):
    wdFormatPDF = 17
    word = comtypes.client.CreateObject('Word.Application')
    doc = word.Documents.Open(infile)
    doc.SaveAs(outfile, FileFormat=wdFormatPDF)
    doc.Close()
    word.Quit()

但发现速度很慢,经过排查,发现
word = comtypes.client.CreateObject('Word.Application')
这一句执行需要近20s,在执行批量转换时,为了提高效率,能否在内存中生成一个word,每次转换时都在这个word上进行?请问技术上如果可以实现应该怎么写代码?

阅读 7.3k
3 个回答

你机器本身启动 word 就太慢了吧。

以前处理类似场景,我是用 win32com 的。里面有个 Dispatch 可以得到一个实例。

https://groups.google.com/for...

7年前的代码。

# -*- coding: UTF-8 -*-

from win32com.client import Dispatch, DispatchEx


def translate(s):
    #msword = Dispatch('Word.Application')
    msword = DispatchEx('Word.Application') #强制启用一个新实例

    msword.Visible = 0 # 是否显示界面
    msword.DisplayAlerts = 0 # 是否显示提示信息

    msword.Documents.Add()
    msword.Selection.TypeText(s)

    msword.WordBasic.ToolsTCSCTranslate #属性封装方法,这靠猜的啊T_T
    r = msword.Documents[0].Content.Text.replace(u'\r', u'\n')

    msword.Quit(False) #是否提示保存
    return r

你这里的word是一个指向COM对象的interface pointer,应该是可以复用的

如果可以复用的话可以来一个静态类:

class WordObject:
    wordObject = comtypes.client.CreateObject('Word.Application')
    @class_method
    def word(cls):
        return self.wordObject
def convertDocxToPDF(infile, outfile):
    word = WordObject.word()
    ...
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题