/**
* Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved.
* EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
* http://www.ewcms.com
*/
package com.ewcms.plugin.report.generate.service.text;
import java.io.ByteArrayOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ewcms.plugin.BaseRuntimeException;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
/**
* html格式报表
*
* @author 吴智俊
*/
public class HtmlGenerateService extends BaseTextGenerateServiceable {
private static final Logger logger = LoggerFactory.getLogger(HtmlGenerateService.class);
protected byte[] generate(JasperPrint jasperPrint,
HttpServletResponse response, HttpServletRequest request) {
try {
// Integer pageIndex = 0;
// Integer lastPageIndex = 0;
// if (jasperPrint.getPages() != null) {
// lastPageIndex = jasperPrint.getPages().size() - 1;
// }
//
// try {
// String pageStr = request.getParameter("page");
// pageIndex = Integer.valueOf(pageStr);
// } catch (Exception e) {
//
// }
// if (pageIndex < 0) {
// pageIndex = 0;
// }
// if (pageIndex > lastPageIndex) {
// pageIndex = lastPageIndex;
// }
String HTML_HEADER = ""
+ "<html>\n"
+ " <head>\n"
+ " <title>HTML报表</title>\n"
+ " <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>\n"
+ " <meta http-equiv='imagetoolbar' content='no'/>\n"
+ " <style type='text/css'>\n"
+ " a {text-decoration: none}\n"
+ " </style>\n"
// + " <script language='javascript' type='text/javascript'>"
// + " function pageJump(page){"
// + " document.getElementById('page').value = page;"
// + " document.forms[0].submit();"
// + " }"
// + " </script>"
+ " </head>\n"
+ " <body text='#000000' link='#000000' alink='#000000' vlink='#000000'>\n"
// + " <form action='build.do'>"
+ " <table width='100%' cellpadding='0' cellspacing='0' border='0'>\n"
;
// if (lastPageIndex > 0){
// HTML_HEADER += ""
// + " <tr>\n"
// + " <td width='50%'> </td>\n"
// + " <td align='left'>\n"
// + " <hr size='1' color='#000000'>\n"
// + " <table width='100%' cellpadding='0' cellspacing='0' border='0'>\n"
// + " <tr>\n"
// ;
//
// if (pageIndex > 0) {
// HTML_HEADER += ""
// + "<td align='center'><button name='first' value='first' onclick='pageJump(0)'>第一页</button></td>\n"
// + "<td align='center'><button name='previous' value='previous' onclick='pageJump("
// + (pageIndex - 1) + ")'>上一页</button></td>\n";
// } else {
// HTML_HEADER += ""
// + "<td align='center'><button name='first' value='first'>第一页</button></td>\n"
// + "<td align='center'><button name='previous' value='previous'>上一页</button></td>\n";
// }
// if (pageIndex < lastPageIndex) {
// HTML_HEADER += ""
// + "<td align='center'><button name='next' value='next' onclick='pageJump("
// + (pageIndex + 1)
// + ")'>下一页</button></td>\n"
// + "<td align='center'><button name='last' value='last' onclick='pageJump("
// + (lastPageIndex) + ")'>最后页</button></td>\n";
// } else {
// HTML_HEADER += ""
// + "<td align='center'><button name='next' value='next'>下一页</button></td>\n"
// + "<td align='center'><button name='last' value='last'>最后页</button></td>\n";
// }
// HTML_HEADER += ""
// + " </tr>\n"
// + " </table>\n"
// + " <hr size='1' color='#000000'>\n"
// + " </td>\n"
// + " <td width='50%'> </td>\n"
// + " </tr>\n"
// ;
// }
HTML_HEADER += ""
+ " <tr>\n"
+ " <td width='50%'> </td>\n"
+ " <td align='center' valign='top'>\n";
String HTML_FOOTER = ""
+ " </td>\n"
+ " <td width='50%'> </td>\n"
+ " </tr>\n"
+ " </table>\n"
// + " <input type='hidden' name='page' id='page'/>"
// + " <input type='hidden' name='reportType' value='text'/>"
// + " </form>"
+ " </body>\n"
+ "</html>\n";
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
JRHtmlExporter exporter = new JRHtmlExporter();
exporter
.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER,
HTML_HEADER);
// 翻页的处理
exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML,
"<br style='page-break-before:always;'>");
// 不显示周边不相关的图片
exporter.setParameter(
JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,
Boolean.FALSE);
// 删除记录最下面的空行
exporter.setParameter(
JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,
Boolean.TRUE);
exporter.setParameter(JRHtmlExporterParameter.JASPER_PRINT,
jasperPrint);
exporter.setParameter(JRHtmlExporterParameter.OUTPUT_STREAM,
byteArrayOutputStream);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
"image?image=");
// if (lastPageIndex>0){
// exporter.setParameter(JRExporterParameter.PAGE_INDEX, Integer.valueOf(pageIndex));
// }
exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER,
HTML_FOOTER);
exporter.exportReport();
byte[] bytes = byteArrayOutputStream.toByteArray();
if (response != null) {
response.setContentLength(bytes.length);
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
}
return bytes;
} catch (JRException e) {
logger.error("Html Generate Exception", e);
throw new BaseRuntimeException(e.toString());
}
}
}