Thank you for your response On Wed, 20 Mar, 2024, 1:04 pm Nate Kerkhofs, <nate.kerkh...@ikan.be> wrote:
> 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* >