¿Cómo imprimo un documento HTML de un servicio web? -- # campo con html campo con web-services campo con printing camp Relacionados El problema

How do I print an HTML document from a web service?


80
vote

problema

Español

Quiero imprimir HTML desde un servicio web C #. El control del navegador web está exagerado, 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 biblioteca gratuita .NET que admitirá 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 hilos de tipo ui, pero no ocurre nada cuando se llama desde un hilo de tipo de servicio. CAMBIO Print() TO ShowPrintPreviewDialog() Rendina el siguiente Error de script de IE:

Error: dialogArguments.___IE_PrintType es nulo o no un objeto.

URL: res://ieframe.dll/preview.dlg

Aparece

y aparece un cuadro de diálogo Vista previa de impresión vacía.

Original en ingles

I want to print HTML from a C# web service. The web browser control is overkill, and does not function well in a service environment, nor does it function well on a system with very tight security constraints. Is there any sort of free .NET library that will support the printing of a basic HTML page? Here is the code I have so far, which does not run properly.

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

This works fine when called from UI-type threads, but nothing happens when called from a service-type thread. Changing Print() to ShowPrintPreviewDialog() yields the following IE script error:

Error: dialogArguments.___IE_PrintType is null or not an object.

URL: res://ieframe.dll/preview.dlg

And a small empty print preview dialog appears.

</div
           
       
       

Lista de respuestas

33
 
vote

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

rundll32.exe % Windir% system32 mshtml.dll, printhtml "% 1"

Cuando% 1 es la ruta del archivo del archivo HTML a imprimir.

