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*
>

Reply via email to