2017-05-09 108 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();