利用Python调用Office 2007 SP2接口将Word文档转换为带书签的PDF
本文介绍如何使用Python脚本在命令行环境下将Word文档转换为PDF格式。通过调用Office 2007 SP2引入的ExportAsFixedFormat接口,可确保转换后的PDF保留原文档的书签和超链接。文章提供了完整的Python代码示例,并强调了使用绝对路径及安装必要依赖(如pywin32)的重要性,适用于自动化构建流程中的文档格式转换需求。
在软件开发与项目发布流程中,经常需要在命令行环境下将DOC或其他Office格式文档转换为PDF。例如,当项目手册采用DOC格式时,为了便于分发和阅读,通常需要在发布阶段将其转换为PDF,并严格保留原文件中的书签、超链接等交互元素。为了实现这一目标的自动化,必须确保该转换过程能够在无图形界面的命令行环境中顺利执行。
Michael Suodenjoki曾展示过利用Office的COM接口进行命令行转换的方法,但该方法导出的PDF文件往往缺失书签功能。直到Office 2007 SP2版本发布,微软在接口中新增了相关支持,即通过ExportAsFixedFormat方法实现。值得注意的是,该接口不仅适用于Word文档,同样适用于Excel文件的PDF导出操作。
以下提供一个简单的Python脚本示例,演示如何将DOC文件转换为包含书签的PDF。执行此脚本需满足特定环境要求:必须安装Office 2007 SP2、Python 2.6版本,并配置Python for win32扩展库以支持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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









