Aprende a imprimir un archivo PDF con C# en tu aplicación Winforms de forma fácil y gratuita.

Cómo imprimir un PDF desde tu aplicación Winforms en C#

Trabajar con archivos PDF de la forma en que lo hace con otros lenguajes de programación no es tan fácil con C #. Lamentablemente, la mayoría de las bibliotecas son comerciales y deberá pagar por una licencia. Otras bibliotecas como Spire PDF ofrecen una versión gratuita de la biblioteca, sin embargo, solo admite hasta 10 páginas por PDF y luego verá un mensaje de marca de agua que indica que es solo para fines de prueba.

En caso de que esté dispuesto a imprimir un PDF desde su aplicación Winforms sin usar una API paga, le mostraremos 2 soluciones que le ayudarán a imprimir un archivo PDF fácilmente.

A. Uso de Adobe Acrobat

La primera forma requiere que su usuario tenga instalado Adobe Acrobat. Por lo general, cada computadora tiene un programa para leer archivos PDF, a saber, Acrobat Reader, así que asegúrese de verificar que su usuario tenga instalado este lector de PDF.

Se recomienda este método ya que permite al usuario elegir qué páginas imprimir, qué impresora usar y otras configuraciones con el diálogo de impresión nativo:

using System.Diagnostics;
using System.Threading;

public void printPDFWithAcrobat()
{
    string Filepath = @"C:\Users\sdkca\Desktop\path-to-your-pdf\pdf-sample.pdf";

    using (PrintDialog Dialog = new PrintDialog())
    {
        Dialog.ShowDialog();

        ProcessStartInfo printProcessInfo = new ProcessStartInfo()
        {
            Verb = "print",
            CreateNoWindow = true,
            FileName = Filepath,
            WindowStyle = ProcessWindowStyle.Hidden
        };

        Process printProcess = new Process();
        printProcess.StartInfo = printProcessInfo;
        printProcess.Start();

        printProcess.WaitForInputIdle();

        Thread.Sleep(3000);

        if (false == printProcess.CloseMainWindow())
        {
            printProcess.Kill();
        }
    }
}

Este código ejecuta el comando de impresión en una línea de comando oculta y muestra el cuadro de diálogo Imprimir del sistema:

Print Dialog Windows C# Winforms

En algunas versiones de Windows, el Acrobat Reader puede iniciarse por un segundo, pero se cerrará automáticamente después de hacer clic en Aceptar y se imprimirá el archivo.

B. Usando el paquete RawPrint

Si no desea utilizar Acrobat Reader, es posible que desee utilizar un paquete personalizado que envíe un archivo directamente a la impresora. Estamos hablando del paquete RawPrint. RawPrint es una biblioteca para enviar archivos directamente a una impresora de Windows sin pasar por el controlador de la impresora, puede enviar PostScript, PCL u otros tipos de archivos de impresión directamente a una impresora.

Para instalar esta biblioteca en su proyecto, puede usar el administrador de paquetes NuGet de Visual Studio. Vaya al explorador de soluciones del proyecto en Visual Studio y haga clic derecho en su proyecto, de la lista seleccione la opción Administrar paquetes NuGet:

Una vez que aparezca el Administrador, busque la biblioteca RawPrint, seleccione (probablemente) la primera opción de Tony Edgecombe y haga clic en instalar:

Después de la instalación, podrá utilizar la clase RawPrint en su proyecto. Para obtener más información sobre esta biblioteca, visite el repositorio oficial en Github aquí .

1. Lista de nombres de impresoras

Es recomendable enumerar todas las impresoras disponibles en algún cuadro combinado, por lo que el usuario solo necesita seleccionar la impresora deseada y luego imprimirla. Puede enumerar todas las impresoras disponibles utilizando la propiedad InstalledPrinters en el tipo PrinterSettings :

foreach (string printerName in System.Drawing.Printing.PrinterSettings.InstalledPrinters)
{
    Console.WriteLine(printerName);
}

/** Imprimiria algo como:

Send To OneNote 2016
Microsoft XPS Document Writer
Microsoft Print to PDF
Fax
Brother HL-3172CDW series Printer

*/

Para utilizar los métodos RawPrint, deberá especificar qué impresora utilizar. La única forma de especificar cuál usar es el nombre, así que asegúrese de tener un nombre de la impresora antes de enviar un archivo a imprimir. En nuestro caso, tenemos disponible una impresora Brother real, por lo que la usaremos en este ejemplo.

2. Impresión de PDF

Para imprimir el PDF desde un archivo, solo necesita usar el método PrintRawFile desde una instancia de RawPrint. Este método espera como primer argumento, el nombre de la impresora que desea utilizar para imprimir el archivo, como segundo argumento la ruta absoluta al archivo PDF (incluido el nombre del archivo) que desea imprimir y como último argumento el nombre de la mismo archivo. Este último argumento se usa solo para mostrarlo como nombre en la cola:

// Incluir el espacio de nombres de la biblioteca
using RawPrint;

/// <summary>
/// Imprime un PDF utilizando sus datos RAW directamente en la impresora. Requiere el paquete nuGET RawPrint
/// </summary>
public void printPDF()
{
    // Ruta absoluta a su PDF para imprimir (con nombre de archivo)
    string Filepath = @"C:\Users\sdkca\Desktop\path-to-file\pdf-sample.pdf";
    // El nombre del PDF que se imprimirá (solo para que se muestre en la cola de impresión)
    string Filename = "pdf-sample.pdf";
    // El nombre de la impresora que desea utilizar.
     // Nota: consulte el paso 1 de la alternativa B para ver cómo enumerar
     // los nombres de todas las impresoras disponibles con C #
    string PrinterName = "Brother HL-3172CDW series Printer";

    // Cree una instancia de la impresora
    IPrinter printer = new Printer();
    
    // Imprime el archivo
    printer.PrintRawFile(PrinterName, Filepath, Filename);
}

Si ejecuta el código anterior y el archivo existe, la impresora ahora debería hacer su trabajo.

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores