Imprimir archivos PDF C#

Muchas empresas están reduciendo en gran medida el uso de papel. Sin embargo, hay algunos escenarios donde la impresión es importante. Por ejemplo, un sistema puede contener detalles de pedidos en línea en formato PDF. Necesitan imprimir PDF mientras envían un pedido en línea para su entrega. Procesan elementos a gran escala, por lo que imprimir cada documento manualmente puede ser una tarea complicada. Aspose.PDF for .NET API, además de muchas otras funciones de manipulación y conversión de archivos, admite la impresión eficiente de archivos PDF. Exploremos los siguientes casos de uso relacionados con la impresión de archivos PDF en aplicaciones .NET usando C#:

Imprimir archivo PDF con C#

La impresión de archivos PDF se puede automatizar en sus aplicaciones .NET usando C# o VB.net. Puede imprimir archivos PDF siguiendo los sencillos pasos a continuación:

  1. Crear un objeto de la clase PdfViewer
  2. Cargar documento PDF de entrada
  3. Imprimir el archivo PDF

El fragmento de código a continuación muestra cómo imprimir un archivo PDF usando C#:

//Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
//Abrir archivo PDF de entrada
viewer.BindPdf(dataDir + "Test.pdf");
//Imprimir documento PDF
viewer.PrintDocument();
//Cerrar archivo PDF
viewer.Close();

Imprimir múltiples archivos PDF con C#

Si necesita imprimir varios archivos debido a la naturaleza de su negocio, la función ya es compatible con Aspose.PDF for .NET API. Imprimir varios archivos PDF, uno por uno con el fragmento de código anterior, puede ser un poco lento. Por lo tanto, llevemos la impresión de PDF un paso más allá para facilitar el proceso. Aquí usaremos List mientras agregamos el nombre de cada archivo PDF a esa lista. Los siguientes pasos explican cómo imprimiremos varios archivos PDF:

  1. Inicializar una lista de tipo String
  2. Agregar archivos PDF a la lista
  3. Cargar archivo PDF de entrada
  4. Imprimir múltiples archivos PDF

El fragmento de código muestra cómo imprimir varios archivos PDF usando C#:

var files = new List<string>();
files.Add(dataDir + "First.pdf");
files.Add(dataDir + "Second.pdf");

foreach (String file in files)
{
    //Crear objeto PdfViewer
    PdfViewer viewer = new PdfViewer();
    //Abrir archivo PDF de entrada
    viewer.BindPdf(file);
    //Imprimir documento PDF
    viewer.PrintDocument();
    //Cerrar archivo PDF
    viewer.Close();
}

Imprimir páginas específicas de PDF con C#

La función de imprimir páginas específicas de documentos PDF está disponible en la API. Consideraremos un ejemplo que incluye la impresión de múltiples rangos de páginas. Debe especificar los números de página desde y hasta como se explica en los pasos a continuación:

  • Establecer las rutas de entrada y salida del archivo
  • Establecer la impresión de páginas específicas definiendo un rango
  • Especificar parámetros de impresión
  • Imprima las páginas como se especificó anteriormente

El fragmento de código a continuación muestra cómo imprimir páginas específicas del documento usando C#:

string inPdf = dataDir + "Test.pdf";
string output = dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings();
printingJob1.FromPage = 2;
printingJob1.ToPage = 3;
printingJobs.Add(printingJob1);

PrintingJobSettings printingJob2 = new PrintingJobSettings();
printingJob2.FromPage = 5;
printingJob2.ToPage = 7;
printingJobs.Add(printingJob2);

