⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reportgeneration.java

📁 Java报表源程序 提供二维报表设计
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -