मैंने इस समस्या पर आधा दिन काम किया है, इसलिए मुझे लगता है कि मुझे इस मामले पर अपना कुछ अनुभव साझा करना चाहिए। स्टीवन का जवाब सही है, लेकिन यह मेरे कंप्यूटर पर असफल हो जाएगा। इसे ठीक करने के लिए दो महत्वपूर्ण बिंदु हैं:
(1)। पहली बार जब मैंने 'Word.Aplication' ऑब्जेक्ट बनाया, तो मुझे इसे किसी भी दस्तावेज़ को खोलने से पहले इसे (शब्द ऐप) दिखाना चाहिए। (असल में, यहां तक कि मैं खुद को यह समझा नहीं सकता कि यह क्यों काम करता है। अगर मैं अपने कंप्यूटर पर ऐसा नहीं करता हूं, तो जब मैं अदृश्य मॉडल में कोई दस्तावेज़ खोलने का प्रयास करता हूं तो प्रोग्राम क्रैश हो जाएगा, फिर 'Word.Aplication' ऑब्जेक्ट को हटा दिया जाएगा ओएस।)
(2)।(1) करने के बाद, कार्यक्रम कभी-कभी अच्छी तरह से काम करेगा लेकिन अक्सर असफल हो सकता है। क्रैश त्रुटि "COMError: (-2147418111, 'Call was rejected by callee.', (None, None, None, 0, None))"
का अर्थ है कि COM सर्वर इतनी जल्दी प्रतिक्रिया देने में सक्षम नहीं हो सकता है। इसलिए मैंने दस्तावेज़ खोलने की कोशिश करने से पहले देरी जोड़ दी।
इन दो चरणों के बाद, कार्यक्रम पूरी तरह से विफलता के साथ काम करेगा। डेमो कोड नीचे जैसा है। यदि आपको एक ही समस्या का सामना करना पड़ा है, तो इन दो चरणों का पालन करने का प्रयास करें। आशा करता हूँ की ये काम करेगा।
import os
import comtypes.client
import time
wdFormatPDF = 17
# absolute path is needed
# be careful about the slash '\', use '\\' or '/' or raw string r"..."
in_file=r'absolute path of input docx file 1'
out_file=r'absolute path of output pdf file 1'
in_file2=r'absolute path of input docx file 2'
out_file2=r'absolute path of outputpdf file 2'
# print out filenames
print in_file
print out_file
print in_file2
print out_file2
# create COM object
word = comtypes.client.CreateObject('Word.Application')
# key point 1: make word visible before open a new document
word.Visible = True
# key point 2: wait for the COM Server to prepare well.
time.sleep(3)
# convert docx file 1 to pdf file 1
doc=word.Documents.Open(in_file) # open docx file 1
doc.SaveAs(out_file, FileFormat=wdFormatPDF) # conversion
doc.Close() # close docx file 1
word.Visible = False
# convert docx file 2 to pdf file 2
doc = word.Documents.Open(in_file2) # open docx file 2
doc.SaveAs(out_file2, FileFormat=wdFormatPDF) # conversion
doc.Close() # close docx file 2
word.Quit() # close Word Application
यह वही है जो मैं ढूंढ रहा था। धन्यवाद :) – nik
कई फाइलों के लिए, सेटिंग पर विचार करें: शब्द शब्द के समय और प्रसंस्करण को बचाने के लिए 'शब्द। दृश्यमान = गलत' (एमएस शब्द इस तरह प्रदर्शित नहीं होगा, कोड अनिवार्य रूप से पृष्ठभूमि में चलाएगा) – ecoe
मैं प्राप्त करने में कामयाब रहा हूं यह पावरपॉइंट दस्तावेज़ों के लिए काम कर रहा है। 'Powerpoint.Aplication', 'प्रस्तुतियां। खोलें' और 'FileFormat = 32' का उपयोग करें। – Snorfalorpagus