使用PDF打印

使用打印机和页面设置打印PDF文件到默认打印机

PdfViewer类允许您将PDF文件打印到默认打印机。因此,您需要创建一个PdfViewer对象,并使用openPdfFile(..)方法打开PDF。

调用printDocument(..)方法将PDF打印到默认打印机。

以下代码片段显示了如何使用打印机和页面设置将PDF打印到默认打印机。

 public static void PrintingPDFFile() {
        // 创建PdfViewer对象
        PdfViewer viewer = new PdfViewer();

        // 打开输入PDF文件
        viewer.bindPdf(_dataDir + "sample.pdf");

        // 设置打印属性
        viewer.setAutoResize(true); // 以调整后的尺寸打印文件
        viewer.setAutoRotate(true); // 以调整后的旋转角度打印文件
        viewer.setPrintPageDialog(false); // 打印时不显示页码对话框

        // 为打印机和页面设置以及PrintDocument创建对象
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // 设置打印机名称
        printerSettings.setPrinterName("Microsoft Print to PDF");
        

        // 设置页面大小(如果需要)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // 设置页面边距(如果需要)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // 使用打印机和页面设置打印文档
        viewer.printDocumentWithSettings(pageSettings, printerSettings);
        
        // 打印后关闭PDF文件
        viewer.close();
    }

为了显示打印对话框,尝试使用以下代码片段:

public static void PrintingPDFDisplayPrintDialog() {
        // 创建 PdfViewer 对象
        PdfViewer viewer = new PdfViewer();

        // 打开输入 PDF 文件
        viewer.bindPdf(_dataDir + "sample.pdf");

        // 设置打印属性
        viewer.setAutoResize(true); // 打印文件时调整大小
        viewer.setAutoRotate(true); // 打印文件时调整旋转
        viewer.setPrintPageDialog(true);

        // 为打印机和页面设置以及 PrintDocument 创建对象
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // 设置页面大小(如果需要)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // 设置页面边距(如果需要)
        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());
            // 使用打印机和页面设置打印文档
            viewer.printDocumentWithSettings(pageSettings, printerSettings);
        }
        // 打印后关闭 PDF 文件
        viewer.close();
    }

打印 PDF 到虚拟打印机

有些打印机可以打印到文件。我们设置虚拟打印机的名称,并按照前面的例子进行设置。

public static void PrintingPDFToSoftPrinter() {
        // 创建 PdfViewer 对象
        PdfViewer viewer = new PdfViewer();

        // 打开输入 PDF 文件
        viewer.bindPdf(_dataDir + "sample.pdf");

        // 设置打印属性
        viewer.setAutoResize(true); // 打印时调整大小
        viewer.setAutoRotate(true); // 打印时调整旋转
        viewer.setPrintPageDialog(false); // 打印时不显示页码对话框

        // 创建打印机和页面设置以及 PrintDocument 对象
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // 设置打印机为 Microsoft 虚拟打印机
        printerSettings.setPrinterName("Microsoft Print to PDF");
        // 或者 Adobe
        // printerSettings.setPrinterName("Adobe PDF");

        // 设置页面大小(如果需要)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // 设置页面边距(如果需要)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // 使用打印机和页面设置打印文档
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // 打印后关闭 PDF 文件
        viewer.close();
    }

隐藏打印对话框

Aspose.PDF for Java 允许您隐藏打印对话框。为此,请使用getPrintPageDialog方法。

以下代码片段向您展示了如何隐藏打印对话框。

public static void PrintingPDFHidePrintDialog() {
        // 创建 PdfViewer 对象
        PdfViewer viewer = new PdfViewer();

        // 打开输入 PDF 文件
        viewer.bindPdf(_dataDir + "sample.pdf");

        // 设置打印属性
        viewer.setAutoResize(true); // 打印调整大小的文件
        viewer.setAutoRotate(true); // 打印调整旋转的文件

        viewer.setPrintPageDialog(false); // 打印时不显示页码对话框

        // 为打印机和页面设置以及 PrintDocument 创建对象
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // 设置打印机为 Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");

        // 设置页面大小(如果需要)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // 设置页面边距(如果需要)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // 使用打印机和页面设置打印文档
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // 打印后关闭 PDF 文件
        viewer.close();
    }

打印彩色 PDF 为灰度 XPS 文件