Si no necesita imprimir desde la memoria (o puede darse el lujo de 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 + @" undll32.exe";     printProcess.StartInfo.Arguments = systemPath + @"mshtml.dll,PrintHTML """ + fileToPrint + @"""";     printProcess.Start(); }   

n.b. Esto solo funciona en Windows 2000 y superior, creo.

 

You can print from the command line using the following:

rundll32.exe %WINDIR%System32mshtml.dll,PrintHTML "%1"

Where %1 is the file path of the HTML file to be printed.

If you don't need to print from memory (or can afford to write to the disk in a temp file) you can use:

using (Process printProcess = new Process()) {     string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);     printProcess.StartInfo.FileName = systemPath + @" undll32.exe";     printProcess.StartInfo.Arguments = systemPath + @"mshtml.dll,PrintHTML """ + fileToPrint + @"""";     printProcess.Start(); } 

N.B. This only works on Windows 2000 and above I think.

</div
 
 
   
   
6
 
vote

Sé que el estudio visual en sí (al menos en versión de 2003) hace referencia a la DLL de IE directamente para representar la "Vista de diseño".

puede valer la pena mirarlo.

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

 

I know that Visual Studio itself (at least in 2003 version) references the IE dll directly to render the "Design View".

It may be worth looking into that.

Otherwise, I can't think of anything beyond the Web Browser control.

</div
 
 
5
 
vote

¡Fácil! Divida su problema en dos partes más simples:

  1. Render el HTML a PDF
  2. Imprime el PDF ( sumatrapdf ) < / li>
  • -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
 

Easy! Split your problem into two simpler parts:

  1. render the HTML to PDF
  2. print the 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
</div
 
 
     
     
4
 
vote

Si lo tiene en el presupuesto (~ $ 3000), consulte princexml .

HTML en un PDF, funciona bien en un entorno de servicio y admite características avanzadas, como no romper una página en el centro de una celda de tabla (que muchos navegadores no soportan actualmente).

 

If you've got it in the budget (~$3000), check out PrinceXML.

It will render HTML into a PDF, functions well in a service environment, and supports advanced features such as not breaking a page in the middle of a table cell (which a lot of browsers don't currently support).

</div
 
 
1
 
vote

Tal vez esto ayude. http://www.codeproject.com/kb/printing/printhml.aspx Tampoco está seguro de qué hilo está intentando acceder al control del navegador, pero debe ser STA

Nota: el proyecto mencionado en el enlace le permite navegar a una página y realizar una impresión sin mostrar el cuadro de diálogo Imprimir.

 

Maybe this will help. http://www.codeproject.com/KB/printing/printhml.aspx Also not sure what thread you are trying to access the browser control from, but it needs to be STA

Note - The project referred to in the link does allow you to navigate to a page and perform a print without showing the print dialog.

</div
 
 
1
 
vote

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

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

 

I tool that works very well for me is HiQPdf. https://www.hiqpdf.com/

The price is reasonable (starts at $245) and it can render HTML to a PDF and also manage the printing of the PDF files directly.

</div
 
 
-1
 
vote

No sé las herramientas específicas, pero hay algunas utilidades que registran / reproducen clics. En otras palabras, podría automatizar el "clic" en el cuadro de diálogo Imprimir. (Sé que este es un truco, pero cuando todo lo demás falla ...)

 

I don't know the specific tools, but there are some utilities that record / replay clicks. In other words, you could automate the "click" on the print dialog. (I know this is a hack, but when all else fails...)

</div
 
 

Relacionados problema

3  Imprimiendo múltiples páginas de datos diferentes  ( Printing multiple pages of different data ) 
En mi aplicación tengo varias formas que imprimen datos específicos. Para lograr que utilizo el evento PrintDocument PrintPage. Si un informe tiene más de 1...

2  Impresión con un programa de RCP de Eclipse  ( Printing with an eclipse rcp program ) 
Estoy buscando una forma buena y estándar de generar "salida" en mi programa RCP e imprimirlo. Esto debería funcionar a medida que trabaja en Windows, Mac OS ...

2  Cómo forzar los gráficos de impresión Java en 300DPI  ( How to force java print graphics in 300dpi ) 
Mientras buscaba un problema, de alguna manera, la API de impresión Java está lisiada de limitación de que todas las imágenes enviadas a la impresora deben im...

80  ¿Cómo imprimo un documento HTML de un servicio web?  ( How do i print an html document from a web service ) 
Quiero imprimir HTML desde un servicio web C #. El control del navegador web está exagerado, y no funciona bien en un entorno de servicio, ni funciona bien en...

11  "Operación no admitida" y "Impresora seleccionada no es válida" errores "mientras se imprime  ( Operation not supported and printer selected is not valid errors while print ) 
Esperemos que alguien pueda ayudar. En My Delphi 7, la aplicación Pequeño porcentaje de usuarios reporta errores al imprimir y estoy tratando de resolver esto...

0  No se puede imprimir la ventana emergente que muestra el archivo PDF  ( Cannot print popup displaying pdf file ) 
Tengo un archivo PHP con el siguiente código: <?php ?> <form action="" id="f1" name="f1"> <input type="button" name="preview" value="Open PDF" onclick...

2  ¿Por qué la proporción de unidades de impresión a MM 34/9?  ( Why is the ratio of print units to mm 34 9 ) 
Estoy tratando de imprimir una cuadrícula de etiquetas a una hoja de papel de etiqueta A4. El usuario especifica los márgenes izquierdo y superior del papel...

469  Imprimir <div id = "printareea"> solo </ div>?  ( Print div id printarea div only ) 
¿Cómo imprimo el DIV indicado (sin deshabilitar manualmente todos los demás contenido en la página)? Quiero evitar un nuevo cuadro de diálogo de vista previ...

1  X.509 Firmas digitales impresas  ( X 509 digital signatures printed ) 
Estoy usando certificados digitales para firmar resultados de transacciones, también necesito imprimir un resbalón con información y firma digital en ella. ...

91  Imprimir texto en Oracle SQL Developer SQL Hoja de trabajo  ( Print text in oracle sql developer sql worksheet window ) 
Estoy usando Oracle SQL (en SQLDeveloper, utilizando la hoja de trabajo SQL). Me gustaría imprimir una declaración antes de mi selección, como PRINT 'Query...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos