c# - webservice - Comment imprimer un document HTML à partir d'un service Web?




web service vb (5)

Facile! Divisez votre problème en deux parties plus simples:

  1. rendre le HTML en PDF
  2. imprimer le PDF ( SumatraPDF )
  • -print-to-default $file.pdf imprime un fichier PDF sur une imprimante par défaut
  • -print-to $printer_name $file.pdf imprime un fichier PDF sur une imprimante donnée

Je souhaite imprimer du HTML à partir d'un service Web C #. Le contrôle du navigateur Web est excessif et ne fonctionne pas bien dans un environnement de service, pas plus que sur un système soumis à des contraintes de sécurité très strictes. Existe-t-il une sorte de bibliothèque .NET gratuite qui prend en charge l’impression d’une page HTML de base? Voici le code que j'ai jusqu'à présent, qui ne fonctionne pas correctement.

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();
}

Cela fonctionne bien lorsqu'il est appelé à partir de threads de type UI, mais rien ne se produit lorsqu'il est appelé à partir d'un thread de type service. La modification de Print() en ShowPrintPreviewDialog() l'erreur de script IE suivante:

Erreur: dialogArguments.___IE_PrintType est null ou n'est pas un objet.

URL: res://ieframe.dll/preview.dlg

Et une petite boîte de dialogue d'aperçu avant impression vide apparaît.


HiQPdf est un outil qui fonctionne très bien pour moi. https://www.hiqpdf.com/

Le prix est raisonnable (commence à 245 $) et il peut rendre HTML au format PDF et également gérer directement l’impression des fichiers PDF.


Je sais que Visual Studio lui-même (du moins dans la version 2003) fait directement référence à la DLL IE pour rendre la "Vue de conception".

Cela vaut peut-être la peine d’y réfléchir.

Sinon, je ne peux penser à rien au-delà du contrôle du navigateur Web.


Peut-être que ça va aider. http://www.codeproject.com/KB/printing/printhml.aspx Vous ne savez pas non plus à quel fil vous essayez d'accéder au contrôle du navigateur, mais il doit s'agir de STA

Remarque - Le projet référencé dans le lien vous permet de naviguer vers une page et d'effectuer une impression sans afficher la boîte de dialogue Imprimer.


Vous pouvez imprimer à partir de la ligne de commande en utilisant les éléments suivants:

rundll32.exe% WINDIR% \ System32 \ mshtml.dll, PrintHTML "% 1"

Où% 1 est le chemin du fichier html à imprimer.

Si vous n'avez pas besoin d'imprimer depuis la mémoire (ou si vous pouvez vous permettre d'écrire sur le disque dans un fichier temporaire), vous pouvez utiliser:

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();
}

NB: cela ne fonctionne que sur Windows 2000 et supérieur, je pense.





printing