可以使用 PdfViewer 将彩色 PDF 文档打印为灰度 XPS 文档。为此,您需要使用属性 PdfViewer.PrintAsGrayscale 并将其设置为 true

以下代码片段演示了 PdfViewer.PrintAsGrayscale 属性的实现。

 public static void PrintingPDFasGrayscale() {
        // 创建 PdfViewer 对象
        PdfViewer viewer = new PdfViewer();

        // 打开输入 PDF 文件
        viewer.bindPdf(_dataDir + "sample.pdf");

        // 设置打印属性
        viewer.setAutoResize(true); // 以调整后的大小打印文件
        viewer.setAutoRotate(true); // 以调整后的旋转打印文件

        viewer.setPrintAsGrayscale(true);

        // 创建打印机和页面设置对象以及 PrintDocument
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // 设置打印机 Microsoft Soft Printer
        printerSettings.setPrinterName("Microsoft Print to PDF");

        // 设置页面大小(如果需要)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // 设置页面边距(如果需要)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // 使用打印机和页面设置打印文档
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // 打印后关闭 PDF 文件
        viewer.close();
    }

PDF 转换为 PostScript

PdfViewer 类提供了打印 PDF 文档的功能,并且借助这个类,我们也可以将 PDF 文件转换为 PostScript 格式。要将 PDF 文件转换为 PostScript,首先安装任何 PS 打印机,然后借助 PdfViewer 打印到文件。

以下代码片段展示了如何打印并将 PDF 转换为 PostScript 格式。

public static void PrintingPDFToPostScript() {
        // 创建 PdfViewer 对象
        PdfViewer viewer = new PdfViewer();

        // 打开输入 PDF 文件
        viewer.bindPdf(_dataDir + "sample.pdf");

        // 设置打印属性
        viewer.setAutoResize(true); // 打印调整大小的文件
        viewer.setAutoRotate(true); // 打印调整旋转的文件

        viewer.setPrintAsGrayscale(true);
        

        // 创建打印机和页面设置以及 PrintDocument 的对象
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // 设置 PostScript 打印机
        printerSettings.setPrinterName("HP Universal Printing PS (v7.0.0)");
        printerSettings.setPrintToFile(true);
        printerSettings.setPrintFileName(_dataDir+"result.ps");

        // 设置页面大小(如果需要)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // 设置页面边距(如果需要)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // 使用打印机和页面设置打印文档
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // 打印后关闭 PDF 文件
        viewer.close();
    }

检查打印作业状态

可以将 PDF 文件打印到物理打印机以及 Microsoft XPS Document Writer,而无需显示打印对话框,使用 PdfViewer 类。在打印大型 PDF 文件时,可能需要很长时间,因此用户可能不确定打印过程是否完成或遇到问题。要确定打印作业的状态,请使用 PrintStatus 属性。以下代码片段向您展示如何将 PDF 文件打印到 XPS 文件并获取打印状态。

public static void CheckingPrintJobStatus() {
        // 创建 PdfViewer 对象
        PdfViewer viewer = new PdfViewer();

        // 打开输入 PDF 文件
        viewer.bindPdf(_dataDir + "sample.pdf");

        // 设置打印属性
        viewer.setAutoResize(true); // 打印调整大小的文件
        viewer.setAutoRotate(true); // 打印调整旋转的文件

        viewer.setPrintAsGrayscale(true);

        // 为打印机和页面设置以及 PrintDocument 创建对象
        PdfPrinterSettings printerSettings = new PdfPrinterSettings();
        PrintPageSettings pageSettings = new PrintPageSettings();

        // 设置打印机 Microsoft Soft Printer
        printerSettings.setPrinterName("HP Universal Printing PS (v7.0.0)");

        // 设置页面大小(如果需要)
        pageSettings.setPaperSize(new PrintPaperSize("A4", 827, 1169));

        // 设置页面边距(如果需要)
        pageSettings.setMargins(new PrinterMargins(0, 0, 0, 0));

        // 使用打印机和页面设置打印文档
        viewer.printDocumentWithSettings(pageSettings, printerSettings);

        // 检查打印状态
        if (viewer.getPrintStatus() != null) {
            Exception ex = (Exception) viewer.getPrintStatus();
            System.out.println(ex.getMessage());
        } else {
            // 未发现错误。打印作业已成功完成
            System.out.println("一切正常!");
        }
        // 打印后关闭 PDF 文件
        viewer.close();
    }