Reputation: 21
This below is my code:-
Map parameters = new HashMap();
parameters.put("printer", "1010111");
FileInputStream file = new FileInputStream(new File(getServletContext().getRealPath("/Reports/report1.jasper")));
JasperPrint print = JasperFillManager.fillReport(file, parameters, new JRBeanCollectionDataSource(reports));
JasperPrintManager.printReport(print, true);
I am trying to print the jasper page. I don't have any trouble when using "JasperPrintManager.printReport(print, false)" but when i use "true", I get the following error.
Severe: net.sf.jasperreports.engine.JRException: Error printing report.
at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:214)
at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:242)
at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:129)
at net.sf.jasperreports.engine.JasperPrintManager.printReport(JasperPrintManager.java:326)
at Reports.Closing_Report_Report.doGet(Closing_Report_Report.java:73)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.awt.HeadlessException
at sun.awt.windows.WPrinterJob.printDialog(WPrinterJob.java:576)
at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:198)
... 33 more
Upvotes: 2
Views: 3055
Reputation: 21710
What is important to understand is that it is not the browser that is printing with
JasperPrintManager.printReport(print, false)
Its actually the server that is printing to your preferred printer, hence a web user will always print on the server printer (not on his own printer).
That's why
JasperPrintManager.printReport(print, true)
does not work, you can't tell the server to open the PrintDialog
. This call is used in desktop application.
It's impossibile to print directly on client printer (excluding the development of browser plugin that needs to be installed on client's browser). If this was possibile with out special plugin's our printers would be printing spam all day.
The closes you can get is to export the report to the browser and then automatically open the print dialog.
This is an example exporting to pdf: Automatically open the printer dialog after providing PDF download
Upvotes: 1