2008-08-01 8 views
66

मैं एक सी # वेब सेवा से एचटीएमएल मुद्रित करना चाहता हूं। वेब ब्राउज़र नियंत्रण अधिक है, और सेवा वातावरण में अच्छी तरह से काम नहीं करता है, और न ही यह बहुत सख्त सुरक्षा बाधाओं वाले सिस्टम पर अच्छा काम करता है। क्या कोई भी प्रकार का .NET लाइब्रेरी है जो मूल HTML पृष्ठ की छपाई का समर्थन करेगा? यहां मेरे पास अभी तक कोड है, जो ठीक से नहीं चलता है।मैं एक वेब सेवा से एक 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(); 
} 

यह यूआई-प्रकार धागे से बुलाए जाने पर ठीक काम करता है, लेकिन सेवा-प्रकार धागे से कॉल होने पर कुछ भी नहीं होता है।

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

और एक छोटे से खाली मुद्रण पूर्वावलोकन संवाद प्रकट होता है: ShowPrintPreviewDialog() को Print() बदलने निम्नलिखित IE स्क्रिप्ट त्रुटि अर्जित करता है।

+0

कृपया सर्वश्रेष्ठ उत्तर का चयन करें, धन्यवाद। – mruanova

+0

@mruanova आखिरी बार जवाबों में से कोई भी काम नहीं किया मैंने कोशिश की। यदि आपके पास कुछ ऐसा काम है जो हमें बताता है। –

उत्तर

3

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

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

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

28

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

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 अंत में हूँ। –

+0

दुर्भाग्य से प्रिंटर संवाद प्रकट होता है। मैंने विंडोज 7 एक्स 64 पर परीक्षण किया। – LukTar

-1

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

0

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

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

3

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

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

3

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

  1. render the HTML to PDF
  2. प्रिंट पीडीएफ (SumatraPDF)
  • -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 (एडोब के साथ कमांड लाइन के माध्यम से प्रिंटिंग) एक सेवा में काम नहीं करता है - इसके लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है। –

+1

सुमात्रा पीडीएफ आज़माएं यह बहुत तेज है http://blog.kowalczyk.info/software/sumatrapdf/manual.html#manual-cmd-line –

संबंधित मुद्दे