如何以静默方式将“java.awt.print.Printable”对象打印到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 :(得分: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();