2015-05-27 24 views
7

Tôi đang sử dụng Word 2013 để tự động tạo báo cáo dưới dạng docx rồi lưu dưới dạng định dạng pdf.Pywin32 lưu .docx dưới dạng pdf

Nhưng khi tôi gọi hàm SaveAs2(), kịch bản bật ra "save as" cửa sổ và ném ngoại lệ này:

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

Đây là mã của tôi để mở và lưu dưới dạng tệp mới:

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) 

Và tôi đang sử dụng: python2.7 với PyWin32 (xây dựng 219)

có ai đó đã một ý tưởng tại sao nó không hoạt động?

+0

Tại sao không chỉ tạo báo cáo bằng reportlab? Sau đó, nó là tất cả trong Python và bạn không phải lo lắng về những vấn đề chuyển đổi. –

Trả lời

3

Có một vài thư viện tốt đẹp để xử lý công việc này:

Ngoài ra còn có một ví dụ về làm exactly this trong Recipe ActiveState này Convert Microsoft Word files to PDF with DOCXtoPDF


Nếu bạn nhấn mạnh về sử dụng Windows API (s) đó cũng là một ví dụ để làm điều này qua win32com trong công thức này Convert doc and docx files to pdf


Bạn thể cũng làm điều này bằng comtypes (Nhờ .doc to pdf using python)

Ví dụ:

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

Xin chào James và cảm ơn câu trả lời của bạn và gợi ý của bạn! Tôi đã thử các ví dụ của bạn với comtypes và ActiveState nhưng không may, nó tạo ra cùng một rắc rối như trên trong phần lưu. Đối với python-docx, nó không cho phép lưu nó dưới dạng pdf [document] (https://github.com/python-openxml/python-docx/issues/113) và tất cả các thư viện khác không dường như lấy tiêu đề docx. – RenShan

Các vấn đề liên quan