jasper报表

145 阅读4分钟

jasper报表

1.原理

JasperReports 是一个流行的报表生成库,它允许开发者使用 XML 文件定义报表的布局和样式,然后使用 Java 程序动态填充数据。以下是使用 Java 和 JasperReports 设计报表的一般步骤和原理:

步骤:

  1. 定义报表模板: 使用 JasperReports 的模板设计工具(通常是 iReport 或 Jaspersoft Studio)创建一个报表模板(.jrxml 文件),定义报表的布局、样式、数据源等信息。
  2. 设计报表元素: 在报表模板中,你可以定义报表元素,如文本框、表格、图表等,以展示数据。
  3. 连接数据源: 在报表模板中定义数据源,指定报表从哪里获取数据。数据源可以是 JavaBean、数据库查询、XML 文件等。
  4. 编译模板: 将 .jrxml 文件编译成二进制的 .jasper 文件。这个文件包含了报表的布局和编译后的 Java 代码。
  5. 填充数据: 在 Java 程序中使用 JasperReports 库加载 .jasper 文件,并填充数据。你可以将数据传递给报表引擎,然后生成最终的报表。
  6. 导出报表: 将生成的报表导出为目标格式,如 PDF、HTML、Excel 等。

​ 模板-->设计元素-->编译模板-->填充数据-->导出为报表

原理:

  1. 报表模板文件: 报表模板是使用 JasperReports 的 XML 格式定义的文件,它包含了报表的结构、样式和数据源信息。这里如果使用jaspersoft studio设计器就为.jrxml文件

  2. 编译过程: 在运行时,Java 程序将 .jrxml 文件编译成 .jasper 文件。这个过程会将 XML 文件中的布局和样式转换为 Java 代码。编译在jaspersoft studio 中进行,jasper文件为二进制文件

  3. 数据填充: Java 程序使用编译后的 .jasper 文件,将数据填充到报表中。数据可以是来自数据库、JavaBean 对象、XML 文件等。这里注意数据填充的方式。

  4. 报表生成: JasperReports 将填充好数据的报表通过报表引擎生成,最终输出到指定的格式中。在 Java 程序中输出报表的引擎通常是 JasperReports

示例代码:

以下是使用 Java 和 JasperReports 进行报表生成的简单示例代码:

import net.sf.jasperreports.engine.*;

import java.util.HashMap;
import java.util.Map;

public class ReportGenerator {

    public static void main(String[] args) {
        try {
            // 编译 .jrxml 文件
            JasperReport jasperReport = JasperCompileManager.compileReport("path/to/your/reportTemplate.jrxml");

            // 设置数据源(这里使用一个简单的 Map)
            Map<String, Object> data = new HashMap<>();
            data.put("title", "Sample Report");
            data.put("message", "Hello, this is a sample report!");

            // 使用填充数据和编译后的报表生成报表
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, data, new JREmptyDataSource());

            // 导出报表为 PDF 文件
            JasperExportManager.exportReportToPdfFile(jasperPrint, "path/to/your/output/report.pdf");

            System.out.println("Report generated successfully!");

        } catch (JRException e) {
            e.printStackTrace();
        }
    }
}

​ 这是java程序的编写,此前你需要在编辑器中设计报表.jrxml模板,设计元素,并将其编译为.jasper文件,放入项目中,提供给jasperReport类使用。

JapserReport常用类与方法

JasperReports 提供了丰富的类和方法用于报表的设计、编译、填充和导出。以下是在报表输出过程中常用的一些核心类和方法:

1. JasperCompileManager:
  • compileReport(String jrxmlFile): 编译 JRXML 文件为 Jasper 文件。
2. JasperFillManager:
  • fillReport(JasperReport jasperReport, Map<String, Object> parameters, JRDataSource dataSource): 使用给定的数据源填充报表。
  • 这个方法很重要,涉及将数据插入进报表模板
3. JasperExportManager:
  • exportReportToPdfFile(JasperPrint jasperPrint, String destFileName): 导出为 PDF 文件。
  • exportReportToHtmlFile(JasperPrint jasperPrint, String destFileName): 导出为 HTML 文件。
  • exportReportToXlsxFile(JasperPrint jasperPrint, String destFileName): 导出为 Excel 文件。
4. JasperPrint:
  • 表示已经填充好数据的报表,包含了生成报表的所有信息。
  • getName(): 获取报表的名称。
  • getPages(): 获取报表的页数。
5. JasperReport:
  • 表示编译后的报表,包含了报表的布局和编译后的 Java 代码。
  • getName(): 获取报表的名称。
6. JREmptyDataSource:
  • 提供一个空的数据源,通常在报表中没有数据时使用。
7. JRBeanCollectionDataSource:
  • 将 JavaBean 集合作为数据源,适用于报表中的 JavaBean 数据。
8. JasperDesign 和 JasperCompileManager:
  • load(InputStream inputStream): 从输入流加载 JasperDesign。
  • compileReport(JasperDesign jasperDesign): 编译 JasperDesign 为 JasperReport。
示例代码:

以下是一个简单的示例,演示了使用 JasperReports 导出 PDF 报表的步骤:

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ReportExporter {

    public static void main(String[] args) {
        try {
            // 1. 编译 JRXML 文件为 Jasper 文件
            JasperReport jasperReport = JasperCompileManager.compileReport(loadReportTemplate());

            // 2. 准备数据源(这里使用一个简单的 JavaBean 集合)
            List<MyDataBean> dataList = prepareData();
            JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dataList);

            // 3. 使用填充引擎填充报表
            Map<String, Object> parameters = new HashMap<>();
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, dataSource);

            // 4. 导出报表为 PDF 文件
            JasperExportManager.exportReportToPdfFile(jasperPrint, "path/to/output/report.pdf");

            System.out.println("Report exported successfully!");

        } catch (JRException e) {
            e.printStackTrace();
        }
    }

    private static InputStream loadReportTemplate() {
        // 加载 JRXML 文件的输入流
        // 在实际应用中,通常使用类加载器加载模板文件
        return ReportExporter.class.getResourceAsStream("/path/to/your/reportTemplate.jrxml");
    }

    private static List<MyDataBean> prepareData() {
        // 准备数据源(示例数据)
        return List.of(
                new MyDataBean("John Doe", 25),
                new MyDataBean("Jane Smith", 30),
                new MyDataBean("Bob Johnson", 22)
        );
    }
}

这只是大致的流程,具体还有很多细节问题:

1.jaspersoft studio设计报表时,字段和参数的区别和使用场景

2.如何将java程序中的bean或者参数,填充到模板中去,具体的逻辑和步骤?

3.如果在设计报表时需要添加类似签章或者水印时,该怎么处理?