Java printDialog()在linux机器上部署时不工作(无弹出窗口)
我使用的是ApacheWicket 6.19.0、PDFBOx1.8.8和Java8。 我面临的问题是,当我在Java printDialog()在linux机器上部署时不工作(无弹出窗口),java,linux,pdfbox,wicket-6,wicket-1.6,Java,Linux,Pdfbox,Wicket 6,Wicket 1.6,我使用的是ApacheWicket 6.19.0、PDFBOx1.8.8和Java8。 我面临的问题是,当我在Windows机器上部署应用程序时,屏幕上会显示打印对话框,但当部署在Linux服务器上时,从UI调用打印功能时,屏幕上不会显示打印对话框 代码: PrinterJob是AWT的一个类,即桌面功能。 您不能在服务器上使用它。 ApacheWicket是一个web框架,因此我假设您的用户将通过浏览器访问应用程序。在这种情况下,您有两种选择: 呈现一个好看的HTML,并使用JavaScrip
Windows
机器上部署应用程序时,屏幕上会显示打印对话框,但当部署在Linux
服务器上时,从UI调用打印功能时,屏幕上不会显示打印对话框
代码:
PrinterJob是AWT的一个类,即桌面功能。 您不能在服务器上使用它。 ApacheWicket是一个web框架,因此我假设您的用户将通过浏览器访问应用程序。在这种情况下,您有两种选择:
window.print()
打印它Content-Disposition:Inline
response头显示它(如果浏览器有PDF插件)
2.2。使用Content-Disposition:Attachment
我不确定是否有办法用JavaScript打印PDF。那么,你的意思是说printDialog无法在Linux上工作?能用Windows吗?不,我是说它能用在本地主机上,但不能用在服务器上。在localhost上,您有一个桌面UI(Linux中称为“X”),而在服务器上通常没有。即使PrinterJob在服务器上工作(运行X并正确导出$DISPLAY env),它也会在服务器上显示对话框,而不是在用户的机器上。
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;
}