{
    for (var printingJobIndex = 0; printingJobIndex < printingJobs.Count; printingJobIndex++)
    {
        System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
        System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
        ps.PrinterName = "Microsoft Print to PDF";
        ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
        ps.FromPage = printingJobs[printingJobIndex].FromPage;
        ps.ToPage = printingJobs[printingJobIndex].ToPage;
        System.Console.WriteLine(ps.FromPage);
        System.Console.WriteLine(ps.ToPage);
        System.Console.WriteLine(printingJobIndex);
        using (var theViewer = new Aspose.Pdf.Facades.PdfViewer())
        {
            // El código de impresión del documento va aquí
            // Imprimir documento usando la impresora y la configuración de página                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

Imprimir archivo PDF protegido con C#

Un archivo PDF se puede asegurar y proteger con una contraseña. Sin embargo, la contraseña puede ser de dos tipos, es decir, contraseña de usuario y de propietario. Los archivos PDF protegidos con la contraseña de usuario necesitan una contraseña para abrir y ver el archivo PDF cifrado. Por otro lado, se requiere la contraseña del propietario para modificar el contenido del archivo PDF seguro y protegido con contraseña. Los siguientes pasos explican la impresión de un PDF seguro:

  1. Cargar PDF protegido con contraseña
  2. Crear objeto PdfViewer
  3. Imprimir archivo PDF protegido

El siguiente fragmento de código muestra cómo imprimir un archivo PDF seguro usando C#:

//Cargue un documento PDF seguro mientras especifica la contraseña de usuario o propietario
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Crear objeto PdfViewer
PdfViewer viewer = new PdfViewer();
//Abrir archivo PDF de entrada
viewer.BindPdf(document);
//Imprimir documento PDF
viewer.PrintDocument();
//Cerrar archivo PDF
viewer.Close();

Imprimir PDF en una bandeja de papel específica de una impresora con C#

Puede imprimir un PDF en una bandeja de papel específica con Aspose.PDF for .NET API. Por ejemplo, es posible que desee imprimir un PDF con muchas fotos en una bandeja de papel diferente y un archivo PDF de texto en una bandeja de papel diferente. Siga los pasos a continuación para configurar la bandeja de salida o el contenedor para imprimir archivos PDF:

  1. Cargar archivo PDF de entrada
  2. Establecer atributos para imprimir
  3. Especifique Configuración de página y Origen del papel
  4. Llame al método PrintDocumentWithSettings

Cabe señalar aquí que puede cambiar el nombre de la impresora. Aquí usaremos Microsoft Print to PDF, como ejemplo. El siguiente fragmento de código sigue estos pasos y muestra cómo imprimir un documento en una bandeja de papel específica o contenedor de una impresora con C#:

Document doc = new Document("Test.pdf");
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(doc);
viewer.PrinterJobName = System.IO.Path.GetFileName(doc.FileName);
viewer.Resolution = 110;
// Establecer atributos para imprimir
viewer.AutoResize = true; // Print the file with adjusted size
viewer.AutoRotate = false; // Print the file with adjusted rotation
viewer.PrintPageDialog = false; // Do not produce the page number dialog when printing
viewer.RenderingOptions.UseNewImagingEngine = true;
// Cree objetos para la configuración de la impresora y la página y PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Establecer el nombre de la impresora
ps.PrinterName = "Microsoft Print to PDF";
pgs.PaperSize = new System.Drawing.Printing.PaperSize(paperTypeName, paperWidth, paperHeight);
pgs.Margins = new System.Drawing.Printing.Margins(margins.Left, margins.Right, margins.Top, margins.Bottom);
pgs.PaperSource = GetPaperSource(printerName, trayName);
// Imprimir documento usando la impresora y la configuración de página
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Devuelve el objeto PaperSource para la impresora y el nombre de la bandeja proporcionados.
///</summary>
///<param name="printerName"></param>
///<param name="trayName"></param>
///<returns></returns>
public static System.Drawing.Printing.PaperSource GetPaperSource(string printerName, string trayName)
{
    System.Drawing.Printing.PaperSource ps = null;
    System.Drawing.Printing.PrintDocument prtDoc = new System.Drawing.Printing.PrintDocument();
    prtDoc.PrinterSettings.PrinterName = printerName;
    for (int i = 0; i < prtDoc.PrinterSettings.PaperSources.Count; i++)
    {
        if (prtDoc.PrinterSettings.PaperSources[i].SourceName.ToLower().Equals(trayName.ToLower()))
        {
            ps = prtDoc.PrinterSettings.PaperSources[i];
            break;
        }
    }
    return ps;
}

Impresión de un rango de páginas en diferentes fuentes de papel usando C#

Puede haber escenarios en los que necesite imprimir diferentes páginas de un documento PDF en diferentes bandejas o contenedores de papel. Por ejemplo, una fuente de papel diferente para la portada y diferente para las otras páginas. Sin duda, puede seguir los pasos a continuación para imprimir rangos de páginas en diferentes fuentes de papel dentro del mismo trabajo de impresión:

  1. Inicializar un objeto de la clase PdfViewer
  2. Utilice el delegado del controlador de eventos PdfQueryPageSettings
  3. Establecer la configuración de la página y la impresora
  4. Llame al método PrintDocumentWithSettings

El siguiente fragmento de código muestra cómo seguir estos pasos e imprimir diferentes rangos de páginas en diferentes fuentes de papel o bandejas usando C#:

Aspose.Pdf.Facades.PdfViewer pdfv = new Aspose.Pdf.Facades.PdfViewer();

pdfv.PdfQueryPageSettings += PdfvOnPdfQueryPageSettings;

System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings prin = new System.Drawing.Printing.PrinterSettings();

pdfv.BindPdf(dataDir + "Print-PageRange.pdf");
prin.PrinterName = "HP LaserJet M9050 MFP PCL6";
prin.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

Aspose.Pdf.Facades.PdfPageEditor pageEditor = new Aspose.Pdf.Facades.PdfPageEditor();
pageEditor.BindPdf(dataDir + "input.pdf");

pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
pgs.PaperSize = prin.DefaultPageSettings.PaperSize;

pdfv.PrintDocumentWithSettings(pgs, prin);
pdfv.Close();

private static void PdfvOnPdfQueryPageSettings(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs queryPageSettingsEventArgs, PdfPrintPageInfo currentPageInfo)
{
    bool isOdd = currentPageInfo.PageNumber % 2 != 0;

    System.Drawing.Printing.PrinterSettings.PaperSourceCollection paperSources = queryPageSettingsEventArgs.PageSettings.PrinterSettings.PaperSources;

    if (isOdd)
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[0];
    else
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[1];
}

Comprobar el estado del trabajo de impresión al imprimir PDF con C#

Puede imprimir archivos PDF en diferentes impresoras. Por ejemplo, Microsoft Print to PDF, Microsoft XPS Document Writer o cualquier impresora física. Sin embargo, la impresión puede tardar mucho tiempo en el caso de documentos PDF de gran tamaño o la impresión puede fallar por algún motivo. Por lo tanto, la API ofrece una función que le permite verificar el estado del trabajo de impresión con los siguientes pasos:

  1. Cargar archivo PDF de entrada
  2. Especificar la configuración de la página
  3. Establecer el nombre de la impresora
  4. Imprima un documento PDF con PrintDocumentWithSettings

El siguiente fragmento de código muestra cómo verificar el estado del trabajo de impresión o el progreso de impresión de un PDF usando C#:

// Instanciar objeto PdfViewer
PdfViewer viewer = new PdfViewer();

// Enlazar archivo PDF de origen
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Ocultar cuadro de diálogo de impresión
viewer.PrintPageDialog = false;

// Crear objeto de configuración de impresora
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();

// Especifique el nombre de la impresora
//ps.PrinterName = "Escritor de documentos XPS de Microsoft";
ps.PrinterName = "Microsoft Print to PDF";

// Nombre de la impresión resultante
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// Imprimir la salida al archivo
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// Especificar el tamaño de página de la impresión
pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

// Imprima el documento con la configuración especificada anteriormente
viewer.PrintDocumentWithSettings(pgs, ps);

// Comprobar el estado de impresión
if (viewer.PrintStatus != null)
{
    // Se lanzó una excepción
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Obtener mensaje de excepción
    }
}
else
{
    // No se encontraron errores. El trabajo de impresión se completó con éxito
    Console.WriteLine("printing completed without any issue..");
}

En consecuencia, este fragmento de código se imprime en la consola de la aplicación .NET sobre el estado de impresión del archivo PDF:

C# Imprimir Pdf

Conclusión

En resumen, hemos aprendido diferentes enfoques y casos de uso de impresión de archivos PDF protegidos y no protegidos con contraseña con C# o VB NET en sus aplicaciones de programación. Además, hemos explorado la impresión de documentos PDF completos. Del mismo modo, hemos aprendido a imprimir algunos rangos de páginas por bandejas de páginas, contenedores o fuentes de papel específicas. Además, también hemos comprobado cómo monitorear el estado de impresión o el progreso de impresión de documentos usando C#.

Ver también