package com.ese.service;
import com.ese.utils.FacesUtil;
import com.ese.utils.Utils;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.Barcode;
import com.itextpdf.text.pdf.Barcode128;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Collection;
import java.util.Map;
import java.io.FileOutputStream;
import com.itextpdf.text.*;
@Component
@Transactional
public class ReportService extends Service{
private static final long serialVersionUID = 4112578632409874840L;
public void exportPDF(String fileName, Map parameters,String pdfName, Collection reportList) throws Exception {
log.debug("generate pdf.");
InputStream inputStream = null;
JasperReport jasperReport;
JRDataSource dataSource;
JasperPrint print;
ServletOutputStream servletOutputStream = null;
log.debug("fileName : {}", fileName);
try {
inputStream = FacesUtil.getFacesContext().getExternalContext().getResourceAsStream(fileName);
jasperReport = JasperCompileManager.compileReport(inputStream);
dataSource = new JRBeanCollectionDataSource(reportList);
if (!Utils.isNull(dataSource) && Utils.isCollection(reportList) && !Utils.isNull(reportList)){
print = JasperFillManager.fillReport(jasperReport, parameters, dataSource);
} else {
print = JasperFillManager.fillReport(jasperReport, parameters, new JREmptyDataSource());
}
byte[] bytes;
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
servletOutputStream = response.getOutputStream();
servletOutputStream.flush();
bytes = JasperExportManager.exportReportToPdf(print);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
servletOutputStream.write(bytes, 0, bytes.length);
servletOutputStream.flush();
facesContext.responseComplete();
facesContext.renderResponse();
log.debug("generatePDF completed.");
} catch (Exception e) {
log.debug("Exception e :", e);
} finally {
if (servletOutputStream != null)servletOutputStream.close();
if (inputStream != null)inputStream.close();
if (servletOutputStream != null)servletOutputStream.close();
}
}
}