python实现word 2007文档转换为pdf文件


Posted in Python onMarch 15, 2018

在开发过程中,会遇到在命令行下将DOC文档(或者是其他Office文档)转换为PDF的要求。比如在项目中如果手册是DOC格式的,在项目发布时希望将其转换为PDF格式,并且保留DOC中的书签,链接等。将该过程整合到构建过程中就要求命令行下进行转换。

Michael Suodenjoki展示了使用Office的COM接口进行命令行下的转换。但其导出的PDF文档没有书签。在Office 2007 SP2中,微软加入了该功能,对应的接口是ExportAsFixedFormat。该方法不仅适用于Word,而且也适用于Excel。

一个简单的Python脚本来展示如何转换DOC为PDF。该脚本需要Office 2007 SP2, Python 2.6与Python for win32(使Python能调用COM)。这里也可以使用其他支持COM的语言。ExportAsFixedFormat还有其他一些参数,具体参见MSDN相关文档。需要注意的是文档路径需要为绝对路径,因为Word启动后当前路径不是调用脚本时的当前路径。

#-*- coding:utf-8 -*- 
 
# doc2pdf.py: python script to convert doc to pdf with bookmarks! 
# Requires Office 2007 SP2 
# Requires python for win32 extension 
 
 
import sys, os 
from win32com.client import Dispatch, constants, gencache 
 
def doc2pdf(input, output): 
 w = Dispatch("Word.Application") 
 
 try: 
  doc = w.Documents.Open(input, ReadOnly = 1) 
  doc.ExportAsFixedFormat(output, constants.wdExportFormatPDF,  
   Item = constants.wdExportDocumentWithMarkup, CreateBookmarks = constants.wdExportCreateHeadingBookmarks) 
  return 0 
 except: 
  return 1 
 finally: 
  w.Quit(constants.wdDoNotSaveChanges) 
 
# Generate all the support we can. 
def GenerateSupport(): 
 # enable python COM support for Word 2007 
 # this is generated by: makepy.py -i "Microsoft Word 12.0 Object Library" 
 gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4) 
 
def main(): 
 if (len(sys.argv) == 2): 
  input = sys.argv[1] 
  output = os.path.splitext(input)[0]+'.pdf' 
 elif (len(sys.argv) == 3): 
  input = sys.argv[1] 
  output = sys.argv[2] 
 else: 
  input = u'BA06007013.docx'#word文档的名称 
  output = u'BA06007013.pdf'#pdf文档的名称 
 if (not os.path.isabs(input)): 
  input = os.path.abspath(input) 
 if (not os.path.isabs(output)): 
  output = os.path.abspath(output) 
 try: 
  GenerateSupport() 
  rc = doc2pdf(input, output) 
  return rc 
 except: 
  return -1 
 
if __name__=='__main__': 
  rc = main() 
  if rc: 
    sys.exit(rc) 
  sys.exit(0)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3 能振兴 Python的原因分析
Nov 28 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
Python爬虫实例爬取网站搞笑段子
Nov 08 Python
Python实现将一个正整数分解质因数的方法分析
Dec 14 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
PyQt5显示GIF图片的方法
Jun 17 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
Python脚本打包成可执行文件过程解析
Oct 20 Python
Anaconda详细安装步骤图文教程
Nov 12 Python
python中Pexpect的工作流程实例讲解
Mar 02 Python
Python time库的时间时钟处理
May 02 Python
python中使用PIL制作并验证图片验证码
Mar 15 #Python
Python读取Word(.docx)正文信息的方法
Mar 15 #Python
30秒轻松实现TensorFlow物体检测
Mar 14 #Python
tensorflow识别自己手写数字
Mar 14 #Python
磁盘垃圾文件清理器python代码实现
Aug 24 #Python
Django自定义用户认证示例详解
Mar 14 #Python
python如何压缩新文件到已有ZIP文件
Mar 14 #Python
You might like
php MYSQL 数据备份类
2009/06/19 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
浅析JavaScript动画
2015/06/10 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
vue实现购物车案例
2020/05/30 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
深入了解Python数据类型之列表
2016/06/24 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
python实现微信防撤回神器
2019/04/29 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
为什么说python适合写爬虫
2020/06/11 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
PHP经典面试题
2016/09/03 面试题
法律专业自我鉴定
2013/10/03 职场文书
研修第一天随笔感言
2014/02/15 职场文书
销售职业生涯规划范文
2014/03/14 职场文书
预备党员承诺书
2014/03/25 职场文书
村庄环境整治方案
2014/05/15 职场文书
无犯罪记录证明
2014/09/19 职场文书
通知的写法
2015/04/23 职场文书
2015年九一八事变纪念活动实施方案
2015/05/06 职场文书
导游词之青城山景区
2019/09/27 职场文书
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL