Hogyan lehet kinyomtatni egy HTML dokumentum egy olyan internetes szolgáltatás?

szavazat
68

Azt akarja nyomtatni HTML egy C # internetes szolgáltatást. A böngésző ellenőrzés is túlzás, és nem működik jól a szolgáltatási környezet, és nem működik jól a rendszer, nagyon szigorú biztonsági korlátok. Van-e valamilyen ingyenes .NETkönyvtári, hogy támogatni fogja a nyomtatás egy alap HTML oldalon? Itt a kód én eddig, ami nem működik megfelelően.

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

Ez jól működik, ha hívják UI típusú szálak, de nem történik semmi, amikor hívott egy szolgáltatás jellegű téma. Változó Print(), hogy ShowPrintPreviewDialog()a hozamok a következő IE script error:

Hiba: 'dialogArguments .___ IE_PrintType' null vagy nem egy tárgy
URL: res: //ieframe.dll/preview.dlg

És egy kis üres nyomtatási előnézet ablak.

A kérdést 01/08/2008 19:33
a forrás felhasználó
Más nyelveken...                            


7 válasz

szavazat
3

Tudom, hogy a Visual Studio is (legalábbis 2003-as verzió) hivatkozik az IE dll közvetlenül tehetik a „Design View”.

Lehet érdemes bele.

Egyébként nem tudok gondolni semmi túl a webböngésző ellenőrzés.

Válaszolt 02/08/2008 01:42
a forrás felhasználó

szavazat
29

Kinyomtathatja a parancssorban a következő:

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

Hol% 1 a fájl elérési útját a html fájl nyomtatható.

Ha nem kell nyomtatni a memóriából (vagy engedheti meg magának, hogy írjon a lemez egy temp fájlt), akkor:

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

Megjegyzés: Ez csak akkor működik, Windows 2000 és újabb, azt hiszem.

Válaszolt 03/08/2008 19:06
a forrás felhasználó

szavazat
-1

Nem tudom, hogy a különleges eszközök, de van néhány dologra, hogy felvétel / visszajátszás kattint. Más szóval, akkor automatizálja a „click” a nyomtatási párbeszédablak. (Tudom, hogy ez egy hack, de ha minden kötél szakad ...)

Válaszolt 20/09/2008 18:37
a forrás felhasználó

szavazat
0

Talán ez segít. http://www.codeproject.com/KB/printing/printhml.aspx Szintén nem biztos benne, mit szál próbál hozzáférni a böngésző vezérlés, de kell lennie STA

Megjegyzés - A projekt említett kapcsolat nem teszi lehetővé, hogy keresse meg az oldalt, és végezze el a nyomtatófej megjelenítése nélkül a nyomtatási párbeszédablak.

Válaszolt 17/06/2009 18:36
a forrás felhasználó

szavazat
3

Ha már megvan a költségvetésben (~ 3000 $), nézd meg PrinceXML .

Ez lehetővé teszi majd a HTML egy PDF, jól működik a szolgáltatási környezet, és támogatja a fejlett funkciók, mint például nem törés egy oldalt a közepén egy táblázat cella (ami sok böngésző nem támogatja jelenleg).

Válaszolt 12/04/2010 18:57
a forrás felhasználó

szavazat
3

Könnyen! Osztott a probléma két egyszerűbb részből áll:

  1. tehetik a HTML PDF
  2. kinyomtatni a PDF ( SumatraPDF )
  • -print-to-default $file.pdf kinyomtatja a PDF fájlt egy alapértelmezett nyomtató
  • -print-to $printer_name $file.pdf kinyomtatja a PDF egy adott nyomtató
Válaszolt 15/08/2012 14:27
a forrás felhasználó

szavazat
0

Azt eszköz, amely nagyon jól működik számomra HiQPdf. https://www.hiqpdf.com/

Az ár ésszerű (kezdődik $ 245), és azt teheti HTML PDF és kezelheti a nyomtatás a PDF fájlokat.

Válaszolt 08/09/2019 05:35
a forrás felhasználó

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