以静默方式将“可打印”对象打印为PDF文件

时间:2017-05-09 07:45:59

标签: java pdf printing

如何以静默方式将“java.awt.print.Printable”对象打印到PDF? 几点注意事项:

  • 我没有PDF格式的数据
  • 我正在处理现有代码,所以我无法离开可打印的界面

所以我可以用job.printDialog()打印它。但我需要能够默默地做到这一点(没有用户输入)。可用的PDF打印机是“Adobe PDF”,我想其他人可以根据需要安装。

以下是基本代码:

Printable printout = /*object*/;
Book pageable = new Book();
pageable.append(printout, pageFormat);

DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();

// Add Filepath?

PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);
if (ps.length == 0)
    throw new IllegalStateException("No Printer found");

PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintService(ps[0]);

job.setPrintable(printout);

1 个答案:

答案 0 :(得分:0)

我最终决定放弃尝试在java中执行此操作,而是使用PDF打印机,该打印机可以选择以静默方式打印到预定路径。

DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PAGEABLE;
PrintRequestAttributeSet patts = new HashPrintRequestAttributeSet();
PrintService[] ps = PrintServiceLookup.lookupPrintServices(flavor, patts);

System.out.println("Available printers: " + Arrays.asList(ps));

PrintService myService = null;
for (PrintService printService : ps) {
    if (printService.getName().contains("PDF Writer - bioPDF")) {
        myService = printService;
        break;
    }
}

if (myService == null) {
    throw new IllegalStateException("bioPDF Printer not found");
}

PrinterJob job = PrinterJob.getPrinterJob();
job.setJobName(jobName);
job.setPrintService(myService);
job.setPrintable(printout);

job.print();