2010-10-14 6 views
8

Ich suche nach einer Möglichkeit, eine formatierte HTML-Datei im Querformat in C# (in erster Linie WPF) zu drucken. Der Druckdialog wäre nett, um die Seiteneinstellung auf Querformat zu setzen. Ich habe versucht, den HTML-to-Xaml-Konverter von Microsoft zu verwenden, und es hat die Formatierung zerstört. Ich finde es ziemlich erstaunlich, dass es keine Methode gibt oder eine Datei ergreift und direkt an einen Drucker sendet.Drucken einer formatierten HTML-Seite in C#

Alle Ideen würden sehr geschätzt werden.

Antwort

2

Es klingt für mich wie der beste Weg, den Sie gehen möchten, ist zunächst die HTML-Rendering-Engine auswählen und suchen Sie nach Druckunterstützung. Es gibt keine "Standard" -Möglichkeit, ein HTML-Dokument unabhängig von Sprache, Betriebssystem oder Framework zu drucken.

9

Sie können auf die Print() - Methode der WebBrowser-Klasse in C# zugreifen, um dies zu tun. Die coole Sache ist, dass Sie den WebBrowser nicht irgendwo in Ihrer Anwendung anzeigen müssen. Einfach nur füttern den Inhalt an das WebBrowser-Steuerelement wie folgt:

webBrowser1.DocumentContent = openfiledialog.FileName;

Und dann rufen Sie einfach die webBrowser1.Print(); Methode. Hier ist eine MSDN-Referenz:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.print.aspx

Hoffnung, das hilft.

+0

Sie sollten beachten, dass dies nur vom Windows Forms-WebBrowser-Steuerelement und nicht von WPF unterstützt wird. – ygoe

1

Vielleicht so etwas wie:

webBrowser1.DocumentContent = YOUR_FILE_NAME; 
mshtml.IHTMLDocument2 doc = webBrowser1.Document as mshtml.IHTMLDocument2; 
doc.execCommand("Print", true, null); 
11
WebBrowser myWebBrowser = new WebBrowser(); 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      myWebBrowser.DocumentCompleted += myWebBrowser_DocumentCompleted; 
      myWebBrowser.DocumentText =System .IO.File .ReadAllText (@"C:\a.htm"); 
     } 

     private void myWebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      myWebBrowser.Print(); 
     } 
+0

Funktioniert wie ein Charme! –

+0

Dieser Code ist offensichtlich für Windows Forms anstelle von WPF. Das WPF WebBrowser-Steuerelement unterstützt das nicht (es kann nicht drucken). – ygoe

4

Seit vielen Jahren haben wir die .net WebBrowser-Steuerelement verwendet, wie in anderen Antworten skizziert, aber in jüngster Zeit, dass geworden Kontrolle mehr und mehr instabil. Selbst wenn wir die Maschine, mit der wir unsere Pick-Sheets im Warehouse für die Ausführung von Windows 10 drucken, neu erstellen, haben wir immer noch Probleme mit Seiten, die einfach nie gedruckt werden, bis wir den Computer neu starten. Der gleiche Code hat uns gut über 4 Jahre hinweg gedient, aber jetzt scheint es, dass jüngste Updates von Microsoft diese Kontrolle noch buggyer gemacht haben als in der Vergangenheit. Das andere wichtige Problem ist, dass es keine einfache Möglichkeit gibt, auf einen anderen Drucker als den für Internet Explorer festgelegten Standard zu drucken. Wenn Sie also auf verschiedenen Druckern drucken möchten, haben Sie mit dieser Steuerung ziemlich viel Glück.

Vor vielen Jahren haben wir eine Version unseres Druckcodes für Packzettel mit C++ und der QtWebKit-Bibliothek geschrieben. Um diese Probleme zu lösen, grub ich die alte C++ - Anwendung aus, die Webseiten-Dateien druckte und in dieses Projekt verwandelte, um über die Befehlszeile zu drucken, und ermöglichte es, auf verschiedenen Druckern zu drucken.

Sie können den Quellcode für es hier:

https://github.com/kendallb/PrintHtml

und Sie können ein Download 32-Bit-Binär-vorkompilierte für Windows MinGW mit von hier:

https://github.com/kendallb/PrintHtml/blob/master/deploy/PrintHtml-window-x86.zip?raw=true

Der Code ist vollständig portierbar, so dass Sie ihn leicht kompilieren können, um auf Mac OS oder Linux zu laufen, wenn es aus dem Quellcode gewünscht wird.

Die Kommandozeile ist ziemlich einfach zu bedienen und die Nutzung ist unter:

Usage: PrintHtml [-test] [-p printer] [-l left] [-t top] [-r right] [-b bottom] <url> [url2] 

-test   - Don't print, just show what would have printed. 
-p printer - Printer to print to. Use 'Default' for default printer. 
-l left  - Optional left margin for page. 
-t top  - Optional top margin for page. 
-r right  - Optional right margin for page. 
-b bottom  - Optional bottom margin for page. 
url   - Defines the list of URLs to print, one after the other. 

Offensichtlich ist dies die Verwendung von einer .NET-Anwendung müssen Sie es auf der Kommandozeile, um laichen, aber das ist ziemlich einfach, machen. im Verzeichnis ist das PrintHtml.exe Programm Unter der Annahme, für Ihre Anwendung oder Website ist, können Sie es von .net wie so laufen:

public bool PrintHtmlPages(
    string printer, 
    List<string> urls) 
{ 
    try { 
     // Spawn the code to print the packing slips 
     var info = new ProcessStartInfo(); 
     info.Arguments = $"-p \"{printer}\" \"{string.Join("\" \"", urls)}\""; 
     var pathToExe = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
     info.FileName = Path.Combine(pathToExe, "PrintHtml.exe"); 
     using (var p = Process.Start(info)) { 
      // Wait until it is finished 
      while (!p.HasExited) { 
       Application.DoEvents(); 
       System.Threading.Thread.Sleep(10); 
      } 

      // Return the exit code 
      return p.ExitCode == 0; 
     } 
    } catch { 
     return false; 
    } 
} 

Vielen Spaß!

+0

Um Dank zu sagen, muss ich einen Tag verbringen, um +50 Ruf zu bekommen: D. Du hast mein Leben gerettet. – huydq5000

Verwandte Themen