Pendant de nombreuses années, nous avons utilisé le contrôle WebBrowser .net comme indiqué dans d'autres réponses, mais plus récemment que le contrôle est devenu de plus en plus instable. Même en reconstruisant la machine que nous utilisons pour imprimer nos feuilles de sélection dans l'entrepôt pour exécuter Windows 10, nous avons toujours des problèmes avec les pages qui ne s'impriment jamais jusqu'à ce que nous redémarrions l'ordinateur. Le même code nous a bien servi pendant 4 ans et plus, mais il semble maintenant que les récentes mises à jour de Microsoft ont rendu ce contrôle encore plus bogué que par le passé.
L'autre problème majeur est qu'il n'existe aucun moyen facile d'imprimer sur une imprimante autre que celle définie par défaut pour Internet Explorer. Par conséquent, si vous souhaitez imprimer sur différentes imprimantes, vous n'aurez pas vraiment de chance.
Il y a plusieurs années, nous avons écrit une version de notre code d'impression pour les bordereaux d'emballage en utilisant C++ et la bibliothèque QtWebKit. Donc, pour résoudre ces problèmes, j'ai déterré l'ancienne application C++ qui imprime les fichiers de pages Web et l'a transformée en projet pour imprimer via la ligne de commande, et l'a permis d'imprimer sur différentes imprimantes.
Vous pouvez obtenir le code source ici:
https://github.com/kendallb/PrintHtml
et vous pouvez télécharger une pré-compilé pour Windows en utilisant MinGW binaire 32 bits d'ici:
https://github.com/kendallb/PrintHtml/blob/master/deploy/PrintHtml-window-x86.zip?raw=true
Le code est entièrement portable de sorte que vous pouvez facilement le compiler pour s'exécuter sur macOS ou Linux si vous le souhaitez à partir du code source.
La ligne de commande est assez facile à utiliser et l'utilisation est ci-dessous:
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.
Il est évident que d'utiliser ce à partir d'une application .NET, vous aurez besoin pour se reproduire sur la ligne de commande, mais qui est assez facile faire. En supposant que le programme PrintHtml.exe est dans le répertoire bin pour votre application ou d'un site Web, vous pouvez l'exécuter à partir .net comme ceci:
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!
Vous devez noter que cela est uniquement pris en charge par le contrôle Windows Forms WebBrowser, pas celui de WPF. – ygoe