Vă mulțumim pentru susținere

Cum imprim un document HTML de la un serviciu web?

Vreau să tipăresc HTML dintr-un serviciu web C #. Controlul browserului web este supraîncărcat și nu funcționează bine într-un mediu de serviciu și nici nu funcționează bine într-un sistem cu constrângeri de securitate foarte stricte. Există vreun fel de librărie .NET gratuită, care va suporta imprimarea unei pagini HTML de bază? Iată codul pe care îl am până acum, care nu funcționează corect.

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

Acest lucru funcționează bine atunci când este chemat din fire de tip UI, dar nu se întâmplă nimic atunci când este apelat de la un fir de tip serviciu. Modificarea Print () la ShowPrintPreviewDialog () produce următoarea eroare de script IE:

Error: 'dialogArguments.___IE_PrintType' is null or not an object
URL: res://ieframe.dll/preview.dlg

Apare un dialog mic de examinare a tipăririi goale.

0
adăugat editat
@mruanova Nici unul dintre răspunsurile nu a lucrat ultimul am încercat. Dacă aveți ceva care ne face să ne spuneți.
adăugat autor Chris Marasti-Georg
Vă rugăm să selectați cel mai bun răspuns, mulțumesc.
adăugat autor mruanova

6 răspunsuri

Știu că Visual Studio în sine (cel puțin în versiunea 2003) face referire direct la IE dll pentru a face "Design View".

Ar fi bine să te uiți la asta.

În caz contrar, nu mă pot gândi la nimic dincolo de controlul Web Browser.

0
adăugat

Puteți imprima din linia de comandă utilizând următoarele:

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

Unde% 1 este calea fișierului fișierului html care urmează să fie imprimat.

Dacă nu aveți nevoie să tipăriți din memorie (sau vă puteți permite să scrieți pe disc într-un fișier temp), puteți utiliza:

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

N.B. Acest lucru funcționează numai pe Windows 2000 și mai sus cred.

0
adăugat
Un răspuns foarte bun - o să o marcheze acceptată și mi-a făcut testul. Se pare că dll-ul continuă să apară în caseta de dialog Print și, pentru ca aceasta să funcționeze ca un serviciu Windows nesupravegheat, trebuie să o ocolim cumva. Am epuizat destul de mult Google, iar eu sunt la sfarsitul meu.
adăugat autor Chris Marasti-Georg
Din păcate, apare dialogul de imprimare. Am testat pe Windows 7 x64.
adăugat autor LukTar

Uşor! Împărțiți-vă problema în două părți mai simple:

  1. redați codul HTML în PDF
  2. tipăriți fișierul PDF ( SumatraPDF )
  • -print-to-default $file.pdf prints a PDF file on a default printer
  • -print-to $printer_name $file.pdf prints a PDF on a given printer
0
adăugat
Ultima dată am verificat, partea 2 (imprimarea prin linia de comandă cu Adobe) nu funcționează într-un serviciu - aceasta necesită interacțiune cu utilizatorul.
adăugat autor Chris Marasti-Georg
Încercați Sumatra PDF este mult mai rapid blog.kowalczyk.info/software/ SumatraPDF / & hellip;
adăugat autor Colonel Panic

Nu cunosc instrumentele specifice, dar există unele utilitare care înregistrează / reiau clicurile. Cu alte cuvinte, puteți automatiza "clic" în dialogul de imprimare. (Știu că este un hack, dar când toate celelalte nu reușesc ...)

0
adăugat

Poate că asta vă va ajuta. http://www.codeproject.com/KB/printing/printhml.aspx De asemenea, nu știți care este firul pe care încercați să îl accesați, dar trebuie să fie STA

Notă - Proiectul menționat în link vă permite să navigați la o pagină și să efectuați o imprimare fără a afișa dialogul de imprimare.

0
adăugat

Dacă l-ați primit în buget (~ $ 3000), consultați PrinceXML .

Acesta va reda HTML într-un PDF, funcționează bine într-un mediu de serviciu și acceptă funcții avansate, cum ar fi ruperea unei pagini în mijlocul unei celule de tabelă (pe care o mulțime de browsere nu acceptă în prezent).

0
adăugat