-2

我正在使用Apache wicket 6.19.0,pdfbox 1.8.8Java 8. 我面临的问题是,当我在Windows机器上部署我的应用程序时,我在屏幕上看到了打印对话框,但是当部署在Linux服务器上时,当从 UI 调用打印功能时,它不会在屏幕上显示打印对话框。

代码:

public static PrintService choosePrinter() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    if(printJob.printDialog()) {
        return printJob.getPrintService();          
    }else {
        return null;
    }
}

@Override
public File getObject() {
    File file = new File("document.pdf");
    file.deleteOnExit();
    PDDocument document = new PDDocument();
    //prepare the pdf here...
    PrinterJob job = PrinterJob.getPrinterJob();
    PrintService service = choosePrinter();
    if(service != null){
        job.setPrintService(service);
        document.silentPrint(job);
    }
    document.close();
    } catch (Exception e) {
        LOGGER.error("Exception: "+e);
    }
    return file;
}
4

1 回答 1

1

PrinterJob 是 AWT 的一个类,即桌面功能。您不能在服务器上使用它。Apache Wicket 是一个 Web 框架,因此我假设您的用户将通过浏览器访问应用程序。在这种情况下,您有两种选择:

  1. 渲染一个好看的 HTML 并使用 JavaScriptwindow.print()来打印它

  2. 呈现 PDF 并将其流式传输到浏览器,以便它:

    2.1。使用Content-Disposition: Inline响应头显示(如果浏览器有 PDF 插件)

    2.2. 要求用户保存它,通过使用Content-Disposition: Attachment

我不确定是否有办法用 JavaScript 打印 PDF。

于 2015-05-07T06:29:11.187 回答