¿Cómo imprimo un documento HTML desde un servicio web?

votos
68

Quiero imprimir HTML desde un servicio web C #. El control del navegador web es excesivo, y no funciona bien en un entorno de servicio, ni funciona bien en un sistema con restricciones de seguridad muy estrictas. ¿Hay algún tipo de .NETbiblioteca gratuita que admita la impresión de una página HTML básica? Aquí está el código que tengo hasta ahora, que no se ejecuta correctamente.

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

Esto funciona bien cuando se llama desde subprocesos tipo UI, pero no ocurre nada cuando se llama desde un subproceso de tipo servicio. Cambiando Print()para ShowPrintPreviewDialog()producir el siguiente error de script de IE:

Error: 'dialogArguments .___ IE_PrintType' es nulo o no es un objeto
URL: res: //ieframe.dll/preview.dlg

Y aparece un pequeño cuadro de diálogo de vista previa de impresión vacía.

Publicado el 01/08/2008 a las 19:33
fuente por usuario
En otros idiomas...                            


7 respuestas

votos
3

Sé que el propio Visual Studio (al menos en la versión de 2003) hace referencia al dll de IE directamente para representar la "Vista de diseño".

Puede valer la pena investigar eso.

De lo contrario, no puedo pensar en nada más allá del control del navegador web.

Respondida el 02/08/2008 a las 01:42
fuente por usuario

votos
29

Puede imprimir desde la línea de comando usando lo siguiente:

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

Donde% 1 es la ruta de archivo del archivo html que se imprimirá.

Si no necesita imprimir desde la memoria (o puede permitirse escribir en el disco en un archivo temporal), puede usar:

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 Esto solo funciona en Windows 2000 y arriba, creo.

Respondida el 03/08/2008 a las 19:06
fuente por usuario

votos
-1

No conozco las herramientas específicas, pero hay algunas utilidades que registran / reproducen clics. En otras palabras, puede automatizar el "clic" en el diálogo de impresión. (Sé que esto es un truco, pero cuando todo lo demás falla ...)

Respondida el 20/09/2008 a las 18:37
fuente por usuario

votos
0

Tal vez esto ayude. http://www.codeproject.com/KB/printing/printhml.aspx También no estoy seguro de qué thread estás tratando de acceder al control del navegador, pero debe ser STA

Nota: El proyecto al que se hace referencia en el enlace le permite navegar a una página y realizar una impresión sin mostrar el cuadro de diálogo de impresión.

Respondida el 17/06/2009 a las 18:36
fuente por usuario

votos
3

Si lo tienes en el presupuesto (~ $ 3000), echa un vistazo a PrinceXML .

Será representar HTML en un PDF, funciona bien en un entorno de servicio, y soporta características avanzadas tales como no romper una página en medio de una celda de tabla (la cual una gran cantidad de navegadores no admiten actualmente).

Respondida el 12/04/2010 a las 18:57
fuente por usuario

votos
3

¡Fácil! Dividir el problema en dos partes más simples:

  1. hacer que el HTML a PDF
  2. imprimir el PDF ( SumatraPDF )
  • -print-to-default $file.pdf imprime un archivo PDF en una impresora predeterminada
  • -print-to $printer_name $file.pdf imprime un PDF en una impresora determinada
Respondida el 15/08/2012 a las 14:27
fuente por usuario

votos
0

Herramienta que que funciona muy bien para mí es HiQPdf. https://www.hiqpdf.com/

El precio es razonable (comienza en $ 245) y puede representar HTML a PDF y también gestionar la impresión de los archivos PDF directamente.

Respondida el 08/09/2019 a las 05:35
fuente por usuario

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