欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jFreeChart 编译和生成报表 博客分类: java jfreechartswingjava 

程序员文章站 2024-03-20 12:12:40
...
    报表源文件(后缀名为.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());
		}
	}
}