2017-05-09 107 views
0

如何将“java.awt.print.Printable”对象静默地打印到PDF?
几点需要注意:无声打印“可打印”对象到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); 

回答

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();