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中给List添加元素的4种方法分享
Nov 28 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
ubuntu16.04制作vim和python3的开发环境
Sep 23 Python
Python中xml和json格式相互转换操作示例
Dec 05 Python
python 实现提取某个索引中某个时间段的数据方法
Feb 01 Python
详解Python 调用C# dll库最简方法
Jun 20 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 Python
django实现支付宝支付实例讲解
Oct 17 Python
Python之指数与E记法的区别详解
Nov 21 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
PHP判断文件是否被引入的方法get_included_files用法示例
2016/11/29 PHP
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
亲自动手实现vue日历控件
2019/06/26 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
pandas 空数据处理方法详解
2019/11/02 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
关于python中remove的一些坑小结
2021/01/04 Python
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1
2015/07/16 面试题
员工拾金不昧表扬信
2014/01/09 职场文书
企业员工集体活动方案
2014/08/17 职场文书
小学领导班子对照材料
2014/08/23 职场文书
学习委员竞选稿
2015/11/20 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android