Hi Tanveer, This isn't really a struts issue, but I'll answer regardless.
There are security and usability issues related to automatic printing, so browsers block JavaScript from printing documents without user interaction. You won't be able to print pages automatically, you NEED to have the user confirm they want to print it through the browser print dialog. Those parameters you pass to the print() function have no effect in modern browsers. I'd recommend you open the PDF in the browser's PDF handler so the user can choose to click the print button in the browser's PDF handler itself. That said, it is possible to use the "afterprint" event in the browser to automatically execute JavaScript code to close the browser window after printing. https://developer.mozilla.org/en-US/docs/Web/API/Window/afterprint_event Regards, Nate Kerkhofs -----Original Message----- From: Tanveer Alaie <tanveer...@gmail.com> Sent: Tuesday, 19 March 2024 08:08 To: user@struts.apache.org Subject: Query regarding printing and closing Jasper reports in Struts2.5 I am facing an issue with printing and closing Jasper reports in my Struts2 application. Here's a brief overview of the problem: Description: In my Struts2 web application, I have a requirement to generate Jasper reports and provide an option to print them directly from the browser. Additionally, I need to automatically close the browser tab/window after the report is printed. Approach: I have tried implementing this functionality using JavaScript to call an action class where I get jasper report print . *Here's the JavaScript code on button click which call the action * var url="/Ipd/dischargeManagement/bill_print?billNo="+val2+"&admissionId="+val1; var popupWin= window.open(url,'Report','menubar, toolbar, location=center, directories, status, scrollbars, resizable, dependent, width=600, height=400 left=210, top=260'); *struts2 action configuration * <action name="bill_print" class="com.skims.action.DischargeBillAction" method="getBillPrint"> <interceptor-ref name="prepare"> <param name="excludeMethods">getBillPrint</param> </interceptor-ref> <result name="success" type="stream"> <param name="contentType">application/pdf</param> <param name="inputName">inputStream</param> <param name="contentDisposition">inline;filename="discharge_bill.pdf"</param> <param name="contentLength">${contentLength}</param> </result> <result name="input">/views/DischargeManagement/DischargeBill.jsp</result> </action> *Action in controller* public String getBillPrint() throws Exception { HttpServletResponse response = ServletActionContext.getResponse(); HttpServletRequest request = ServletActionContext.getRequest(); //Connection con = null; Map map = new HashMap(); Connection con=null; Session session = null; Long admissionId=0l; Long billNo=0l; String empCode=null; String imgPath; //String wardName=null; System.out.println("formate id==="+dischargeBill.getId()); try { if(request.getParameter("admissionId")!=null) admissionId=Long.parseLong(request.getParameter("admissionId")); if(request.getParameter("billNo")!=null) billNo=Long.parseLong(request.getParameter("billNo")); if(request.getParameter("empCode")!=null) empCode=request.getParameter("empCode"); session = HibernateUtil.getSessionFactory().openSession(); SessionImpl sessionImpl = (SessionImpl) session; con = sessionImpl.connection(); String reportPath; reportPath = ServletActionContext.getServletContext().getRealPath("/Reports/DischargeBill.jasper"); imgPath = ServletActionContext.getServletContext().getRealPath("/images/logo.jpg"); map.put("imgPath", imgPath); map.put("empCode",empCode); map.put("admissionId",admissionId); map.put("billNo",billNo); //System.out.println("sub report path==="+ServletActionContext.getServletContext().getRealPath("/Reports").concat("\\")); map.put("SUBREPORT_DIR",ServletActionContext.getServletContext().getRealPath("/Reports").concat("\\")); // map.put("imgPath",ClassLoader.getSystemResourceAsStream("1LOGO.JPG")); //map.put(JRParameter.REPORT_FILE_RESOLVER, new SimpleFileResolver(reportFile)); JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile(reportPath); net.sf.jasperreports.engine.JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, con); //for pdf format // Export PDF bytes ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, byteArrayOutputStream); // Add JavaScript code to automatically print the PDF String javascript = "this.print({bUI: false, bSilent: true, bShrinkToFit: true});this.close();"; exporter.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, javascript); exporter.exportReport(); // Set response headers response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "inline; filename=discharge_bill.pdf"); // Write PDF bytes to response output stream response.getOutputStream().write(byteArrayOutputStream.toByteArray()); response.getOutputStream().flush(); } catch (Exception e) { e.printStackTrace(System.out); } finally { if (con != null) { con.close(); } if (session != null) { session.close(); } } return SUCCESS; } I would appreciate any insights, suggestions, or alternative approaches to achieve reliable printing and closing of Jasper reports in a Struts2.5 application Warm Regards, Tanveer Ahmad Alaie, Computer Associate, Department of Electronics Communication & Information Technology, * SKIMS,* *Soura, Srinagar 190011, J&K (India). Cell: +91-9596044274*