c # - Sådan udskriver du formateret tekst fra en webserver med bekræftelse på succesfuld udskrivning?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at opbygge et system, der vil downloade formateret tekst fra en webserver, udskrive den formaterede tekst, bekræfte, at udskriftsjobbet er gennemført og derefter svare på webserveren for at lade det vide, at teksten blev udskrevet. Alt uden brugerindgang.


Jeg har haft succes ved at bruge webbrowser kontrollen til at hente HTML og derefter udskrive den uden brug af bruger input. Dette er imidlertid kortfattet om evnen til at bekræfte udskrivningen. [2]


Det ser ud som om i System.Printing du kan få adgang til en PrintServer og en PrintQueue og bruge begge til at starte udskriftsjob og også finde status for udskriftsjob. [3]


Jeg har endnu ikke kunnet bekræfte et udskriftsjob, men jeg har kunnet igangsætte enkel udskrivning, men det har ikke nogen HTML-formatering fra webserveren. Jeg er ikke bundet til HTML, men den har ikke at være nogle formateringer, der kan produceres af webserveren, så det kan ændres uden at skulle opdatere klientprogrammet.


Hvordan kan jeg udskrive output fra webserveren, korrekt formateret og vide, om udskriftsjobbet lykkes eller fejler?

Bedste reference


Jeg antager, at du er villig til at bruge WebBrowser-styringen. Her er en løsning til at bekræfte udskrivningen. Du skal i princippet håndtere PrintTemplateTeardown -hændelsen for at vente på udskriftsjobbet.]]


Følgende er en prøvekode hentet fra svaret i: Udskriv html-dokument fra Windows Service uden udskrivningsdialog


using System.Reflection;
using System.Threading;
using SHDocVw;

namespace HTMLPrinting
{
  public class HTMLPrinter
  {
    private bool documentLoaded;
    private bool documentPrinted;

    private void ie\_DocumentComplete(object pDisp, ref object URL)
    {
      documentLoaded = true;
    }

    private void ie\_PrintTemplateTeardown(object pDisp)
    {
      documentPrinted = true;
    }

    public void Print(string htmlFilename)
    {
      documentLoaded = false;
      documentPrinted = false;

      InternetExplorer ie = new InternetExplorerClass();
      ie.DocumentComplete += new DWebBrowserEvents2\_DocumentCompleteEventHandler(ie\_DocumentComplete);
      ie.PrintTemplateTeardown += new DWebBrowserEvents2\_PrintTemplateTeardownEventHandler(ie\_PrintTemplateTeardown);

      object missing = Missing.Value;

      ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
      while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID\_PRINT) != OLECMDF.OLECMDF\_ENABLED)
        Thread.Sleep(100);

      ie.ExecWB(OLECMDID.OLECMDID\_PRINT, OLECMDEXECOPT.OLECMDEXECOPT\_DONTPROMPTUSER, ref missing, ref missing);
      while (!documentPrinted)
        Thread.Sleep(100);

      ie.DocumentComplete -= ie\_DocumentComplete;
      ie.PrintTemplateTeardown -= ie\_PrintTemplateTeardown;
      ie.Quit();
    }
  }
}


Du kan også henvise til: http://jiangsheng.net/SynchronousWebBrowserPrinting.aspx[6]


Håber det hjælper!