python实现word 2007文档转换为pdf文件

yipeiwu_com6年前Python基础

在开发过程中,会遇到在命令行下将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读取文件名并改名字的实例

第一版,能实现,但最后发现文件的顺序改变了: import os def reename(): nm=1 pathh="/home/huangyaya/file/imag...

深入理解Python异常处理的哲学

所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事。异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学。限于认知能力和...

用OpenCV将视频分解成单帧图片,图片合成视频示例

本文做的是基于opencv将视频帧转成图片输出,由于一个视频包含的帧数过多,经常我们并不是需要它的全部帧转成图片,因此我们希望可以设置每隔多少帧再转一次图片(本文设置为30帧),若有人需...

浅谈python抛出异常、自定义异常, 传递异常

一. 抛出异常 Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一...

利用python如何处理nc数据详解

前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是“知难行易”还是“知易行难”都不能充分的说明问题,还是“知行合一”来的更靠谱些,...