Durante muchos años hemos utilizado el control WebBrowser .NET como se indica en otras respuestas, sin embargo, más recientemente, de que el control se ha vuelto más y más inestable. Incluso reconstruyendo la máquina que utilizamos para imprimir nuestras hojas de recogida en el almacén para ejecutar Windows 10, todavía tenemos problemas con páginas que simplemente nunca imprimen hasta que reiniciamos la computadora. El mismo código nos sirvió durante más de 4 años, pero ahora parece que las actualizaciones recientes de Microsoft han hecho que este control sea aún más complicado de lo que era en el pasado.
El otro problema importante es que no hay una forma fácil de imprimir en una impresora que no sea el predeterminado para Internet Explorer, por lo que si desea imprimir en diferentes impresoras, no tiene suerte con ese control.
Hace muchos años, escribimos una versión de nuestro código de impresión para las hojas de empaque utilizando C++ y la biblioteca QtWebKit. Entonces, para resolver estos problemas, desenterré la antigua aplicación C++ que imprimía archivos de páginas web y la convertí en este proyecto para imprimirla a través de la línea de comandos, y pude imprimirla en diferentes impresoras.
Puede obtener el código fuente desde aquí:
https://github.com/kendallb/PrintHtml
y se puede descargar un binario de 32 bits pre-compilado para Windows utilizando MinGW desde aquí:
https://github.com/kendallb/PrintHtml/blob/master/deploy/PrintHtml-window-x86.zip?raw=true
El código es completamente portátil, por lo que puede compilarlo fácilmente para ejecutarlo en macOS o Linux si lo desea desde el código fuente.
La línea de comandos es bastante fácil de usar y el uso es el siguiente:
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.
evidentemente para esto desde una aplicación .NET que necesitará para desovar en la línea de comandos, pero que es bastante fácil que hacer. Suponiendo que el programa PrintHtml.exe se encuentra en el directorio bin para su aplicación o sitio web, puede ejecutarlo desde .NET, así:
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;
}
}
Enjoy!
Debe tener en cuenta que esto solo es compatible con el control WebBrowser de Windows Forms, no con el de WPF. – ygoe