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中使用SAX解析xml实例
Nov 21 Python
Python可跨平台实现获取按键的方法
Mar 05 Python
理解Python垃圾回收机制
Feb 12 Python
python中set常用操作汇总
Jun 30 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
pytorch之inception_v3的实现案例
Jan 06 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
python numpy实现rolling滚动案例
Jun 08 Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 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地址
2008/12/20 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
angular分页指令操作
2017/01/09 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
Python常用随机数与随机字符串方法实例
2015/04/09 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Python八皇后问题解答过程详解
2019/07/29 Python
python 内置函数汇总详解
2019/09/16 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Pandas之缺失数据的实现
2021/01/06 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
毕业生求职简历中的自我评价
2013/10/18 职场文书
工程力学硕士生的自我评价范文
2013/11/16 职场文书
五一手机促销方案
2014/03/08 职场文书
财务内勤岗位职责
2014/04/17 职场文书
感恩之星事迹材料
2014/05/03 职场文书
政治学求职信
2014/06/03 职场文书
锦旗标语大全
2014/06/23 职场文书
超市促销活动总结
2014/07/01 职场文书
委托书格式要求
2015/01/28 职场文书
财务人员岗位职责
2015/02/03 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers