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使用urllib模块和pyquery实现阿里巴巴排名查询
Jan 16 Python
python控制台显示时钟的示例
Feb 24 Python
一个计算身份证号码校验位的Python小程序
Aug 15 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
Django Rest framework之权限的实现示例
Dec 17 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
django写用户登录判定并跳转制定页面的实例
Aug 21 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 Python
用Python提取PDF表格的方法
Apr 11 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
用cookies来跟踪识别用户
2006/10/09 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
js下通过getList函数实现分页效果的代码
2010/09/17 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
matplotlib给子图添加图例的方法
2018/08/03 Python
使用Python 统计高频字数的方法
2019/01/31 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
Python安装OpenCV的示例代码
2020/03/05 Python
Ubuntu配置Pytorch on Graph (PoG)环境过程图解
2020/11/19 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
Expedia法国:全球最大在线旅游公司
2018/09/30 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
学校机关党总支领导班子整改工作方案
2014/10/26 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
党员自我评价范文2015
2015/03/03 职场文书
小学运动会通讯稿
2015/07/18 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL