JasperReports教程:什么是Jasper报表 Java?

⚡ 智能摘要

JasperReports for Java Jaspersoft Studio 是一款开源报表引擎,可将应用程序数据转换为像素级精细的文档。本文将介绍报表生命周期、Jaspersoft Studio 安装、报表模板创建、报表结构、与 Pentaho 的比较,以及团队在实际应用中遇到的限制。

  • 📊 核心定义: JasperReports 是一个 Java 可将数据渲染到屏幕、打印机、PDF、HTML、XLS、RTF、CSV、XML、ODT 和 TXT 的类库。
  • 🔄 生命周期阶段: 整个过程分为四个阶段,分别是设计 JRXML、将其编译成 .jasper 文件、填充数据以及导出结果。
  • 🖥️ 设计环境: Jaspersoft Studio 社区版提供可视化设计器,当前社区版本为 6.21.3。
  • 🧩 能带结构: 标题、页眉、列标题、详细信息、列页脚、页脚和摘要带控制每个元素的打印位置。
  • ???? 数据灵活性: 一份报告可以合并 JavaBeans 集合、SQL 结果集、XML 文件和自定义数据适配器。
  • 平台对比: Jaspersoft 在文档和移动商业智能方面处于领先地位,而 Pentaho 在仪表板和数据挖掘方面处于领先地位。
  • ⚠️ 已知限制: 报表必须先编译才能执行,因此每个报表开发人员都需要一个完整的…… Java SDK 已安装。

JasperReports 教程

JasperReports 有什么用 Java?

贾斯珀报告 是一个开源报告工具 Java 用于生成应用程序报告的工具。该报告工具可将丰富的内容输出到屏幕、打印机或各种文件格式(例如 HTML、PDF、XLS、RTF、CSV、XML、ODT 和 TXT)。JasperReports 还可用于…… Java- 支持的应用程序,例如 Java EE 或 Web 应用程序生成动态内容。

在大多数讨论中,三个产品名称会同时出现,尽早将它们分开可以避免本页后面出现混淆。

姓名 它是什么 谁使用它
JasperReports 库 此 Java 用于编译、填充和导出报告的库 Java 开发人员将报告嵌入到应用程序中
碧玉工作室 此 Eclipse 基于可视化的设计器,可生成 JRXML 文件 报告设计人员构建布局
JasperReports 服务器 一个独立的服务器,用于存储、调度和发送报告 团队向业务用户分发报告

本页面重点介绍库和 Jaspersoft Studio,因为设计和运行第一个报表只需要这两个组件。请注意,社区版现在仅包含这两个组件,因为 JasperReports Server 已不再作为社区版提供下载。

为什么要使用 Jasper Reports?

使用 Jasper 报表工具的理由有很多:

  • 它为用户提供报告生成性能和交付。
  • 它可以帮助您以文本或图形格式表示数据。
  • 它是一个独立的、嵌入式的报告服务器,用于报告编制和执行。
  • 它允许对存储库中的所有报告进行基于角色的访问控制。
  • Spring Security 框架可用于与内部身份验证系统集成。
  • 它提供了一个安全、定时、自动交付的交互式报告引擎。
  • 您可以将报告嵌入到 Java 或非Java 领域广泛应用,提供了卓越的解决方案。
  • 可以导出多种格式的报告。
  • 它可以生成覆盖在主图像上的水印。
  • 它提供了一套完整的 SOAP、REST 和 Web 服务。
  • 它允许您使用来自多个数据源的单个报告数据。

由于该库以 LGPL 许可证发布,因此可以捆绑到商业产品中而无需按席位付费,这也是许多用户选择使用它的原因。 Java 团队会选择它而不是专有的报告引擎。

Jasper Reports 的功能

接下来,我们将介绍 JasperReports 的功能。

以下是 Jasper Reports 工具的主要功能:

  • 提供跨带区、列和自由格式区域的灵活报表布局。
  • 开发者可以通过多种方式提供数据,包括 JavaBeans 集合、SQL 查询和 XML 文档。
  • 通过子报表和数据适配器,可以将多个数据源组合到单个报表中。
  • 水印也可以添加到主图像上。
  • 您可以生成嵌套在父布局中的子报表。
  • 它可以帮助您导出多种格式的报告,例如 PDFHTML、RTF 和 Microsoft Excel文件。
  • 该引擎允许报表定义中包含条形图、饼图、折线图和时间序列图等图表。
  • 报表表达式可以用以下方式编写 Java, Groovy 或 Java脚本。

这些功能是通过固定的处理顺序展现出来的,下一节将分阶段描述该顺序。

JasperReports 的生命周期

现在我们将学习 JasperReports 的生命周期。

以下是 JasperReports 生命周期的一般流程:

JasperReports 的生命周期

上图按顺序展示了这四个阶段。每个阶段都会生成一个文件,该文件将成为下一阶段的输入,因此该顺序永远无法逆转。

阶段 输入 输出 文件扩展名
设计 布局决策 报告模板 .jrxml
编译中 .jrxml 文件 已编译的二进制模板 。碧玉
执行 .jasper 文件及数据 已填写报告 .jrprint
导出 .jrprint 文件 最终文件 .pdf、.html、.xls 等格式

设计报告

这将是创建 JRXML 文件的第一步。它是一个简单的 XML 文档,用于定义报表布局。您可以使用任何文本编辑器或报表设计器来创建此文件。

但是,如果您使用报表设计器,我们可以可视化报表的布局,而可以忽略 JRXML 的实际结构。

编写报告

在这个生命周期阶段,编译在第一阶段构建的 JRXML,并生成一个名为 Jasper 文件(扩展名为 jasper 的文件)的二进制对象。

进行此编译是为了在执行过程中获得更好的性能。这些生成的 Jasper 文件应与您的应用程序一起发送以运行报告。

执行报告

在此阶段,应用程序的数据被收集并填充到已编译的报告格式中。有一个名为 net.sf.jasperreports.engine.JasperFillManager 的类提供在报告中填充数据的功能。

输出结果将存储在 Jasper 打印文件(扩展名为 jrprint 的文件)中,该文件可用于打印或导出报告。

将报告导出为所需格式

在最后阶段,您需要使用 JasperExportManager 类将之前创建的 Jasper 打印文件导出为任意格式。由于 Jasper 提供多种导出格式,我们可以使用相同的输入来创建数据的各种表示形式。

如何安装 Jasper Reports – 环境设置

现在,让我们来学习 JasperReports 环境的逐步设置过程。以下截图使用的是 6.9 版本安装程序。当前社区版为 6.21.3,发布于 2024 年 4 月 23 日,虽然文件名中的版本号有所不同,但屏幕顺序保持不变。

步骤1) 下载 Jasper Reports 社区版
去这个 链接 点击“立即下载”选项安装 Jasper Reports 社区版。

安装 Jasper Reports-环境设置

步骤2) 选择 Jaspersoft Studio CE
从社区版中选择 Jaspersoft Studio CE。

安装 Jasper Reports-环境设置

步骤3) 下载 Jaspersoft Studio
去这个 链接 点击“下载”按钮,然后打开下载的适用于您操作系统的安装程序可执行文件。

安装 Jasper Reports-环境设置

步骤4) 点击同意按钮
接下来会出现以下屏幕。请选择“我同意”按钮。

安装 Jasper Reports-环境设置

步骤5) 选择位置
选择安装位置,然后单击“下一步”按钮。

安装 Jasper Reports-环境设置

步骤6) 进度正在运行
您将在下一个屏幕上看到进度。

安装 Jasper Reports-环境设置

步骤7) 点击完成按钮
在下一个屏幕中,单击完成按钮。

安装 Jasper Reports-环境设置

步骤8) 进度已完成
您的窗口中将出现以下屏幕。

安装 Jasper Reports-环境设置

步骤9) 立即开启合作
接下来,点击“开始使用”选项。

安装 Jasper Reports-环境设置

步骤10) 开始使用 Jasper Reports Studio
接下来将出现以下屏幕,您可以开始使用 Jasper Reports Studio。

安装 Jasper Reports-环境设置

💡提示: Jaspersoft Studio 是一款 Eclipse 基于应用程序,并且需要兼容的 Java 计算机上必须存在运行时环境。如果安装程序无法启动,请在重新安装之前确认已安装的 JDK 版本。

创建报告模板示例

现在让我们学习如何在 JasperReports 中创建报表模板。

JasperReports 中使用的报表模板文件是一个简单的 XML 文件,扩展名为 jrxml。该文件以 jasperReport 标签作为根元素。JasperReports 框架可以处理不同类型的数据源。

报告模板的设计和创建遵循以下步骤。

步骤1) 在 Jaspersoft Studio 中创建 JRXML 文件。

  1. 选择“文件”选项。
  2. 选择“新建”子菜单。
  3. 点击 Jasper 报表选项。

创建报告模板示例

步骤2) 选择所需的模板。

  1. 选择您的模板,例如樱桃。
  2. 点击“下一步”按钮。

创建报告模板示例

步骤3) 选择父文件夹。

  1. 选择“我的报告”文件夹。
  2. 输入文件名,例如“Cherry Report”。
  3. 点击“下一步”按钮。

创建报告模板示例

步骤4) 在“数据源”窗口中,单击“新建”按钮以创建一个新的数据适配器。

创建报告模板示例

步骤5) 选择数据适配器。

  1. 从列表框中选择数据适配器。例如,“集合 Java豆子。”
  2. 点击“下一步”按钮。

创建报告模板示例

步骤6) 输入数据适配器详细信息并选择工厂类。

  1. 输入您的适配器的名称。
  2. 点击“…”按钮选择工厂类别。

创建报告模板示例

步骤7) 输入前缀或模式。

  1. 输入名称前缀或模式。
  2. 单击匹配的项目。
  3. 点击“确定”按钮。

创建报告模板示例

步骤8) 定义工厂类并添加 jar 文件路径。

  1. 输入工厂类中的静态方法的名称。在此 Jasper 报告示例中,此名称为 createBeanCollection。
  2. 如果你的 JavaBean 定义包含字段描述,如果您想在 Jaspersoft Studio 中使用这些字段描述作为名称,请选中“使用字段描述”复选框。
  3. 添加 jar 文件的路径。
  4. 点击“完成”按钮。

创建报告模板示例

步骤9) 点击“下一步”按钮。

创建报告模板示例

步骤10) 恭喜!您已成功添加所有必要的报告创建信息。点击“完成”按钮。

创建报告模板示例

报告将按下图所示生成。

创建报告模板示例

上述文件需要编译成 JasperReport 二进制格式,即 jasper 文件。

作为 JasperReports 库的一部分,接口 net.sf.jasperreports.engine.design.JRCompiler 在编译此报表模板文件时发挥着重要作用。

这个接口的实现可以写成 Java, JavaScript, Groovy或任何其他脚本语言。

您可以使用以下两种方法编译 JRXML 文件:

下面的代码片段展示了程序化实现方式,其中一行代码编译模板,另一行代码填充模板内容。 Java豆类收藏。

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

public class ReportRunner {

    public static void main(String[] args) throws JRException {

        // 1. Compile the JRXML template into a .jasper file
        JasperReport report = JasperCompileManager.compileReport("CherryReport.jrxml");

        // 2. Fill the compiled template with a collection of beans
        JRBeanCollectionDataSource source =
                new JRBeanCollectionDataSource(EmployeeFactory.createBeanCollection());

        JasperPrint print = JasperFillManager.fillReport(report, null, source);

        // 3. Export the filled report to PDF
        JasperExportManager.exportReportToPdfFile(print, "CherryReport.pdf");

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

输出:

Report exported successfully

了解不同的报告级别

JasperReports 的布局被划分为称为“带区”的水平区域。每个带区都有固定的打印规则,了解这些规则可以让设计人员精确控制数值在最终文档中的显示位置。

以下是大多数商业报表生成工具采用的标准报表范围。

  • 标题
  • 页眉
  • 列标题
  • Detail
  • 列页脚
  • 页脚
  • 最后一页页脚
  • 结语
  • 组标题
  • 组页脚
  • 背景
  • 无数据

让我们详细了解一下每个报告频段。

标题

该栏目显示在报告的开头。可以通过设置属性将其放置在单独的首页上。 isTitleNewPage="true".

页眉

页面页眉显示在每页的开头。如果使用标题栏,则第一页不显示页眉;如果使用摘要栏并启用相应设置,则最后一页不显示页眉。 isSummaryWithPageHeaderAndFooter="false".

列标题

列标题出现在每页的详细信息带之前。

Detail

详细信息部分会针对所提供的数据源中的每条记录进行迭代。此外,还允许有多个详细信息段(1、2 等)。

列页脚

此部分显示在包含详细信息带的每个页面的详细信息带下方。默认设置为页面末尾,但可以通过设置属性将其切换为位于最后一个详细信息带下方。 isFloatColumnFooter="true".

页脚

本部分将显示在每个页面的末尾,不包括摘要栏、标题栏和最后一个非摘要栏。

最后一页页脚

当没有提供摘要栏时,此部分将显示在最后一页,代替正常的页面页脚。

结语

摘要部分仅在报告末尾的新页面上显示。 isSummaryNewPage="true" 已设置,并且包含页面页眉和页脚 isSummaryWithPageHeaderAndFooter="true" 置。

组标题

此部分仅在定义时出现,每次组表达式更改时,都会在详细信息带之前显示。

组页脚

仅当定义了组时,此部分才会显示,每次在组表达式更改之前,在详细信息带之后显示。

背景

它显示在所有页面上,作为所有其他报告频段的背景。

无数据

当未传递数据源或数据源为空时,将显示此频段。 whenNoDataType="NoDataSection" 置。

Jasper 与 Pentaho

现在我们将学习 Jasper 和 Pentaho 之间的区别。

以下是 Jasper 和 Pentaho 的主要区别:

参数 贾斯珀(Jasper) Pentaho的
报告 Jasper 使用 Jaspersoft Studio 设计报表。 它使用 Pentaho Report Designer。
ETL 支持 Jaspersoft 使用 Talend Open Studio 版本进行 ETL 操作。 它默认使用 Pentaho Data Integrator ETL工具.
立即开始 仪表盘功能仅在 Jaspersoft 企业版中提供。 Pentaho 的仪表盘提供了多种多样的功能。
移动商业智能 Jaspersoft 拥有更好的移动 BI 支持。 Pentaho 需要依赖第三方工具来增强移动 BI 体验。
文件记录 更好的营销、网站和文档。 文档支持很差。
最大的特点 更容易研究并找到您所需内容。 提供数据挖掘和 iPhone 集成功能。
付费版本 付费版本提供以下功能 即席查询 Web 用户界面和仪表盘创建 Web 用户界面。 提供 LDAP 集成、SSO 和审计等功能。

已经投资的团队 Java 技术栈通常会选择 Jasper,而需要大量数据集成和报表功能的团队通常会选择其他方案。 Pentaho的.

创建 JasperReports 时面临的挑战

以下是您在创建 Jasper 报表时会遇到的一些挑战:

  • 核心变更——当业务规则发生变更或得到增强时,需要变更报表的核心逻辑。
  • 复杂的报表——子报表和交叉表报表就是很好的例子。
  • 图表报告或可视化图表,例如图形、XY线图、饼图、柱状图、时间序列图和仪表图。

使用 Jasper Reports 的缺点

以下是使用 Jasper Reports 的缺点。

  • 一旦你开始对软件包的某些部分进行更改并删除某些功能,就很难恢复到默认的软件包设置。
  • 它过于死板,编辑行和创建交叉表都是一项具有挑战性的任务。
  • 在其他报表设计器中,一些常见任务(例如为分组报表指定小计)会更容易。
  • Jasper 要求您在运行报告之前对其进行编译。这意味着报告开发人员必须拥有完整的 Java SDK 已安装。
  • 有时当您编辑报告时,它不会显示与网络上显示的相同的预览。

常见问题

.jrxml 文件是供设计人员编辑的人类可读 XML 模板。.jasper 文件是由该模板编译生成的二进制文件,运行时仅执行编译后的文件。

JasperReports Library 和 Jaspersoft Studio 社区版均以开源许可证发布,可嵌入商业产品中。仪表盘、日程安排和安全功能需要付费版本。

是的。在 Jaspersoft Studio 中创建一个 JDBC 数据适配器,提供驱动程序 jar 文件和连接字符串,然后在报表中编写查询。参数使用美元符号和花括号语法传递。

是的。添加 jasperreports 依赖项,将编译后的 .jasper 文件放在类路径中,然后从服务类调用 JasperFillManager。导出的字节可以直接流式传输到 HTTP 响应中。

AI助手可以快速生成JRXML框架和表达式语法。务必在Jaspersoft Studio中打开生成的文件,因为波段高度和元素坐标通常需要手动校正。

它能够处理人工智能仪表盘无法生成的像素级精细化运营文档,例如发票和账单。模型输出会被写入数据库,然后由 Jasper 进行渲染以进行分发。

总结一下这篇文章: