Jak lze vytisknout dokument HTML z webové služby?

hlasů
68

Chci vytisknout HTML z C # webové služby. Kontrolní Webový prohlížeč je zbytečná, a nefunguje dobře v prostředí služby, ani to dobře fungovat v systému s velmi přísná bezpečnostní omezení. Je tam nějaký druh volného .NETknihovny, která bude podporovat tisk základní HTML stránky? Zde je kód, který jsem doposud, který nepracuje správně.

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

Tato metoda funguje spolehlivě při volání z UI typu závity, ale nic se neděje, když zavolal ze služby typu závitu. Změna Print()k ShowPrintPreviewDialog()výnosům následujících chybových skript IE:

Chyba: 'dialogArguments .___ IE_PrintType je null nebo není objekt
URL: res: //ieframe.dll/preview.dlg

A objeví se malý prázdný dialogové okno náhledu.

Položena 01/08/2008 v 19:33
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
29

Můžete tisknout z příkazového řádku pomocí následující:

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

Kde% 1 je cesta k souboru HTML souboru, které mají být vytištěny.

Pokud není nutné vytisknout z paměti (nebo si může dovolit zapsat na disk v dočasný soubor), můžete použít:

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

Poznámka Tento postup funguje pouze v systému Windows 2000 a vyšší myslím.

Odpovězeno 03/08/2008 v 19:06
zdroj uživatelem

hlasů
3

Snadný! Rozdělit problém do dvou jednodušších částí:

  1. vykreslení HTML do PDF
  2. vytisknout ve formátu PDF ( Sumatra PDF )
  • -print-to-default $file.pdf vytiskne soubor ve formátu PDF na výchozí tiskárnu
  • -print-to $printer_name $file.pdf tiskne PDF na dané tiskárně
Odpovězeno 15/08/2012 v 14:27
zdroj uživatelem

hlasů
3

Pokud máte to v rozpočtu (~ 3000 $), podívejte se na PrinceXML .

no to bude skýtat HTML do PDF, funkce v prostředí služby a podporuje pokročilé funkce, jako je neporušuje stránku ve středu buňky tabulky (což hodně prohlížečů aktuálně nepodporují).

Odpovězeno 12/04/2010 v 18:57
zdroj uživatelem

hlasů
3

Vím, že Visual Studio sám (verze alespoň v roce 2003) odkazuje IE dll přímo k tomu, aby „Návrhové zobrazení“.

To může být třeba při pohledu na to.

V opačném případě, nemůžu myslet na nic jiného mimo kontrolu webového prohlížeče.

Odpovězeno 02/08/2008 v 01:42
zdroj uživatelem

hlasů
0

Možná, že to pomůže. http://www.codeproject.com/KB/printing/printhml.aspx také není jistý, co nit se snažíte získat přístup k ovládání prohlížeče z, ale to musí být STA

Poznámka: - V rámci projektu uvedené v odkazu se vám umožní přejít na stránku a provést tisk bez zobrazení dialogového okna tisku.

Odpovězeno 17/06/2009 v 18:36
zdroj uživatelem

hlasů
-1

Nevím konkrétní nástroje, ale tam jsou některé nástroje, které záznam / přehrávání klikne. Jinými slovy, můžete automatizovat „klik“ v dialogovém okně tisku. (Vím, že to je hack, ale když vše ostatní selže ...)

Odpovězeno 20/09/2008 v 18:37
zdroj uživatelem

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