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分析git log日志示例
Feb 27 Python
Python3.x中自定义比较函数
Apr 24 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Python中包的用法及安装
Feb 11 Python
Python3搭建http服务器的实现代码
Feb 11 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
python状态机transitions库详解
Jun 02 Python
python编程项目中线上问题排查与解决
Nov 01 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
snoopy 强大的PHP采集类使用实例代码
2010/12/09 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
PHP输出时间差函数代码
2013/01/28 PHP
利用Fix Rss Feeds插件修复WordPress的Feed显示错误
2015/12/19 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
Javascript实现Array和String互转换的方法
2015/12/21 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
浅谈python中set使用
2016/06/30 Python
Python时间的精准正则匹配方法分析
2017/08/17 Python
基于Python闭包及其作用域详解
2017/08/28 Python
Django如何将URL映射到视图
2019/07/29 Python
python3注册全局热键的实现
2020/03/22 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
Python内存映射文件读写方式
2020/04/24 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
机修工工作职责
2014/02/21 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android