【Python】comtypes模块Windows环境下使用批量转换成PDF文件

最近在微信看到一篇文章介绍说批量将ppt文件转化为pdf文件,自己尝试了一下,后面想能否自己封装一个类,既能将ppt转换为pdf,而且能够将word转换为pdf,或者其他类型转化为pdf。花了半天时间研究和找资料,终于完成了。

本人是在windows 10 、python3.6虚拟环境下完成的, 以下是具体内容:

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者:cacho_37967865
#博客:https://blog.csdn.net/sinat_37967865
#文件:pdfConverter.py
#日期:2018-04-22
#备注:通过调用Python访问COM对象的comtypes包,批量将ppt或者word转换为PDF文件,先要在python环境安装comtypes       
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
# F:\python_env\PaChong_env
# -*- coding: utf-8 -*-from comtypes.client import CreateObject
import osclass pdfConverter:def __init__(self):#word文档转化为pdf文档时使用的格式为17self.wdFormatPDF = 17self.wdToPDF = CreateObject("Word.Application")#ppt文档转化为pdf文档时使用的格式为32self.pptFormatPDF = 32self.pptToPDF = CreateObject("Powerpoint.Application")self.pptToPDF.Visible = 1def wd_to_pdf(self, folder):#获取指定目录下面的所有文件files = os.listdir(folder)#获取word类型的文件放到一个列表里面wdfiles = [f for f in files if f.endswith((".doc", ".docx"))]for wdfile in wdfiles:#将word文件放到指定的路径下面wdPath = os.path.join(folder, wdfile)#设置将要存放pdf文件的路径pdfPath = wdPath#判断是否已经存在对应的pdf文件,如果不存在就加入到存放pdf的路径内if pdfPath[-3:] != 'pdf':pdfPath = pdfPath + ".pdf"#将word文档转化为pdf文件,先打开word所在路径文件,然后在处理后保存pdf文件,最后关闭pdfCreate = self.wdToPDF.Documents.Open(wdPath)pdfCreate.SaveAs(pdfPath, self.wdFormatPDF)pdfCreate.Close()def ppt_to_pdf(self, folder):files = os.listdir(folder)pptfiles = [f for f in files if f.endswith((".ppt", ".pptx"))]for pptfile in pptfiles:pptPath = os.path.join(folder, pptfile)pdfPath = pptPathif pdfPath[-3:] != 'pdf':pdfPath = pdfPath + ".pdf"pdfCreate = self.pptToPDF.Presentations.Open(pptPath)pdfCreate.SaveAs(pdfPath, self.pptFormatPDF)pdfCreate.Close()if __name__ == "__main__":converter = pdfConverter()converter.ppt_to_pdf("F:\PythonProject\Pacong\ppt")converter.wd_to_pdf("F:\PythonProject\Pacong\ppt")

以后如果还想将其他类型的文件转换为pdf,可以在这个类中创建新的函数。在写这个类时遇到几个问题,大家也可能会遇到:

1. 刚开始运行时一直报错“Presentations.Open(pptPath)AttributeError: 'POINTER(IUnknown)' object has no attribute 'Presentations'”,找了好久才找到说好像是权限问题,需要在组件服务的DCOM配置进行处理。

2. word文档转换时的函数是:Documents.Open(),ppt转换时是:Presentations.Open()

3. 文件转换时有一个参数formatype,不同转换类型不一样:wdFormatPDF = 17,pptFormatPDF = 32

4. ppt转换时需要进行处理:pptToPDF.Visible = 1,word好像不需要

5. 这个转换用到了一个Python访问COM对象的comtypes包,可以通过pip直接安装

pip3 install comtypes

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】pdfminer3k模块批量转换本地PDF文件

上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件,但是有时候我们也想要将pdf文件转换为word或者txt文件,方便复制和处理。本文主要通过调用pdfminer3k模块进行处理。 说明:本文是在Windows10下使用python最新的3.6版本虚拟…

Python读写json文件的简单实现

转载自https://blog.csdn.net/vitaminc4/article/details/77985175 介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、Java、Ja…

Nacos配置

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究&#xf…

【Python】如何选择赋值和拷贝

在Python中,一切皆为对象,对象通过「变量名」引用,「变量名」更确切的叫法是「名字」,好比我们每个人都有自己的名字一样,我们通过名字来代指某个人,代码里面通过名字来指代某个对象。变量赋值就是给对象绑…

分布式Session共享问题解决

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究&#xf…

【Python】元组和列表相关知识总结

python中,我们经常用到元组和列表,本文主要总结了一下元组和列表的一些基本用法。 #作者:cacho_37967865 #博客:https://blog.csdn.net/sinat_37967865 #文件:teamList.py #日期:2018-05-06 #备注&#xf…

python 写入json数据到数据库

json数据格式: # json格式数据 data{"camera": {"created": "1531925035","type": 1,"description": "A bridge is a structure that is built over a railway, river, or road so that people or vehicle…

❤️震惊!人生苦短,我用python来玩田忌赛马❤️

一读标题笑死自己哈哈哈,最近猪哥(玩得敲好的彭友)找我帮忙解决他不会作业哈哈哈,他们公司自己出的笔试题哈哈哈,希望别被他们出题人看见哈哈哈,回想猪哥说的一句话,万一这就是以后你遇到的试题…

【测试】软件测试 QA、QC、QM的关系与区别?

质量体系之:软件测试 QA、QC、QM的关系与区别? 关键词:QA是未雨绸缪,测试是亡羊补牢 经常看到有些人把QA、QC、QM的概念搞混,认为他们是同一个概念的不同描述,由于这三者都是舶来品,并且翻译者在…

错误之data_insertt() takes 1 positional argument but 2 were given解决方法

1、首先检测函数与调用直接的参数是否匹配。 2、若为python环境。 函数定义如下: 调用如下: 显示如下错误: 解决方法:在函数定义时添加self。即为: 则问题解决。 这是一个很基本的,但是很严重的错误。只…

【测试】优秀软件测试工程师必备的8个能力

作为一名软件工程师,需要的能力并不多,但是要成为一名优秀的软件测试工程师,需要的能力就比较多了。 一、业务分析能力 1、分析整体业务流程 不了解整个公司的业务,根本就没办法进行测试。 2、分析被测业务数据 了解整个业务里…

python将Unix时间戳转换成时间

将时间戳转换成时间 在时间戳转换成时间中,首先需要将时间戳转换成localtime,再转换成时间的具体格式: 利用localtime()函数将时间戳转化成localtime的格式利用strftime()函数重新格式化时间 #coding:UTF-8 import timetimestamp 15324990…

【Python爬虫】爬虫程序的简单处理过程

一月份的时候有写过一篇文章,是关于如何解析网站,然后将图片下载下来,爬虫爬取美女图片存入到动态的文件夹中 今天主要总结的是爬虫的一个基本思路,主要有: 1.获取一个网页get_one_page() 我们知道一个网页可能由多个…

错误之Only one usage of each socket address (protocol/network address/port)解决办法

错误如下: 解决方案:这个错误是端口占用导致。我们应找到此应用程序对应端口号的pid然后kill掉,即可ok

【测试】用例设计思路-六方面

有这样一个面试题:在一个Web测试页面上,有一个输入框,一个计数器(count)按钮,用于计算一个文本字符串中字母a出现的个数。 请设计一系列测试用例用以测试这个Web页面。 有经验的测试人员可能会问面试官&…

Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'

code: 1 #encodingutf-82 from django.db import models3 # Create your models here.4 class BookInfo(models.Model): #创建书本信息类,继承models.Model5 booktitlemodels.CharField(max_length20)6 bookdatamodels.DateField()7 class HeroInfo(model…

【职场】高薪的条件你满足几条?

生活中时常听到人们抱怨工资少,但是抱怨归抱怨,你是否意识到自身的一些问题呢?高薪的条件你又满足几条一、忠诚 单位可能开除有能力的员工,但对一个忠心耿耿的人,不会有领导愿意让他走,他会成为单位这个铁打…

【Excel】函数DateDif查看两个日期之间的间隔

Excel中的DateDif函数是一个隐藏函数,在excel的公式以及帮助中是找不到的,必须要手工输入才可以。 此函数的格式为datedif("开始日期","结束日期","参数"),说明如…

跟老齐学python Django实战第一章错误解决

我使用的是 Django 2.0 版本,在按第一章所说的做,出现了三个大问题,并找了答案,现在贴上来,希望能给大家小小帮助: 1) 写 models.py 的时候,执行“python manage.py makemigrations …

【技巧】搜狗输入法特殊技巧

有时候我们报销或者其他情况下需要对金额进行大写,这时我们可以通过搜狗输入法进行转换;阅读的时候,我们会遇到一些特殊而且复杂的字,这个时候我们也可以通过搜狗输入法知道这个字怎么读。 先下载搜狗拼音输入法: 数字金额进行转换…