/**
* 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 com.ewcms.plugin.BaseRuntimeException;
import java.io.ByteArrayOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
/**
* excel报表
*
* @author 吴智俊
*/
public class XlsGenerateService extends BaseTextGenerateServiceable {
private static final Logger logger = LoggerFactory.getLogger(XlsGenerateService.class);
protected byte[] generate(JasperPrint jasperPrint,
HttpServletResponse response, HttpServletRequest request) {
try {
// 必须生成不然中文乱码
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, byteArrayOutputStream);
// 删除记录最下面的空行
exporter.setParameter(JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE);
// 删除多余的ColumnHeader
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.SHEET_NAMES, new String[]{"AlqcXls"});
// 显示边框
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
exporter.setParameter(JRXlsExporterParameter.IS_COLLAPSE_ROW_SPAN, Boolean.TRUE);;
exporter.exportReport();
byte[] bytes = byteArrayOutputStream.toByteArray();
if (response != null) {
response.setContentLength(bytes.length);
response.setContentType("application/vnd.ms-excel");
}
return bytes;
} catch (Exception e) {
logger.error("Xls Generate Exception", e);
throw new BaseRuntimeException(e.toString());
}
}
}