I'm using Word 2013 to automatically create a report as a docx and then save it as a pdf format.
But when I call the function SaveAs2(), the script pop out the "save as" windows and throws this exception :
(-2147352567, 'Exception occurred.', (0, u'Microsoft Word', u'Command failed', u'wdmain11.chm', 36966, -2146824090), None)
Here is my code to open and to save as a new file:
self.path = os.path.abspath(path)
self.wordApp = win32.Dispatch('Word.Application') #create a word application object
self.wordApp.Visible = False # if false hide the word application (app does't open but still usable)
self.document = self.wordApp.Documents.Open(self.path + "/" + documentRef) # opening the template file
absFileName = "D:\\test.pdf"
self.document.SaveAs2(FileName=absFileName,FileFormat=17)
And I'm using : python2.7 with pywin32 (build 219)
Does someone had an idea why it doesn't work?
There are a couple of nice libraries to handle this task:
There is also an example of doing exactly this in this ActiveState Recipe Convert Microsoft Word files to PDF with DOCXtoPDF
If you insist on using Windows API(s) there is also an example of doing this via win32com
in this recipe Convert doc and docx files to pdf
You could also do this using comtypes
(Thanks to .doc to pdf using python)
Example:
import os
import sys
import comtypes.client
wdFormatPDF = 17
def covx_to_pdf(infile, outfile):
"""Convert a Word .docx to PDF"""
word = comtypes.client.CreateObject('Word.Application')
doc = word.Documents.Open(infile)
doc.SaveAs(outfile, FileFormat=wdFormatPDF)
doc.Close()
word.Quit()