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 相关文章推荐
从零学Python之入门(二)基本数据类型
May 25 Python
python去除所有html标签的方法
May 05 Python
python数据结构之图深度优先和广度优先实例详解
Jul 08 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
python中字符串比较使用is、==和cmp()总结
Mar 18 Python
python如何读写csv数据
Mar 21 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
django+mysql的使用示例
Nov 23 Python
Python读写压缩文件的方法
Jul 30 Python
python的dict判断key是否存在的方法
Dec 09 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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 实现多服务器共享 SESSION 数据
2009/08/15 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
以WordPress为例讲解jQuery美化页面Title的方法
2016/05/23 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
Python学习笔记_数据排序方法
2014/05/22 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python yield 使用浅析
2015/05/28 Python
Python反转序列的方法实例分析
2018/03/21 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
交通事故委托书范本(2篇)
2014/09/21 职场文书
房屋所有权证明
2015/06/19 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
趣味运动会赞词
2015/07/22 职场文书
职工培训工作总结
2015/08/10 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL