Vreau să tipăresc HTML dintr-un serviciu web C #. Controlul browserului web este supraîncărcat și nu funcționează bine într-un mediu de serviciu și nici nu funcționează bine într-un sistem cu constrângeri de securitate foarte stricte. Există vreun fel de librărie .NET
gratuită, care va suporta imprimarea unei pagini HTML de bază? Iată codul pe care îl am până acum, care nu funcționează corect.
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();
}
Acest lucru funcționează bine atunci când este chemat din fire de tip UI, dar nu se întâmplă nimic atunci când este apelat de la un fir de tip serviciu. Modificarea Print()
la ShowPrintPreviewDialog()
produce următoarea eroare de script IE:
Error: 'dialogArguments.___IE_PrintType' is null or not an object
URL: res://ieframe.dll/preview.dlg
Apare un dialog mic de examinare a tipăririi goale.