我做了以下代码从磁盘读取PDF文件并将其发送到打印假脱机。
public boolean sendToSpool(File pdf, int copies) {
InputStream is;
try {
is = new FileInputStream(pdf);
} catch (FileNotFoundException e) {
return false;
}
try {
SimpleDoc doc = new SimpleDoc(is, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
DocPrintJob printJob = printService.createPrintJob();
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
pras.add(new Copies(copies));
pras.add(MediaSizeName.ISO_A4);
pras.add(new RequestingUserName("print-service", Locale.US));
pras.add(new JobName("PRINT-SERVICE-" + pdf.getAbsolutePath(), Locale.US));
printJob.print(doc, pras);
} catch (PrintException e) {
return false;
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
此代码适用于我测试过的大多数打印机,但有些打印机并不适用。 doPDF 8就是一个例子。它被卡住了,如下图所示。
如果我使用Abobe Reader或Foxit Reader打开此文档并请求打印,则会向我显示一个弹出窗口,将新文件保存在磁盘上。
当我将其发送到PDF Creator时,它也会被打印出来。
以前有人见过这样的事吗?
更新
我使用第三方库(PDF Box)得到它。
@Override
public void print(File pdf, PrintService printService) {
PDDocument document = null;
try {
document = PDDocument.load(pdf);
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setJobName(pdf.getName());
printJob.setPrintService(printService);
printJob.setPageable(new PDPageable(document, printJob));
printJob.print();
} catch (PrinterException | IOException e) {
LOG.error(e.getMessage(), e);
} finally {
if (document != null ) {
try {
document.close();
} catch (IOException e) {
LOG.warn(e.getMessage(), e);
}
}
}
}