c# उनल मैं एक वेब सेवा से एक HTML दस्तावेज़ कैसे मुद्रित करूं?




वेब पेज डाउनलोड (5)

मैं एक सी # वेब सेवा से एचटीएमएल मुद्रित करना चाहता हूँ। वेब ब्राउज़र नियंत्रण अधिक है, और सेवा वातावरण में अच्छी तरह से काम नहीं करता है, और न ही यह बहुत सख्त सुरक्षा बाधाओं वाले सिस्टम पर अच्छा काम करता है। क्या कोई भी मुफ्त .NET लाइब्रेरी है जो मूल HTML पृष्ठ की छपाई का समर्थन करेगी? यहां मेरे पास अभी तक कोड है, जो ठीक से नहीं चलता है।

public void PrintThing(string document)
{
    if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
    {
        Thread thread =
            new Thread((ThreadStart) delegate { PrintDocument(document); });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    else
    {
        PrintDocument(document);
    }
}

protected void PrintDocument(string document)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentText = document;
    while (browser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    browser.Print();
}

यूआई-प्रकार धागे से बुलाए जाने पर यह ठीक काम करता है, लेकिन सेवा-प्रकार धागे से बुलाए जाने पर कुछ भी नहीं होता है। ShowPrintPreviewDialog() Print() को बदलना निम्नलिखित आईई स्क्रिप्ट त्रुटि उत्पन्न करता है:

त्रुटि: 'संवाद अस्वीकरण .___ IE_PrintType' शून्य है या कोई ऑब्जेक्ट नहीं है
यूआरएल: res: //ieframe.dll/preview.dlg

और एक छोटा खाली प्रिंट पूर्वावलोकन संवाद प्रकट होता है।


शायद यह मदद करेगा। http://www.codeproject.com/KB/printing/printhml.aspx यह भी सुनिश्चित नहीं है कि आप ब्राउज़र नियंत्रण तक पहुंचने का प्रयास कर रहे हैं, लेकिन इसे एसटीए होना चाहिए

नोट - लिंक में उल्लिखित परियोजना आपको एक पृष्ठ पर नेविगेट करने और प्रिंट संवाद दिखाने के बिना प्रिंट करने की अनुमति देती है।


मुझे पता है कि विजुअल स्टूडियो स्वयं (कम से कम 2003 संस्करण में) आईई डीएल को "डिजाइन व्यू" प्रस्तुत करने के लिए सीधे संदर्भित करता है।

यह देखने लायक हो सकता है।

अन्यथा, मैं वेब ब्राउज़र नियंत्रण से परे कुछ भी नहीं सोच सकता।


मुझे विशिष्ट उपकरण नहीं पता हैं, लेकिन कुछ उपयोगिताएं हैं जो क्लिक को रिकॉर्ड / रीप्ले करती हैं। दूसरे शब्दों में, आप प्रिंट संवाद पर "क्लिक" स्वचालित कर सकते हैं। (मुझे पता है कि यह एक हैक है, लेकिन जब सब कुछ विफल रहता है ...)


आप निम्न का उपयोग कर कमांड लाइन से प्रिंट कर सकते हैं:

rundll32.exe% WINDIR% \ System32 \ mshtml.dll, प्रिंट HTML "% 1"

जहां% 1 HTML फ़ाइल का फ़ाइल पथ मुद्रित किया जाना है।

अगर आपको स्मृति से प्रिंट करने की आवश्यकता नहीं है (या एक अस्थायी फ़ाइल में डिस्क पर लिखने का जोखिम हो सकता है) तो आप इसका उपयोग कर सकते हैं:

using (Process printProcess = new Process())
{
    string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
    printProcess.StartInfo.FileName = systemPath + @"\rundll32.exe";
    printProcess.StartInfo.Arguments = systemPath + @"\mshtml.dll,PrintHTML """ + fileToPrint + @"""";
    printProcess.Start();
}

एनबी यह केवल विंडोज 2000 और इससे ऊपर काम करता है मुझे लगता है।


यदि आपको बजट (~ $ 3000) में मिला है, तो प्रिंसएक्सएमएल देखें

यह एचटीएमएल को एक पीडीएफ में प्रस्तुत करेगा, एक सेवा वातावरण में अच्छी तरह से काम करेगा, और उन्नत सुविधाओं का समर्थन करता है जैसे टेबल सेल के बीच में एक पेज तोड़ना नहीं (जो कि बहुत से ब्राउज़र वर्तमान में समर्थन नहीं करते हैं)।





printing