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

मैं एक सी # वेब सेवा से एचटीएमएल मुद्रित करना चाहता हूँ। वेब ब्राउज़र नियंत्रण अधिक है, और सेवा वातावरण में अच्छी तरह से काम नहीं करता है, और न ही यह बहुत सख्त सुरक्षा बाधाओं वाले सिस्टम पर अच्छा काम करता है। क्या कोई भी प्रकार का मुफ्त .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() में बदलकर निम्नलिखित आईई स्क्रिप्ट त्रुटि उत्पन्न होती है:

Error: 'dialogArguments.___IE_PrintType' is null or not an object
URL: res://ieframe.dll/preview.dlg

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

0
जोड़ा संपादित
विचारों: 3
@mruanova आखिरी बार जवाबों में से कोई भी काम नहीं किया मैंने कोशिश की। यदि आपके पास कुछ ऐसा काम है जो हमें बताता है।
जोड़ा लेखक Chris Marasti-Georg, स्रोत
कृपया सबसे अच्छा जवाब का चयन करें, धन्यवाद।
जोड़ा लेखक mruanova, स्रोत

6 उत्तर

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

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

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

0
जोड़ा

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

rundll32.exe   % WINDIR% \ System32 \ mshtml.dll, PrintHTML   "% 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();
}

N.B. यह केवल विंडोज 2000 और इससे ऊपर काम करता है मुझे लगता है।

0
जोड़ा
महान जवाब - इसे स्वीकार करने के लिए जा रहा था, और मेरा परीक्षण चलाया। ऐसा लगता है कि डीएलएल अभी भी प्रिंट संवाद को पॉप अप करता है, और चूंकि यह एक अप्रत्याशित विंडोज सेवा के रूप में चलाने के लिए है, हमें किसी भी तरह से इसे बाईपास करने की आवश्यकता है। मैंने Google को बहुत थका दिया है, और मैं अपने wits अंत में हूँ।
जोड़ा लेखक Chris Marasti-Georg, स्रोत
दुर्भाग्य से प्रिंटर संवाद प्रकट होता है। मैंने विंडोज 7 एक्स 64 पर परीक्षण किया।
जोड़ा लेखक LukTar, स्रोत

आसान! अपनी समस्या को दो सरल भागों में विभाजित करें:

  1. HTML को पीडीएफ में प्रस्तुत करें
  2. पीडीएफ प्रिंट करें ( सुमात्रा पीडीएफ )
  • -print-to-default $file.pdf prints a PDF file on a default printer
  • -print-to $printer_name $file.pdf prints a PDF on a given printer
0
जोड़ा
आखिरी बार मैंने चेक किया, भाग 2 (एडोब के साथ कमांड लाइन के माध्यम से प्रिंटिंग) एक सेवा में काम नहीं करता है - इसके लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है।
जोड़ा लेखक Chris Marasti-Georg, स्रोत
सुमात्रा पीडीएफ आज़माएं यह बहुत तेज है blog.kowalczyk.info/software/ SumatraPDF / & hellip;
जोड़ा लेखक Colonel Panic, स्रोत

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

0
जोड़ा

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

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

0
जोड़ा

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

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

0
जोड़ा