Trabalhando com impressão de PDF

Imprimindo Arquivo PDF na Impressora Padrão usando Configurações de Impressora e Página

A classe PdfViewer permite imprimir um arquivo PDF na impressora padrão. Portanto, você precisa criar um objeto PdfViewer e abrir o PDF usando o método openPdfFile(..).

Chame o método printDocument(..) para imprimir o PDF na impressora padrão.

O trecho de código a seguir mostra como imprimir PDF na impressora padrão com configurações de impressora e página.

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

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

        // Definir atributos para impressão
        viewer.setAutoResize(true); // Imprimir o arquivo com tamanho ajustado
        viewer.setAutoRotate(true); // Imprimir o arquivo com rotação ajustada
        viewer.setPrintPageDialog(false); // Não produzir o diálogo de número de página ao imprimir

        // Criar objetos para configurações de impressora e página e PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Definir nome da impressora
        printerSettings.setPrinterName("Microsoft Print to PDF");
        

        // Definir PageSize (se necessário)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Definir PageMargins (se necessário)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configurações de impressora e página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);
        
        // Fechar o arquivo PDF após impressão
        viewer.close();
    }

Para exibir uma caixa de diálogo de impressão, tente usar o seguinte trecho de código:

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

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

        // Definir atributos para impressão
        viewer.setAutoResize(true); // Imprimir o arquivo com tamanho ajustado
        viewer.setAutoRotate(true); // Imprimir o arquivo com rotação ajustada
        viewer.setPrintPageDialog(true);

        // Criar objetos para configurações de impressora e de página e PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Definir PageSize (se necessário)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Definir PageMargins (se necessário)
        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 configurações de impressora e de página
            viewer.printDocumentWithSettings(pageSettings, printerSettings);
        }
        // Fechar o arquivo PDF após a impressão
        viewer.close();
    }

Imprimir PDF para Impressora Virtual

Existem impressoras que imprimem para um arquivo. Definimos o nome da impressora virtual e, por analogia com o exemplo anterior, fazemos as configurações.

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

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

        // Definir atributos para impressão
        viewer.setAutoResize(true); // Imprimir o arquivo com tamanho ajustado
        viewer.setAutoRotate(true); // Imprimir o arquivo com rotação ajustada
        viewer.setPrintPageDialog(false); // Não produzir a caixa de diálogo de número de página ao imprimir

        // Criar objetos para configurações de impressora e página e PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Definir impressora Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");
        // ou Adobe
        // printerSettings.setPrinterName("Adobe PDF");

        // Definir PageSize (se necessário)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Definir PageMargins (se necessário)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configurações de impressora e página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Fechar o arquivo PDF após a impressão
        viewer.close();
    }

Ocultando a Caixa de Diálogo de Impressão

O Aspose.PDF para Java permite que você oculte a caixa de diálogo de impressão. Para isso, use o método getPrintPageDialog.

O trecho de código a seguir mostra como ocultar a caixa de diálogo de impressão.

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

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

        // Definir atributos para impressão
        viewer.setAutoResize(true); // Imprimir o arquivo com tamanho ajustado
        viewer.setAutoRotate(true); // Imprimir o arquivo com rotação ajustada

        viewer.setPrintPageDialog(false); // Não produzir a caixa de diálogo de número de página ao imprimir

        // Criar objetos para configurações de impressora e página e PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Definir impressora Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");

        // Definir PageSize (se necessário)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Definir PageMargins (se necessário)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configurações de impressora e página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Fechar o arquivo PDF após a impressão
        viewer.close();
    }

Imprimindo PDF Colorido em Arquivo XPS como Escala de Cinza

Um documento PDF colorido pode ser impresso em uma impressora XPS como escala de cinza, usando PdfViewer. Para conseguir isso, você precisa usar a propriedade PdfViewer.PrintAsGrayscale e defini-la como true.

O trecho de código a seguir demonstra a implementação da propriedade PdfViewer.PrintAsGrayscale.

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

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

        // Definir atributos para impressão
        viewer.setAutoResize(true); // Imprimir o arquivo com tamanho ajustado
        viewer.setAutoRotate(true); // Imprimir o arquivo com rotação ajustada

        viewer.setPrintAsGrayscale(true);

        // Criar objetos para configurações de impressora e página e PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Definir impressora Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");

        // Definir PageSize (se necessário)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Definir PageMargins (se necessário)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configurações de impressora e página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Fechar o arquivo PDF após a impressão
        viewer.close();
    }

Conversão de PDF para PostScript

A classe PdfViewer fornece a capacidade de imprimir documentos PDF e, com a ajuda desta classe, também podemos converter arquivos PDF para o formato PostScript. Para converter um arquivo PDF em PostScript, primeiro instale qualquer impressora PS e apenas imprima para arquivo com a ajuda do PdfViewer.

O trecho de código a seguir mostra como imprimir e converter um PDF para o formato PostScript.

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

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

        // Definir atributos para impressão
        viewer.setAutoResize(true); // Imprimir o arquivo com tamanho ajustado
        viewer.setAutoRotate(true); // Imprimir o arquivo com rotação ajustada

        viewer.setPrintAsGrayscale(true);
        

        // Criar objetos para configurações da impressora e da página e PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // Definir Impressora PostScript
        printerSettings.setPrinterName("HP Universal Printing PS (v7.0.0)");
        printerSettings.setPrintToFile(true);
        printerSettings.setPrintFileName(_dataDir+"result.ps");

        // Definir PageSize (se necessário)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Definir PageMargins (se necessário)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configurações de impressora e página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // Fechar o arquivo PDF após a impressão
        viewer.close();
    }

Verificando o Status da Tarefa de Impressão

Um arquivo PDF pode ser impresso em uma impressora física, assim como no Microsoft XPS Document Writer, sem exibir uma caixa de diálogo de impressão, usando a classe PdfViewer. Ao imprimir arquivos PDF grandes, o processo pode demorar muito tempo, então o usuário pode não ter certeza se o processo de impressão foi concluído ou encontrou um problema. Para determinar o status de uma tarefa de impressão, use a propriedade PrintStatus. O trecho de código a seguir mostra como imprimir o arquivo PDF em um arquivo XPS e obter o status da impressão.

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

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

        // Definir atributos para impressão
        viewer.setAutoResize(true); // Imprimir o arquivo com tamanho ajustado
        viewer.setAutoRotate(true); // Imprimir o arquivo com rotação ajustada

        viewer.setPrintAsGrayscale(true);

        // Criar objetos para configurações de impressora e página e PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

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

        // Definir PageSize (se necessário)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // Definir PageMargins (se necessário)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // Imprimir documento usando configurações de impressora e página
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // // Verificar o status da impressão
        if (viewer.getPrintStatus() != null) {
            Exception ex = (Exception) viewer.getPrintStatus();
            System.out.println(ex.getMessage());
        } else {
            // Nenhum erro foi encontrado. Tarefa de impressão concluída com sucesso
            System.out.println("Tudo ocorreu bem!");
        }
        // Fechar o arquivo PDF após a impressão
        viewer.close();
    }