2

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
Alex K
  • 22,315
  • 19
  • 108
  • 236
Sanal S
  • 21
  • 1
  • 5

1 Answers1

1

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

Petter Friberg
  • 21,252
  • 9
  • 60
  • 109
  • Thank you very much Petter. Guess i'll need to export this to pdf then. can u suggest me any good place to learn this, i am new to this. – Sanal S Oct 20 '15 at 08:50
  • My pleasure, http://www.tutorialspoint.com/jasper_reports/jasper_exporting_reports.htm and there is alot of questions about this on SO – Petter Friberg Oct 20 '15 at 12:42
  • thanks it worked... :) do you know how to open a pdf as ready to be printed on jsp page load? – Sanal S Oct 21 '15 at 05:53
  • <%@ page contentType="application/pdf" %> <%@ page trimDirectiveWhitespaces="true"%> JasperExportManager.exportReportToPdfStream(print, response.getOutputStream()); – Petter Friberg Oct 21 '15 at 10:38
  • Be carefull to not send anything else to browser as html tags, doctype or system.out – Petter Friberg Oct 21 '15 at 10:40
  • ok that only loaded the pdf file but without including <%@ page contentType="application/pdf" %> <%@ page trimDirectiveWhitespaces="true"%>, where am i suppose to set these pages at if i am redirecting the servlet with JasperExportManager.exportReportToPdfStream(print, resp.getOutputStream()); ... Can i print that pdf file created after convertion, by loading it in browser? – Sanal S Oct 21 '15 at 11:32
  • i found a solution for that last question. – Sanal S Oct 21 '15 at 12:35