解决pythoncom和win32com下docx文件转化为pdf文件过程中Word后台进程无法关闭的问题

1 目的

笔者在python3.6环境下,想把一个word文档转化为pdf文件。使用了以下的方式

from win32com import client
import pythoncom

doc2pdf(doc_path, filename)
    
def doc2pdf(doc_name, pdf_name):
    """
    :word文件转pdf
    :param doc_name word文件名称
    :param pdf_name 转换后pdf文件名称
    """
    pythoncom.CoInitialize()
    root_path = r"D:\zihe.zhu\2020.01-task\webproject20200105"  # 此处改成绝对位置
    word = client.DispatchEx("Word.Application")
    worddoc = word.Documents.Open(root_path + doc_name[1:], ReadOnly=1)
    worddoc.SaveAs(root_path + pdf_name[1:], FileFormat=17)
    worddoc.Close()

2 问题   

但是在结束程序后发现,后台开启的word文档并没有被释放,造成了资源占用的情况。(效果如图1)

解决pythoncom和win32com下docx文件转化为pdf文件过程中Word后台进程无法关闭的问题_第1张图片 图1 后台可以看见word文档进程并没有释放

3 解决方案

新增两句:

word.Quit()
pythoncom.CoUninitialize()

即改为:

def doc2pdf(doc_name, pdf_name):
    """
    :word文件转pdf
    :param doc_name word文件名称
    :param pdf_name 转换后pdf文件名称
    """
    pythoncom.CoInitialize()
    root_path = r"D:\zihe.zhu\2020.01-task\webproject20200105"  # 此处改成绝对位置
    word = client.DispatchEx("Word.Application")
    worddoc = word.Documents.Open(root_path + doc_name[1:], ReadOnly=1)
    worddoc.SaveAs(root_path + pdf_name[1:], FileFormat=17)
    worddoc.Close()
    word.Quit()
    pythoncom.CoUninitialize()

        1)退出word,2)取消pythoncom的初始化。可以看到后台中没有word进程了。

        CoInitialize()方法和DispathchEx() 为的是能够让这个程序在多线程使用,详情可以看下参考网站。

你可能感兴趣的:(Python探索笔记)