Re: Query regarding printing and closing Jasper reports in Struts2.5

2024-03-20 Thread Tanveer Alaie
Thank you for your response

On Wed, 20 Mar, 2024, 1:04 pm Nate Kerkhofs,  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 
> 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+"="+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 *
>
>   method="getBillPrint">
> 
> getBillPrint
> 
> 
> application/pdf
> inputStream
>  name="contentDisposition">inline;filename="discharge_bill.pdf"
>  ${contentLength}
> 
>  name="input">/views/DischargeManagement/DischargeBill.jsp
>
> 
> *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().get

RE: Query regarding printing and closing Jasper reports in Struts2.5

2024-03-20 Thread Nate Kerkhofs
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  
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+"="+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 *

 

getBillPrint


application/pdf
inputStream
inline;filename="discharge_bill.pdf"
 ${contentLength}

/views/DischargeManagement/DischargeBill.jsp


*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

Query regarding printing and closing Jasper reports in Struts2.5

2024-03-19 Thread Tanveer Alaie
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+"="+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 *

 

getBillPrint


application/pdf
inputStream
inline;filename="discharge_bill.pdf"
 ${contentLength}

/views/DischargeManagement/DischargeBill.jsp


*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