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全局变量操作详解
Apr 14 Python
Python import用法以及与from...import的区别
May 28 Python
Python松散正则表达式用法分析
Apr 29 Python
使用Python和Prometheus跟踪天气的使用方法
May 06 Python
python配置文件写入过程详解
Oct 19 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
Jan 08 Python
Python如何用filter函数筛选数据
Mar 05 Python
python 安装impala包步骤
Mar 28 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
Python如何在windows环境安装pip及rarfile
Jun 15 Python
Python3实现建造者模式的示例代码
Jun 28 Python
详解Python高阶函数
Aug 15 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获取当前页面完整URL地址
2015/12/30 PHP
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
JSONP跨域请求
2017/03/02 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
详解js中的几种常用设计模式
2020/07/16 Javascript
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
介绍Python中几个常用的类方法
2015/04/08 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
十八届三中全会宣传方案
2014/02/21 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
2016年国庆节宣传标语
2015/11/25 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
Redis实现订单自动过期功能的示例代码
2021/05/08 Redis
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android