我只在linux中得到这个错误,在Windows中它运行正常
Linux目标:Ubuntu 18.04/Deepin 15.11
Java版本:1.8.0_
在下面的打印对话框中发出打印命令时出错:
=代码
private void testDialogPrint() {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection connection = DriverManager.getConnection("jdbc:sqlserver://x.x.x.x:1433;databaseName=abc","sa","****");
HashMap<String, Object> params = new HashMap<String,Object>();;
JasperPrint printedReport = JasperFillManager.fillReport("test.jasper", params, connection);
String outputFilename = "Test.pdf";
JasperExportManager.exportReportToPdfFile( printedReport, outputFilename );//file creation success
JasperPrintManager.printReport(printedReport, true);
} catch (ClassNotFoundException | SQLException | JRException e) {
e.printStackTrace();
}
}
=MESSAGE错误
net.sf.jasperreports.engine.JRException: Error printing report.
at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:215)
at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:246)
at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:133)
at net.sf.jasperreports.engine.JasperPrintManager.printReport(JasperPrintManager.java:329)
at com.Start.imprimir(Start.java:46)
at com.Start.main(Start.java:27)
Caused by: java.awt.print.PrinterIOException
at sun.print.PSPrinterJob$PrinterSpooler.run(PSPrinterJob.java:737)
at java.security.AccessController.doPrivileged(Native Method)
at sun.print.PSPrinterJob.endDoc(PSPrinterJob.java:792)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1562)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1390)
at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:201)
... 5 more
Caused by: java.io.IOException: Cannot run program "/usr/bin/lpr": error=2, No existe el fichero o el directorio
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:485)
at sun.print.PSPrinterJob$PrinterSpooler.run(PSPrinterJob.java:730)
... 10 more
Caused by: java.io.IOException: error=2, No existe el fichero o el directorio
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 13 more
最佳答案
看起来Sun JDK是为/usr/bin/lpr硬编码的。-https://kbpdfstudio.qoppa.com/printing-to-pdf-error-message-on-debian-gnulinux-7/