Ich möchte HTML von einem C # -Webedienst drucken. Die Webbrowser-Steuerung ist übertrieben und funktioniert weder in einer Serviceumgebung noch auf einem System mit sehr strengen Sicherheitsbeschränkungen. Gibt es eine kostenlose .NET
Bibliothek, die das Drucken einer einfachen HTML-Seite unterstützt? Hier ist der Code, den ich bisher habe und der nicht richtig läuft.
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();
}
Dies funktioniert gut, wenn es von Threads vom Typ UI aufgerufen wird, aber nichts passiert, wenn es von einem Thread vom Typ Service aufgerufen wird. Das Ändern Print()
auf ShowPrintPreviewDialog()
ergibt den folgenden IE-Skriptfehler:
Fehler:
dialogArguments.___IE_PrintType
ist null oder kein Objekt.URL:
res://ieframe.dll/preview.dlg
Ein kleines leeres Druckvorschau-Dialogfeld wird angezeigt.
quelle
Antworten:
Sie können über die Befehlszeile wie folgt drucken:
Dabei ist% 1 der Dateipfad der zu druckenden HTML-Datei.
Wenn Sie nicht aus dem Speicher drucken müssen (oder es sich leisten können, in einer temporären Datei auf die Festplatte zu schreiben), können Sie Folgendes verwenden:
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(); }
Hinweis: Dies funktioniert nur unter Windows 2000 und höher, denke ich.
quelle
Ich weiß, dass Visual Studio selbst (zumindest in der Version 2003) direkt auf die IE-DLL verweist, um die "Design View" zu rendern.
Es kann sich lohnen, dies zu untersuchen.
Ansonsten fällt mir nichts ein, was außerhalb der Kontrolle des Webbrowsers liegt.
quelle
Einfach! Teilen Sie Ihr Problem in zwei einfachere Teile auf:
quelle
Wenn Sie es im Budget haben (~ $ 3000), schauen Sie sich PrinceXML an .
Es rendert HTML in eine PDF-Datei, funktioniert gut in einer Serviceumgebung und unterstützt erweiterte Funktionen wie das Nicht-Brechen einer Seite in der Mitte einer Tabellenzelle (die viele Browser derzeit nicht unterstützen).
quelle
Vielleicht hilft das. http://www.codeproject.com/KB/printing/printhml.aspx Sie sind sich auch nicht sicher, von welchem Thread Sie auf das Browser-Steuerelement zugreifen möchten, aber es muss STA sein
Hinweis - Mit dem Projekt, auf das im Link verwiesen wird, können Sie zu einer Seite navigieren und einen Druck ausführen, ohne den Druckdialog anzuzeigen.
quelle
Ich Tool, das für mich sehr gut funktioniert, ist HiQPdf. https://www.hiqpdf.com/
Der Preis ist angemessen (ab 245 US-Dollar) und es kann HTML in ein PDF rendern und auch das Drucken der PDF-Dateien direkt verwalten.
quelle
Ich kenne die spezifischen Tools nicht, aber es gibt einige Dienstprogramme, die Klicks aufzeichnen / wiedergeben. Mit anderen Worten, Sie können das "Klicken" im Druckdialog automatisieren. (Ich weiß, dass dies ein Hack ist, aber wenn alles andere fehlschlägt ...)
quelle