Trabajando con la impresión de PDF

Imprimir un archivo PDF a la impresora predeterminada usando configuraciones de impresora y página

La clase PdfViewer permite imprimir un archivo PDF en la impresora predeterminada. Por lo tanto, necesitas crear un objeto PdfViewer y abrir el PDF usando el método openPdfFile(..).

Llama al método printDocument(..) para imprimir el PDF en la impresora predeterminada.

El siguiente fragmento de código muestra cómo imprimir un PDF en la impresora predeterminada con configuraciones de impresora y página.

 public static void PrintingPDFFile() {
        // Crear objeto PdfViewer
        PdfViewer viewer = new PdfViewer();

        // Abrir archivo PDF de entrada
        viewer.bindPdf(_dataDir + "sample.pdf");

        // Establecer atributos para la impresión
        viewer.setAutoResize(true); // Imprimir el archivo con tamaño ajustado
        viewer.setAutoRotate(true); // Imprimir el archivo con rotación ajustada
        viewer.setPrintPageDialog(false); // No producir el diálogo de número de página al imprimir

        // Crear objetos para configuraciones de impresora y página y PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Establecer nombre de la impresora
        printerSettings.setPrinterName("Microsoft Print to PDF");

        // Establecer tamaño de página (si es necesario)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Establecer márgenes de página (si es necesario)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configuraciones de impresora y página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);
        
        // Cerrar el archivo PDF después de imprimir
        viewer.close();
    }

Para mostrar un cuadro de diálogo de impresión, intente usar el siguiente fragmento de código:

public static void PrintingPDFDisplayPrintDialog() {
        // Crear objeto PdfViewer
        PdfViewer viewer = new PdfViewer();

        // Abrir archivo PDF de entrada
        viewer.bindPdf(_dataDir + "sample.pdf");

        // Establecer atributos para la impresión
        viewer.setAutoResize(true); // Imprimir el archivo con tamaño ajustado
        viewer.setAutoRotate(true); // Imprimir el archivo con rotación ajustada
        viewer.setPrintPageDialog(true);

        // Crear objetos para la configuración de impresora y página y PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Establecer PageSize (si es necesario)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Establecer PageMargins (si es necesario)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        java.awt.print.PrinterJob pj = java.awt.print.PrinterJob.getPrinterJob();

        if (pj.printDialog()) {
            printerSettings.setPrinterName(pj.getPrintService().getName());
            printerSettings.setCopies((short) pj.getCopies());
            // Imprimir documento usando la configuración de impresora y página
            viewer.printDocumentWithSettings(pageSettings, printerSettings);
        }
        // Cerrar el archivo PDF después de imprimir
        viewer.close();
    }

Imprimir PDF en Impresora Virtual

Hay impresoras que imprimen en un archivo. Establecemos el nombre de la impresora virtual y, por analogía con el ejemplo anterior, hacemos la configuración.

public static void PrintingPDFToSoftPrinter() {
        // Crear objeto PdfViewer
        PdfViewer viewer = new PdfViewer();

        // Abrir archivo PDF de entrada
        viewer.bindPdf(_dataDir + "sample.pdf");

        // Establecer atributos para imprimir
        viewer.setAutoResize(true); // Imprimir el archivo con tamaño ajustado
        viewer.setAutoRotate(true); // Imprimir el archivo con rotación ajustada
        viewer.setPrintPageDialog(false); // No mostrar el diálogo de número de página al imprimir

        // Crear objetos para la impresora, configuración de página y PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Establecer impresora Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");
        // o Adobe
        // printerSettings.setPrinterName("Adobe PDF");

        // Establecer tamaño de página (si es necesario)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Establecer márgenes de página (si es necesario)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento utilizando la configuración de impresora y página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Cerrar el archivo PDF después de imprimir
        viewer.close();
    }

Ocultar el Diálogo de Impresión

Aspose.PDF para Java permite ocultar el diálogo de impresión. Para esto, use el método getPrintPageDialog.

El siguiente fragmento de código muestra cómo ocultar el diálogo de impresión.

public static void PrintingPDFHidePrintDialog() {
        // Crear objeto PdfViewer
        PdfViewer viewer = new PdfViewer();

        // Abrir archivo PDF de entrada
        viewer.bindPdf(_dataDir + "sample.pdf");

        // Establecer atributos para imprimir
        viewer.setAutoResize(true); // Imprimir el archivo con tamaño ajustado
        viewer.setAutoRotate(true); // Imprimir el archivo con rotación ajustada

        viewer.setPrintPageDialog(false); // No producir el diálogo de número de página al imprimir

        // Crear objetos para la configuración de impresora y página y PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Establecer impresora Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");

        // Establecer tamaño de página (si es necesario)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Establecer márgenes de página (si es necesario)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando la configuración de página e impresora
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Cerrar el archivo PDF después de imprimir
        viewer.close();
    }

