`

jFreeChart 编译和生成报表

    博客分类:
  • java
阅读更多
    报表源文件(后缀名为.jrxml)在iReport的图形化界面中编辑和预览更方便。也可以在程序中通过代码来实现编译、填充和预览:

  流程:
  a. 首先检查编译后的文件是否存在,没有就编译并保存结果(后缀名为.jasper)到该目录(因为编译耗时较长,除非源文件改变,尽量减少编译次数)。
  b. 加载编译文件,填充报表数据,生成可打印的报表。
  c. 把该报表添加到窗体中预览。

import net.sf.jasperreports.engine.*;

public class Report {
    public void processReport(Object[] arrData) {
		// Encapsulate an array of report beans
		JRBeanArrayDataSource dataSource = new JRBeanArrayDataSource(arrData);
		// Additional data could be put into map
		Map map = new HashMap();
		map.put("title", "gorgeous");
		// Get the compiled report file
		String plainPath= "D:\xml";
		File compiledFile = new File(plainPath, "report1.jasper");
		// Check whether it exists, if not, compile the source and save the compiled result as a file
		checkAndCompileJRXML(compiledFile);
		// Likewise, check whether the sub reports invoked by the main report exists.
		checkAndCompileJRXML(plainPath, "report1_sub.jasper");
		// Load the report from the specified file
		JasperReport jasperReport = (JasperReport)JRLoader.loadObject(compiledFile);
		// Fill the report with the data of beans as well as additional info (map)
		JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map, beanDataSource);
		// Add the JasperPrint object to a swing panel to show
		showReport(jasperPrint);
    }
	
	public void showReport(JasperPrint jasperPrint) {
		JRViewer viewer = new JRViewer(jasperPrint);
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();
		LayoutManager layout = new BorderLayout();
		panel.setLayout(layout);
		JRViewer viewer = new JRViewer(jasperPrint);
		panel.add(viewer, BorderLayout.CENTER);
		frame.getContentPane().add(panel);
		frame.setVisible(true);
	}

	// Combine two report together if needed
	private JasperPrint combineReport(JasperPrint jasperPrint, JasperPrint jasperPrint2) {
		List pages = jasperPrint2.getPages();
		for (int i = 0; i < pages.size(); i++) {
			JRPrintPage page = (JRPrintPage)pages.get(i);
			jasperPrint.addPage(page);
		}
		return jasperPrint;
	}

	private void checkAndCompileJRXML(String path, String name) throws JRException {
		File file = new File(path.concat(name));
		checkAndCompileJRXML(file);
	}

	private void checkAndCompileJRXML(File file) throws JRException {
		if (!file.exists()) { // Compiled report file doesn't exist
			String compiledName = file.getPath();
			int idx = compiledName.lastIndexOf('.');
			// Get the source report file
			String sourceName = compiledName.substring(0, idx+1).concat("jrxml");
			file = new File(sourceName);
			// Compile the source file and save the compiled report
			JasperCompileManager.compileReportToFile(file.getPath());
		}
	}
}
分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目

     Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分,比较有意思,也具参考性。像坐标控制、旋转矩阵、定时器、生成图像...

    JAVA上百实例源码以及开源项目源代码

    Java编写的网页版魔方游戏 内容索引:JAVA源码,游戏娱乐,魔方,网页游戏 Java编写的网页版魔方游戏,编译后生成.class文件,然后用HTML去调用,不过运行时候需要你的浏览器安装有运行Class的插件。Java源代码实现部分...

    java开源包1

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包11

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包2

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包3

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包5

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包10

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包4

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包8

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包7

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包9

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包101

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    Java资源包01

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

Global site tag (gtag.js) - Google Analytics