📄 reportgeneration.java
字号:
package com.csscis.common.report;
import java.awt.Color;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sf.jasperreports.engine.JRAlignment;
import net.sf.jasperreports.engine.JRElement;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRVariable;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.design.JRDesignBand;
import net.sf.jasperreports.engine.design.JRDesignExpression;
import net.sf.jasperreports.engine.design.JRDesignField;
import net.sf.jasperreports.engine.design.JRDesignGroup;
import net.sf.jasperreports.engine.design.JRDesignParameter;
import net.sf.jasperreports.engine.design.JRDesignQuery;
import net.sf.jasperreports.engine.design.JRDesignStaticText;
import net.sf.jasperreports.engine.design.JRDesignStyle;
import net.sf.jasperreports.engine.design.JRDesignTextField;
import net.sf.jasperreports.engine.design.JRDesignVariable;
import net.sf.jasperreports.engine.design.JasperDesign;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class ReportGeneration {
private static Log LOG = LogFactory.getLog(ReportGeneration.class);
private static JRDesignStyle NORMAL_STYLE = new JRDesignStyle();
private static JRDesignStyle NORMAL_BOLD_STYLE = new JRDesignStyle();
private static JRDesignStyle TITLE_STYLE = new JRDesignStyle();
private static JRDesignStyle TITLE_BOLB_STYLE = new JRDesignStyle();
private static int TITLE_HEIGHT = 50;
private static int HEAD_COLUMN_HEIGHT = 18;
private static int COLUMN_HEIGHT = 15;
private int columnWidth = 0;
private Connection conn;
private RptMain rptMain;
private JasperDesign jasperDesign;
private List columnHeads1;
private List columnHeads2;
private Object[] columns;
private String errMessage;
private Map summaryVariables;
static {
NORMAL_STYLE.setName("normalStyle");
NORMAL_STYLE.setDefault(true);
NORMAL_STYLE.setFontName("song");
NORMAL_STYLE.setFontSize(9);
NORMAL_STYLE.setPdfFontName("STSong-Light");
NORMAL_STYLE.setPdfEncoding("UniGB-UCS2-H");
NORMAL_STYLE.setPdfEmbedded(true);
NORMAL_BOLD_STYLE.setName("normalBlodStyle");
NORMAL_BOLD_STYLE.setDefault(true);
NORMAL_BOLD_STYLE.setFontName("song");
NORMAL_BOLD_STYLE.setFontSize(9);
NORMAL_BOLD_STYLE.setBold(true);
NORMAL_BOLD_STYLE.setPdfFontName("STSong-Light");
NORMAL_BOLD_STYLE.setPdfEncoding("UniGB-UCS2-H");
NORMAL_BOLD_STYLE.setPdfEmbedded(true);
TITLE_STYLE.setName("titleStyle");
TITLE_STYLE.setDefault(true);
TITLE_STYLE.setFontName("song");
TITLE_STYLE.setFontSize(12);
TITLE_STYLE.setPdfFontName("STSong-Light");
TITLE_STYLE.setPdfEncoding("UniGB-UCS2-H");
TITLE_STYLE.setPdfEmbedded(true);
TITLE_BOLB_STYLE.setName("titleBolbStyle");
TITLE_BOLB_STYLE.setDefault(true);
TITLE_BOLB_STYLE.setFontName("song");
TITLE_BOLB_STYLE.setFontSize(14);
TITLE_BOLB_STYLE.setBold(true);
TITLE_BOLB_STYLE.setPdfFontName("STSong-Light");
TITLE_BOLB_STYLE.setPdfEncoding("UniGB-UCS2-H");
TITLE_BOLB_STYLE.setPdfEmbedded(true);
}
public JasperPrint createPrint(String fileName) throws RPTDesignException,
JRException {
getReportSource();
if (fileName == null || fileName.equalsIgnoreCase("")
|| !fileName.toLowerCase().contains(".jasper")) {
throw new JRException("报表运行:文件名错误" + fileName
+ "\n 文件名不能为空,且必须以.jasper结束!");
}
if (jasperDesign == null) {
try {
getJasperDesign();
} catch (RPTDesignException rptEx) {
LOG.error(rptEx.getMessage());
throw rptEx;
}
}
Map parameters = new HashMap();
parameters.put("ReportTitle", (rptMain.getRptTitle() == null ? rptMain
.getRptName() : rptMain.getRptTitle()));
try {
JasperCompileManager.compileReportToFile(jasperDesign, fileName);
} catch (JRException e) {
LOG.error("编绎出错:" + jasperDesign);
throw e;
}
if (conn == null) {
throw new RPTDesignException("连接出错");
}
// LOG.info("fileName:" + fileName);
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(fileName,
parameters, conn);
return jasperPrint;
} catch (JRException e) {
throw e;
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
throw new RPTDesignException("报表填充:关闭连接出错!");
}
}
}
}
private void createTitle() {
// 标题
JRDesignBand band = new JRDesignBand();
/*
* if (rptMain.getRptExpfileType() != null ||
* rptMain.getRptExpfileType().equalsIgnoreCase("xls")) {
* textField.setHeight(TITLE_HEIGHT + getColumnHeadHight()); } else {
* textField.setHeight(TITLE_HEIGHT); }
*/
band.setHeight(TITLE_HEIGHT);
JRDesignTextField textField = new JRDesignTextField();
textField.setBlankWhenNull(true);
textField.setX(0);
textField.setY(0);
textField.setWidth(columnWidth);
textField.setHeight(TITLE_HEIGHT);
textField.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER);
textField.setStyle(TITLE_BOLB_STYLE);
textField.setBottomBorder(new Byte("1"));
textField.setBottomBorderColor(Color.BLACK);
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText("$P{ReportTitle}");
textField.setExpression(expression);
band.addElement(textField);
if (rptMain.getRptExpfileType() != null
&& rptMain.getRptExpfileType().equalsIgnoreCase("xls")) {
band.setHeight(TITLE_HEIGHT + getColumnHeadHight());
_createColumnHeads(band, 0, TITLE_HEIGHT);
}
jasperDesign.setTitle(band);
}
/**
* 产生表头
*
* @param band
*/
private void _createColumnHeads(JRDesignBand band, int h_x, int h_y) {
JRDesignStaticText headText;
// 第一层head
if (columnHeads1 != null && columnHeads1.size() > 0) {
for (Iterator iter = columnHeads1.iterator(); iter.hasNext();) {
RptHead head = (RptHead) iter.next();
headText = new JRDesignStaticText();
headText.setX(h_x);
headText.setY(h_y);
headText.setText(head.getHeadName());
headText.setWidth(head.getHeadWidth());
headText.setHeight(HEAD_COLUMN_HEIGHT);
h_x = h_x + head.getHeadWidth();
headText.setStyle(NORMAL_BOLD_STYLE);
headText
.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER);
headText.setTopBorder(new Byte("1"));
headText.setBorder(new Byte("1"));
headText.setBorderColor(Color.BLACK);
band.addElement(headText);
}
h_y = h_y + HEAD_COLUMN_HEIGHT;
}
// 第二层title
if (columnHeads2 != null && columnHeads2.size() > 0) {
h_x = 0;
for (Iterator iter = columnHeads2.iterator(); iter.hasNext();) {
RptHead head = (RptHead) iter.next();
headText = new JRDesignStaticText();
headText.setX(h_x);
headText.setY(h_y);
headText.setText(head.getHeadName());
headText.setWidth(head.getHeadWidth());
headText.setHeight(HEAD_COLUMN_HEIGHT);
h_x = h_x + head.getHeadWidth();
headText.setStyle(NORMAL_BOLD_STYLE);
headText
.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER);
headText.setTopBorder(new Byte("1"));
headText.setBorder(new Byte("1"));
headText.setBorderColor(Color.BLACK);
band.addElement(headText);
}
h_y = h_y + HEAD_COLUMN_HEIGHT;
}
// 第三层title,放在列中
h_x = 0;
/*
* if (rptMain.getRptGroupby() == null ||
* rptMain.getRptGroupby().equals("")) { createColumnHead(band, h_x,
* h_y); }
*/
createColumnHead(band, h_x, h_y);
}
private int getColumnHeadHight() {
int bandHeight = 0;
bandHeight = HEAD_COLUMN_HEIGHT;
if (this.columnHeads1 != null) {
bandHeight = bandHeight + HEAD_COLUMN_HEIGHT;
}
if (this.columnHeads2 != null) {
bandHeight = bandHeight + HEAD_COLUMN_HEIGHT;
}
return bandHeight;
}
private void createColumnHeads() {
JRDesignBand band = new JRDesignBand();
band.setHeight(getColumnHeadHight());
_createColumnHeads(band, 0, 0);
jasperDesign.setColumnHeader(band);
}
private void createColumnHead(JRDesignBand band, int h_x, int h_y) {
JRDesignStaticText headText;
for (int j = 0; j < columns.length; j++) {
RptColumn column = (RptColumn) columns[j];
headText = new JRDesignStaticText();
headText.setX(h_x);
headText.setY(h_y);
headText.setText(column.getColumnName());
headText.setWidth(column.getColumnWidth());
headText.setHeight(HEAD_COLUMN_HEIGHT);
h_x = h_x + column.getColumnWidth();
headText.setStyle(NORMAL_BOLD_STYLE);
headText
.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_CENTER);
headText.setBorder(new Byte("1"));
headText.setBorderColor(Color.BLACK);
band.addElement(headText);
}
}
private void createColumn() {
int c_x = 0;
int c_y = 0;
JRDesignBand band = new JRDesignBand();
band.setHeight(c_y + COLUMN_HEIGHT);
JRDesignExpression expression;
JRDesignTextField textField;
for (int i = 0; i < columns.length; i++) {
RptColumn rptColumn = (RptColumn) columns[i];
textField = new JRDesignTextField();
textField.setX(c_x);
textField.setY(c_y);
textField.setWidth(rptColumn.getColumnWidth());
c_x = c_x + rptColumn.getColumnWidth();
textField.setHeight(COLUMN_HEIGHT);
if (rptColumn.getColumnType() != null
&& (rptColumn.getColumnType().equalsIgnoreCase("integer")
|| rptColumn.getColumnType()
.equalsIgnoreCase("int") || rptColumn
.getColumnType().equalsIgnoreCase("number"))) {
textField
.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_RIGHT);
} else {
textField
.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_LEFT);
}
textField.setStyle(NORMAL_STYLE);
textField.setBlankWhenNull(true);
expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText("$F{" + rptColumn.getColumnCode() + "}");
textField.setBorder(new Byte("1"));
textField.setBorderColor(new Color(0, 0, 0));
textField.setExpression(expression);
band.addElement(textField);
}
c_x = 0;
jasperDesign.setDetail(band);
}
private void createColumnFooter() {
JRDesignBand band = new JRDesignBand();
jasperDesign.setColumnFooter(band);
}
private void createPageFooter() {
JRDesignBand band = new JRDesignBand();
jasperDesign.setPageFooter(band);
}
private void createLastPageFooter() {
if (rptMain.getRptLastPageFoot() != null
&& !rptMain.getRptLastPageFoot().equals("")) {
JRDesignBand band = new JRDesignBand();
band.setHeight(HEAD_COLUMN_HEIGHT);
JRDesignStaticText lastPageFootText = new JRDesignStaticText();
lastPageFootText.setX(0);
lastPageFootText.setY(0);
lastPageFootText.setText(rptMain.getRptLastPageFoot());
lastPageFootText.setWidth(columnWidth);
lastPageFootText.setHeight(HEAD_COLUMN_HEIGHT);
lastPageFootText.setStyle(NORMAL_BOLD_STYLE);
band.addElement(lastPageFootText);
jasperDesign.setLastPageFooter(band);
}
}
private void createGroup() throws JRException {
if (rptMain.getRptGroupby() != null
&& !rptMain.getRptGroupby().equals("")) {
// Variables
String groupString = rptMain.getRptGroupby();
JRDesignGroup group = new JRDesignGroup();
group.setName(groupString + "_GROUP");
group.setReprintHeaderOnEachPage(false);
JRDesignVariable variable;
variable = new JRDesignVariable();
variable.setName(groupString);
variable.setValueClass(java.lang.String.class);
variable.setResetType(JRVariable.RESET_TYPE_GROUP);
variable.setResetGroup(group);
variable.setCalculation(JRVariable.CALCULATION_SYSTEM);
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText("$V{" + groupString + "}");
variable.setInitialValueExpression(expression);
jasperDesign.addVariable(variable);
Set set = summaryVariables.entrySet();
for (Iterator iter = set.iterator(); iter.hasNext();) {
Map.Entry element = (Map.Entry) iter.next();
JRDesignVariable oldVariable = (JRDesignVariable) element
.getValue();
JRDesignVariable groupVariable = new JRDesignVariable();
String fieldName = (String) element.getKey();
String variableName = oldVariable.getName();
groupVariable.setName("GROUP_" + variableName);
groupVariable.setValueClass(java.math.BigDecimal.class);
groupVariable.setResetType(JRVariable.RESET_TYPE_GROUP);
groupVariable.setCalculation(JRVariable.CALCULATION_SUM);
expression = new JRDesignExpression();
expression.setValueClass(java.math.BigDecimal.class);
expression.setText("new java.math.BigDecimal($F{" + fieldName
+ "}==null?\"0\":$F{" + fieldName + "})");
groupVariable.setExpression(expression);
groupVariable.setResetGroup(group);
jasperDesign.addVariable(groupVariable);
}
group.setMinHeightToStartNewPage(HEAD_COLUMN_HEIGHT * 2);
expression = new JRDesignExpression();
expression.setValueClass(java.lang.String.class);
expression.setText("$F{" + groupString + "}");
group.setExpression(expression);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -