Cum pot imprima un document HTML dintr-un serviciu web?

voturi
68

Vreau să imprimați HTML dintr - un serviciu de C # web. Controlul browser - ul web este nejustificată, și nu funcționează bine într - un mediu de serviciu, nici nu funcționează bine pe un sistem cu constrângeri de securitate foarte strânse. Există vreun fel de liber de .NETbibliotecă , care va sprijini tipărirea unei pagini HTML simplu? Aici este codul 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();
}

Aceasta funcționează bine atunci când sunat din fire de tip UI, dar nimic nu se întâmplă atunci când numit dintr - un fir de tip serviciu. Schimbarea Print()la ShowPrintPreviewDialog()randamentele următorul script IE eroare:

Eroare: 'dialogArguments .___ IE_PrintType' este nulă sau nu un obiect
URL: res: //ieframe.dll/preview.dlg

Și apare un mic gol de dialog de imprimare de previzualizare.

Întrebat 01/08/2008 la 19:33
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
29

Aveți posibilitatea de a imprima de la linia de comandă, utilizând următoarele:

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

În cazul în care% 1 este calea fișierului html care urmează să fie imprimat.

Dacă nu aveți nevoie pentru a imprima din memorie (sau își pot permite să scrie 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();
}

NB Aceasta funcționează numai pe Windows 2000 și mai sus, cred.

Publicat 03/08/2008 la 19:06
sursa de către utilizator

voturi
3

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

  1. face HTML în PDF
  2. tipăriți PDF ( SumatraPDF )
  • -print-to-default $file.pdf imprimă un fișier PDF pe o imprimantă implicită
  • -print-to $printer_name $file.pdf imprimă un PDF pe o imprimantă dată
Publicat 15/08/2012 la 14:27
sursa de către utilizator

voturi
3

Dacă v - ați luat -o în buget (~ $ 3000), a verifica afară PrinceXML .

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

Publicat 12/04/2010 la 18:57
sursa de către utilizator

voturi
3

Știu că Visual Studio sine (versiune cel puțin în 2003) face referire la IE direct DLL pentru a face „Design View“.

Acesta poate fi în valoare de căutați în asta.

Altfel, nu mă pot gândi la nimic dincolo de controlul browser Web.

Publicat 02/08/2008 la 01:42
sursa de către utilizator

voturi
0

Instrument I , care funcționează foarte bine pentru mine este HiQPdf. https://www.hiqpdf.com/

Pretul este rezonabil (începe de la $ 245) și se poate face HTML la un PDF și să gestioneze, de asemenea, imprimarea fișierelor PDF direct.

Publicat 08/09/2019 la 05:35
sursa de către utilizator

voturi
0

Poate că acest lucru va ajuta. http://www.codeproject.com/KB/printing/printhml.aspx De asemenea , nu sunt sigur ce firul pe care încearcă să acceseze controlul browser - ul de la, dar aceasta trebuie să fie STA

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

Publicat 17/06/2009 la 18:36
sursa de către utilizator

voturi
-1

Nu știu instrumentele specifice, dar există unele utilitare care înregistrarea / reluarea clicuri. Cu alte cuvinte, ai putea automatiza „clic“ pe dialogul de imprimare. (Știu că acest lucru este un hack, dar când toate celelalte eșuează ...)

Publicat 20/09/2008 la 18:37
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more