import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;
public class JasperReport {
Logger log = GmLogger.getInstance(this.getClass().getName());
private String strJasperReportName = "";
private HashMap hmReportParameters = null;
private List reportDataList = null;
private HttpServletRequest request = null;
private HttpServletResponse response = null;
private String strJasperRealLocation = "";
private int intpageHeight = 970;
public void setJasperReportName(String strReportName) {
this.strJasperReportName = strReportName;
}
public String getJasperReportName() {
return strJasperReportName;
}
public void setHmReportParameters(HashMap hmParameters) {
this.hmReportParameters = hmParameters;
}
public void setPageHeight(int intPHeight) {
this.intpageHeight = intPHeight;
}
public HashMap getHmReportParameters() {
return hmReportParameters;
}
public void setReportDataList(List dataList) {
this.reportDataList = dataList;
}
public List getReportDataList() {
return reportDataList;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
public HttpServletResponse getResponse() {
return response;
}
public void setResponse(HttpServletResponse response) {
this.response = response;
}
/**
* in the future, when we use another jasper location, "path", and set it in the
* method:setJasperRealLocation(String path), instead of returns this
* default strJasperRealLocation, it will return the value of "path";
*/
public String getJasperRealLocation() {
if (strJasperRealLocation == null || strJasperRealLocation.equals("")) {
strJasperRealLocation = request.getSession().getServletContext().getRealPath(GmCommonClass.getString("GMJASPERLOCATION"));
}
return strJasperRealLocation;
}
public void setJasperRealLocation(String path) {
this.strJasperRealLocation = path;
}
public void createJasperReport() throws Exception {
String strJasperPath = GmCommonClass.getString("GMJASPERLOCATION");
JasperPrint jp = null;
JRExporter exporter = null;
InputStream reportStream;
ServletOutputStream servletOutputStream = response.getOutputStream();
reportStream = request.getSession().getServletContext().getResourceAsStream(strJasperPath + strJasperReportName);
if (reportDataList != null) {
jp = JasperFillManager.fillReport(reportStream, hmReportParameters, new JRBeanCollectionDataSource(reportDataList));
} else {
/*
* if there is/are subreport(s) in detail section and we don't want
* to print out duplicated sub reports, set this value as "new
* JREmptyDataSource()" when use reportDataList in the detail
* section.
*/
jp = JasperFillManager.fillReport(reportStream, hmReportParameters, new JREmptyDataSource());
}
jp.setPageHeight(intpageHeight);
exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, servletOutputStream);
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jp);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, new HashMap());
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/GmImageServlet?image=");
exporter.exportReport();
servletOutputStream.close();
}
public String getHtmlReport() throws JRException, FileNotFoundException, IOException {
String strJasperPath = GmCommonClass.getString("GMJASPERLOCATION");
JasperPrint jp = null;
JRExporter exporter = null;
StringBuffer strBuffer = new StringBuffer();
InputStream reportStream;
if(request == null)
{
String jasperPath = GmCommonClass.getString("GMJASPERTEMPLATEPATH");
reportStream = new FileInputStream(jasperPath + strJasperReportName);
log.debug("Jasper location = " + jasperPath + strJasperReportName);
}
else
{
reportStream = request.getSession().getServletContext().getResourceAsStream(strJasperPath + strJasperReportName);
log.debug("Jasper location = " + strJasperPath + strJasperReportName);
}
if (reportDataList != null) {
jp = JasperFillManager.fillReport(reportStream, hmReportParameters, new JRBeanCollectionDataSource(reportDataList));
} else {
/*
* if there is/are subreport(s) in detail section and we don't want
* to print out duplicated sub reports, set this value as "new
* JREmptyDataSource()" when use reportDataList in the detail
* section.
*/
jp = JasperFillManager.fillReport(reportStream, hmReportParameters, new JREmptyDataSource());
}
jp.setPageHeight(intpageHeight);
exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, strBuffer);
//request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jp);
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, new HashMap());
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, request.getContextPath() + "/GmImageServlet?image=");
//exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, getImageURI());
//
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, new Boolean(false));
exporter.exportReport();
return strBuffer.toString();
}
public void exportJasperReportToHtml(String strDestFileName) throws Exception {
String strJasperPath = GmCommonClass.getString("GMJASPERLOCATION");
JasperPrint jp = null;
InputStream reportStream;
ServletOutputStream servletOutputStream = response.getOutputStream();
reportStream = request.getSession().getServletContext().getResourceAsStream(strJasperPath + strJasperReportName);
if (reportDataList != null) {
jp = JasperFillManager.fillReport(reportStream, hmReportParameters, new JRBeanCollectionDataSource(reportDataList));
} else {
/*
* if there is/are subreport(s) in detail section and we don't want
* to print out duplicated sub reports, set this value as "new
* JREmptyDataSource()" when use reportDataList in the detail
* section.
*/
jp = JasperFillManager.fillReport(reportStream, hmReportParameters, new JREmptyDataSource());
}
jp.setPageHeight(intpageHeight);
JasperExportManager.exportReportToHtmlFile(jp,strDestFileName);
servletOutputStream.close();
}
public HashMap sendJasperMail(String strReportName,
HashMap hmParams,
ArrayList alReportData,
GmEmailProperties emailProperties, HttpServletRequest request) throws Exception
{
HashMap hmReturn = new HashMap();
try
{
String strMessageDesc = "Original Mail Not Found.";
setJasperReportName(strReportName);
setHmReportParameters(hmParams);
setReportDataList(alReportData);
setRequest(request);
strMessageDesc = getHtmlReport();
hmReturn.put("ORIGINALMAIL", strMessageDesc);
emailProperties.setMessage(strMessageDesc);
log.debug("Sending jasper mail to : " + emailProperties);
GmCommonClass.sendMail(emailProperties);
}
catch (Exception e)
{
e.printStackTrace();
hmReturn.put("EXCEPTION", e);
}
return hmReturn;
}
}
Вы перекомпилировали 'jxml' в' jasper'? Вы обновили кеш веб-сервера/контейнера ...? – MadProgrammer
Я перепробовал jxml, и я остановился/начал Tomcat – FernandoPaiva
Я использую Maven с Ваадином. Вы думаете, это может быть что-то? – FernandoPaiva