Pywin32 save .docx as pdf

RenShan picture RenShan · May 27, 2015 · Viewed 9.4k times · Source

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?

Answer

James Mills picture James Mills · May 27, 2015

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()