2015-05-27 49 views
7

Używam programu Word 2013 do automatycznego tworzenia raportu w formacie docx, a następnie zapisywania go w formacie pdf.Pywin32 zapisz .docx jako pdf

Ale kiedy wezwać SaveAs2 function(), skrypt wyskoczyć „zapisz jako” okien i rzuca ten wyjątek:

(-2147352567, 'Exception occurred.', (0, u'Microsoft Word', u'Command failed', u'wdmain11.chm', 36966, -2146824090), None) 

Oto mój kod, aby otworzyć i zapisać jako nowy plik:

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) 

i używam: python2.7 z pywin32 (build 219)

Czy ktoś miał pomysł, dlaczego to nie działa?

+0

Dlaczego po prostu nie utworzyć raportu za pomocą reportlab? To wszystko w Pythonie i nie musisz się martwić o te problemy z konwersją. –

Odpowiedz

3

Istnieje kilka miłych bibliotek do obsługi tego zadania:

Jest też przykładem robi exactly this w tym ActiveState Receptura Convert Microsoft Word files to PDF with DOCXtoPDF


Jeśli nalegać na użyciu Windows API (y) jest również przykładem robi to poprzez win32com w tym przepisie Convert doc and docx files to pdf


Ty mógłby to zrobić również za pomocą comtypes (Dzięki .doc to pdf using python)

przykład:

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

Cześć James i dzięki za odpowiedź i sugestię! Próbowałem twoich przykładów z typami com i ActiveState, ale niestety, tworzy to samo kłopot co powyżej podczas części składowania. Co do Pythona-docx, to nie pozwala zapisać go jako pdf [dokument] (https://github.com/python-openxml/python-docx/issues/113), a cała inna biblioteka nie wydaje się, że bierze nagłówek docx. – RenShan

Powiązane problemy