¿Cómo imprimir documentos en silencio en C#?

This article was translated from English: Does it need improvement?
Translated
View the article in English

La impresión silenciosa envía documentos directamente a una impresora desde el código: sin cuadros de diálogo, sin interacción del usuario, sin interrupciones. Para flujos de trabajo automatizados como procesamiento por lotes de facturas, aplicaciones de kiosco y trabajos en segundo plano de servicio de Windows, eliminar el diálogo de impresión es un requisito estricto. El espacio de nombres nativo System.Drawing.Printing proporciona un camino para la impresión silenciosa, pero requiere un código boilerplate impulsado por eventos que escala mal entre equipos y proyectos.

IronPrint reduce la impresión silenciosa a una sola llamada de método. Instalamos un paquete NuGet y llamamos Printer.Print() — la biblioteca maneja la comunicación con la impresora, el renderizado del documento y la interacción con el spooler de impresión detrás de escena.

Inicio rápido: Impresión silenciosa

  1. Instalar IronPrint a través de NuGet: Install-Package IronPrint
  2. Añadir using IronPrint; al archivo
  3. Llamar Printer.Print("filepath") para enviar el documento a la impresora predeterminada
  4. Pasar un objeto PrintSettings para controlar el nombre de la impresora, DPI, copias y configuración de papel
  5. Usar Printer.PrintAsync() cuando la operación de impresión no deba bloquear el hilo que llama
  1. Instala IronPrint con el Administrador de Paquetes NuGet

    PM > Install-Package IronPrint
  2. Copie y ejecute este fragmento de código.

    using IronPrint;
    
    // Silent print — no dialog, no user interaction
    Printer.Print("invoice.pdf");
  3. Despliegue para probar en su entorno real

    Comienza a usar IronPrint en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer

¿Cómo funciona la impresión silenciosa en .NET?

El espacio de nombres .NET System.Drawing.Printing incluye una clase StandardPrintController que suprime el cuadro de diálogo de estado durante las operaciones de impresión. Por defecto, .NET utiliza PrintControllerWithStatusDialog, que muestra el popup "Imprimiendo página X de Y". Cambiar a StandardPrintController elimina ese diálogo, pero el costo de configuración sigue siendo significativo.

Para imprimir en silencio con el enfoque nativo, creamos un PrintDocument, adjuntamos un controlador de eventos PrintPage que dibuja contenido en la superficie gráfica de impresión, asignamos el StandardPrintController, configuramos PrinterSettings y llamamos Print(). Esto requiere aproximadamente 15–25 líneas de código de configuración para un solo documento, y cada nuevo tipo o formato de documento necesita su propia lógica de renderizado en el evento PrintPage. El renderizado de PDF, en particular, no está integrado en System.Drawing.Printing — necesitaríamos una biblioteca de análisis de PDF separada para extraer páginas y dibujarlas en la superficie de Graphics.

IronPrint envuelve toda esta canalización en la clase estática Printer. El método Print() acepta una ruta de archivo o un arreglo de bytes, detecta el formato del archivo, lo renderiza a través del motor adecuado, y lo envía a la impresora predeterminada — todo sin mostrar un diálogo.

:path=/static-assets/print/content-code-examples/how-to/silent-printing/silent-printing-print-pdf-and-byte-array.cs
using IronPrint;

// Print a PDF silently
Printer.Print("quarterly-report.pdf");

// Print from a byte array
byte[] pdfData = File.ReadAllBytes("shipping-label.pdf");
Printer.Print(pdfData);
Imports IronPrint

' Print a PDF silently
Printer.Print("quarterly-report.pdf")

' Print from a byte array
Dim pdfData As Byte() = File.ReadAllBytes("shipping-label.pdf")
Printer.Print(pdfData)
$vbLabelText   $csharpLabel

El método Print() admite los formatos de archivo PDF, PNG, TIFF, JPEG, GIF, HTML y BMP. Pasamos la ruta del archivo como una cadena o los datos del archivo bruto como un byte[], e IronPrint determina la estrategia de renderizado automáticamente.