发送PDF文件到假脱机打印卡

时间:2015-02-03 16:45:22

标签: java pdf printing spool

我做了以下代码从磁盘读取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就是一个例子。它被卡住了,如下图所示。

http://s11.postimg.org/fowesqcoz/printing.png

如果我使用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);
            }
        }
    }
}

0 个答案:

没有答案