解决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)

图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() 为的是能够让这个程序在多线程使用,详情可以看下参考网站

### 回答1: Pythoncom38是一个Python库,它提供了访问Windows操作系统的COMComponent Object Model)组件的功能。COM组件是一种通用的二进制接口技术,它允许不同的软件程序之间进行交互,并且可以极大地提高软件开发工作的效率和灵活性。 使用Pythoncom38库,开发者可以轻松地创建和控制COM组件,包括创建新组件和访问现有的组件。此外,它还包括一些强大的工具和函数,如Dispatch(调度)和PyIDispatch(Python接口),它们可以帮助开发者在Python脚本使用COM组件提供的功能。 Pythoncom38同样也提供了其他Windows的功能,例如与系统剪贴板的交互、调用OLE(Object Linking and Embedding)对象等。这使得Python程序员可以很轻松地在Windows操作系统下开发复杂的应用程序,实现更多的功能。 Pythoncom38库在开发Windows应用程序和自动化工具时非常有用,它帮助Python开发者能够更好地利用COM组件技术,提高工作效率和灵活性。 ### 回答2: Pythoncom38是一个Python库,它是Python编程语言的COM客户端,可以用于与Windows底层API进行交互以及使用COM组件。 COMComponent Object Model)是一种面向对象的二进制接口标准,它允许不同的应用程序之间进行通信和互操作。Pythoncom38库提供了一些接口,以便Python程序与Windows底层的COM对象进行交互,比如读取和写入Windows注册表项、创建和操作OLE对象等。此外,Pythoncom38库还提供了一个窗口消息循环和钩子,允许程序处理Windows消息和事件。 Pythoncom38库的一些重要的组件包括:pywintypes,win32api,win32com。其,pywintypes是一个基于Windows C类型的模块,提供了从Python接口到Windows API的转换工具;win32api是Python对Windows API的封装,用户可以通过Python代码调用Windows底层API;win32com是将Windows底层的COM对象实例化为Python对象的接口。 总之,Pythoncom38是一个强大的库,使得Python程序可以与Windows底层进行交互,使用COM组件等。它为Python程序员提供了一个强大的工具,用于与Windows系统进行集成,并可以使用Windows系统的资源和功能。 ### 回答3: Pythoncom38是Python的一个COMComponent Object Model)接口库,为Python程序提供了与Windows操作系统和其他COM对象进行交互的能力。它使得Python程序可以像其他Windows应用程序一样访问到Windows操作系统的服务,例如文件操作、网络通信、图像处理等功能。此外,它还提供了访问其他COM对象的接口,例如微软Office软件、Web浏览器等。Pythoncom38库主要包括以下几个模块: 1. win32com.client:用于创建和管理COM对象的模块,可与其他Windows应用程序和系统服务进行互操作。 2. win32com.server:用于创建和提供COM对象的模块,可将Python程序封装为COM对象并提供给其他应用程序使用。 3. win32com.axcontrol:用于创建和管理ActiveX控件的模块,可在Windows应用程序嵌入Python脚本作为控件行为。 4. win32com.adsi:用于访问Active Directory Service Interfaces(ADSI)的模块,可在Python程序与Windows域进行交互。 Pythoncom38是Python重要的一个库,它为Python程序提供了强大的Windows系统和其他COM对象的交互能力,使得Python成为一个更加强大的跨平台脚本语言。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值