Imprimir PDF en Color a Archivo XPS como Escala de Grises

Un documento PDF en color se puede imprimir en una impresora XPS como escala de grises, usando PdfViewer. Para lograr esto, necesitas usar la propiedad PdfViewer.PrintAsGrayscale y establecerla en true.

El siguiente fragmento de código demuestra la implementación de la propiedad PdfViewer.PrintAsGrayscale.

 public static void PrintingPDFasGrayscale() {
        // Crear objeto PdfViewer
        PdfViewer viewer = new PdfViewer();

        // Abrir archivo PDF de entrada
        viewer.bindPdf(_dataDir + "sample.pdf");

        // Establecer atributos para imprimir
        viewer.setAutoResize(true); // Imprimir el archivo con tamaño ajustado
        viewer.setAutoRotate(true); // Imprimir el archivo con rotación ajustada

        viewer.setPrintAsGrayscale(true);

        // Crear objetos para la configuración de impresora y página y PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Establecer impresora Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");

        // Establecer PageSize (si es necesario)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Establecer PageMargins (si es necesario)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configuración de impresora y página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Cerrar el archivo PDF después de imprimir
        viewer.close();
    }

Conversión de PDF a PostScript

La clase PdfViewer proporciona la capacidad de imprimir documentos PDF y, con la ayuda de esta clase, también podemos convertir archivos PDF al formato PostScript. Para convertir un archivo PDF a PostScript, primero instale cualquier impresora PS y simplemente imprima en archivo con la ayuda de PdfViewer.

El siguiente fragmento de código te muestra cómo imprimir y convertir un PDF al formato PostScript.

public static void PrintingPDFToPostScript() {
        // Crear objeto PdfViewer
        PdfViewer viewer = new PdfViewer();

        // Abrir archivo PDF de entrada
        viewer.bindPdf(_dataDir + "sample.pdf");

        // Establecer atributos para la impresión
        viewer.setAutoResize(true); // Imprimir el archivo con tamaño ajustado
        viewer.setAutoRotate(true); // Imprimir el archivo con rotación ajustada

        viewer.setPrintAsGrayscale(true);
        

        // Crear objetos para configuración de impresora y de página y PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Establecer impresora PostSScript
        printerSettings.setPrinterName("HP Universal Printing PS (v7.0.0)");
        printerSettings.setPrintToFile(true);
        printerSettings.setPrintFileName(_dataDir+"result.ps");

        // Establecer tamaño de página (si es necesario)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Establecer márgenes de página (si es necesario)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando la configuración de impresora y de página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Cerrar el archivo PDF después de imprimir
        viewer.close();
    }

Verificación del Estado de la Tarea de Impresión

Un archivo PDF puede ser impreso en una impresora física, así como en el Microsoft XPS Document Writer, sin mostrar un cuadro de diálogo de impresión, utilizando la clase PdfViewer. Al imprimir archivos PDF grandes, el proceso puede tardar mucho tiempo, por lo que el usuario podría no estar seguro de si el proceso de impresión se completó o si encontró un problema. Para determinar el estado de una tarea de impresión, utiliza la propiedad PrintStatus. El siguiente fragmento de código muestra cómo imprimir el archivo PDF en un archivo XPS y obtener el estado de impresión.

public static void CheckingPrintJobStatus() {
        // Crear objeto PdfViewer
        PdfViewer viewer = new PdfViewer();

        // Abrir archivo PDF de entrada
        viewer.bindPdf(_dataDir + "sample.pdf");

        // Establecer atributos para la impresión
        viewer.setAutoResize(true); // Imprimir el archivo con tamaño ajustado
        viewer.setAutoRotate(true); // Imprimir el archivo con rotación ajustada

        viewer.setPrintAsGrayscale(true);

        // Crear objetos para la impresora y la configuración de página y PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Establecer impresora Microsoft Soft Printer
        printerSettings.setPrinterName("HP Universal Printing PS (v7.0.0)");

        // Establecer tamaño de página (si es necesario)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Establecer márgenes de página (si es necesario)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento utilizando la configuración de impresora y página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // // Verificar el estado de impresión
        if (viewer.getPrintStatus() != null) {
            Exception ex = (Exception) viewer.getPrintStatus();
            System.out.println(ex.getMessage());
        } else {
            // No se encontraron errores. La tarea de impresión se completó con éxito
            System.out.println("¡Todo salió bien!");
        }
        // Cerrar el archivo PDF después de imprimir
        viewer.close();
    }