2010-09-09 15 views
5

के लिए गंतव्य प्रिंटर को प्रोग्रामेटिक रूप से बदलना मैं एक बहुत ही सरल HTML दस्तावेज़ मुद्रित करने के लिए एक अदृश्य WebBrowser नियंत्रण का उपयोग करने का प्रयास कर रहा हूं। हमारे आवेदन के लिए आवश्यक है कि हम इस तरह के कई दस्तावेजों को प्रिंट करने में सक्षम होंगे, और वे सभी अलग-अलग प्रिंटर को भेजे जा सकते हैं। दुर्भाग्य से, मैं आउटपुट को सही प्रिंटर पर जाने में बहुत सफल नहीं रहा हूं।WinForms WebBrowser नियंत्रण

जिस तरह से यह अभी काम करता है वह यह है कि दस्तावेज़ मुद्रित करने से पहले, एप्लिकेशन निर्धारित करता है कि कौन सा प्रिंटर इसे प्राप्त करना है, और तदनुसार डिफ़ॉल्ट प्रिंटर सेट करता है। ऐसा करने के लिए यह WinSpool.drv से आयातित SetDefaultPrinter() का उपयोग करता है। यदि मैं डीबग मोड में कोड को चलाता हूं तो मैं स्पष्ट रूप से देख सकता हूं कि डिफ़ॉल्ट प्रिंटर बदलता है (और यह परिवर्तन नियंत्रण कक्ष UI में दिखाई देता है), लेकिन WebBrowser अभी भी मूल डिफ़ॉल्ट प्रिंटर का उपयोग करने पर जोर देता है।

एमएसडीएन दस्तावेज, जो मैंने देखा है, वास्तव में इस परिदृश्य के लिए समाधान प्रदान नहीं करता है। मैं कुछ प्रोग्राम की सराहना करता हूं कि मैं इस प्रोग्राम को कैसे पूरा कर सकता हूं।

+0

: यदि आप मेरा उत्तर स्वीकार किए जाते हैं, लेकिन मैं के बारे में 6 अलग सुझाव दिए। आप किस समाधान के साथ गए थे: किसने आपके लिए काम किया? – ChrisW

+1

@ChrisW: इस बारे में स्पष्ट नहीं होने के लिए खेद है। ActiveX एपीआई का उपयोग करने से अंततः समस्या हल हो गई। असल में, मैं WebBrowser.ActiveXInstance ऑब्जेक्ट को पकड़ता हूं, PrintTemplateTeardown ईवेंट के लिए एक हैंडलर पंजीकृत करता हूं और मुद्रित होने पर विचार करने से पहले इसे होने का इंतजार करता हूं। दिलचस्प बात यह है कि हमने प्रबंधित वेबब्रोसर रैपर नियंत्रण के साथ हमारे सभी प्रिंट गंतव्य मुद्दों का समाधान किया। आपकी सलाह के लिए धन्यवाद! –

उत्तर

1

आपने जो कहा है, उसे देखते हुए, शायद यदि आप वेब ब्राउज़र नियंत्रण (या वेब ब्राउज़र नियंत्रण) की प्रक्रिया को पुनरारंभ करते हैं, तो डिफ़ॉल्ट प्रिंटर बदलने के बाद? उदाहरण के लिए, the kind of thing I see happening here है।


मैं इसे एक पृष्ठभूमि प्रक्रिया है कि वास्तविक मुद्रण करता है बंद कांटा करने के लिए संभव हो जाएगा लगता है, लेकिन मैं वास्तव में एक सरल समाधान के लिए उम्मीद कर रहा हूँ।

फोर्किंग संभवतः सबसे सरल समाधान की ओर मेरा पहला विचार था।

कुछ अन्य विकल्प निम्नानुसार हैं।

1)। आईई, जो वेबब्रोसर नियंत्रण लपेट रहा है, ActiveX के माध्यम से एपीआई का खुलासा करता है। इसके/उन एपीआई में से एक आपको गंतव्य प्रिंटर निर्दिष्ट करने दे सकता है।

2)। कुछ निष्पादन योग्य (मुझे IE के बारे में पता नहीं है) रजिस्ट्री में printto प्रविष्टियां हैं। उदाहरण के लिए, एक्रोबैट रीडर एक प्रवेश जिसका मूल्य है इस प्रकार है:

""C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe"" /t "%1" "%2" "%3" "%4" 

कमांड लाइन जिसे आप प्रिंट और एक (गैर डिफ़ॉल्ट) प्रिंटर निर्दिष्ट करने के लिए उपयोग कर सकते हैं की वाक्य रचना निर्दिष्ट करने के लिए प्रयोग किया जाता है यही कारण है कि। आप printto के लिए Google भी देख सकते हैं, उदाहरण देखें PrintTo command in the ShellExecute

3)। मैंने अपने खुद के HTML control for .NET को लागू किया है, जो आईई पर निर्भर नहीं है। आप कहते हैं कि आपका एचटीएमएल (और सीएसएस I अनुमान) सरल है, तो शायद I can render it, या तो बॉक्स से बाहर या केवल थोड़ा अतिरिक्त विकास प्रयास के साथ। मैं प्रिंटिंग का समर्थन नहीं करता, लेकिन उपयोगकर्ता नियंत्रण को कार्यान्वित करने के लिए प्रिंटिंग काफी आसान है। मुझे यह लागू करने के लिए कि आप के लिए कई सौ खर्च होंगे, लेकिन कौन जानता है, शायद यह आपके लिए लायक है। यह काफी हल्का वजन समाधान होगा, और शायद अच्छी तरह से समर्थित है। यदि आप आगे चर्चा करना चाहते हैं तो आप मुझे ईमेल कर सकते हैं।

4)। आपको मेरे जैसे अन्य नियंत्रण भी मिल सकते हैं, कम या ज्यादा प्रसिद्ध/महंगे; या अन्य अनुप्रयोग, उदा। ओपनऑफिस इत्यादि।

5)। आप HTML (किसी भी तरह) को किसी अन्य प्रारूप (उदा। पीडीएफ) में परिवर्तित करने पर विचार कर सकते हैं जिसके लिए आपके पास एक ऐसा एप्लिकेशन है जो आपको प्रिंटिंग के लिए बेहतर समर्थन देता है।

+0

दुर्भाग्यवश, प्रश्न में एप्लिकेशन एक व्यवसाय-महत्वपूर्ण सर्वर है जिसे किसी दस्तावेज़ को मुद्रित करने के लिए हर बार पुनरारंभ करने की अनुमति नहीं दी जा सकती है। मुझे लगता है कि एक पृष्ठभूमि प्रक्रिया को तोड़ना संभव होगा जो वास्तविक प्रिंटिंग करता है, लेकिन मैं वास्तव में एक सरल समाधान की उम्मीद कर रहा हूं। –

+0

@ मार्टिन टोरनवाल - मैंने अपने उत्तर के लिए अन्य संभावित समाधान जोड़े। – ChrisW

+0

शायद यह पोस्ट उपयोगी हो सकता है: http://stackoverflow.com/questions/714507/how-do-i-programatically-change-printer-settings-with-the-webbrowser-control –

0

मुझे एक ही समस्या है, और मानक .NET WebBrowser के बजाय this control को इसके आसपास काम करने के लिए शामिल किया गया है।

-1

यह .NET 3.5 पर काम करता है, अगर पहले नहीं

this.webBrowser1.ShowPrintDialog(); 
जिज्ञासा से बाहर
संबंधित मुद्दे