0

0

JasperReports库的基本介绍

碧海醫心

碧海醫心

发布时间:2024-12-21 16:54:25

|

1168人浏览过

|

来源于dev.to

转载

1。简介
在实践中,我们看到以某种格式统计和导出数据的请求是很常见的。例如,我们收到导出客户统计报告、销售发票、采购发票等的请求,这需要人们(尤其是程序员)创建软件,您可以根据每个具体情况和要求灵活创建导出数据的模板。你可能立刻想到的解决方案是使用word、excel……,但是这种解决方案不适合大量不断变化、短时间内发展的数据,同时还需要支付软件费用和数据处理时间不是最佳的。
目前有一个相当流行的解决方案——很多程序员都喜欢使用的jasperreports库。
特别是,这个库是开源的,并且有免费版本。您可以访问其源代码:https://github.com/tibcosoftware/jasperreports

2。使用说明
关于如何使用这个库网上有很多说明,这里就不详细写了
如果您使用 eclipse,jasperreports 有一个额外的插件可以帮助您创建报告模板。
在这篇文章中,我将指导您在intellij idea上使用它,库管理器是maven。
首先,您需要一个模板来填写数据(如订单、发票等)。为此,请下载并安装 jaspersoft studio 软件(当前最新的社区版本链接为 https://community.jaspersoft.com/files/file/19-jaspersoft®-studio-community-edition/?do=getnewcomment).
安装并打开后,软件会有如下界面:

image description

要创建新模板,请转到文件 -> 新建 -> jasper 报告。在“全部”部分中,选择“空白 a4”(或您喜欢的其他模板:>)。

image description

单击“下一步”,指定文件的保存位置。单击下一步 -> 下一步 -> 完成。出现的新界面是模板界面,您可以根据自己的模板自由设计。

image description

右侧是库支持的对象。

image description

假设我必须创建一个带有标题和商品名称的简单购买发票表格。我将“静态文本”对象拖放到模板中,并输入名称“采购发票”(您可以在屏幕右上角自行调整格式)。
接下来,我再拖动 2 个类似的对象,但将项目类别设置在“书籍”和“钢笔”下方。
接下来我必须添加这 2 件商品的价格。这个值是动态的,所以我必须在这里放置一个变量(这也是这个库的一个非常有趣和灵活的功能)。在大纲部分、参数部分中,右键单击并选择“创建参数”。然后我在右角窗口修改了这个变量的值,变量名为book,数据类型为实数。

image description

然后我将其拖放到“book”标签旁边。与变量“笔”和总量相同。这里你可以分配的总金额等于变量“book”和“pen”的总和。
完成模板后,它会是这样的

image description

动力先锋仿阿里巴巴B2B电子商务系统
动力先锋仿阿里巴巴B2B电子商务系统

前台功能介绍:1、网页首页显示有高级会员推荐,精品推荐,商业机会分类列表,最新供求信息,网站动态,推荐企业,行业动态等;2、商业机会栏目功能有:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,并可以推荐公司,栏目分为分类显示信息,最新的采购、供应、合作和代理信息,搜索时同样按分类,信息,时间,交易类型等搜索;3、展厅展品栏目功能:二级分类,已经带有详细分类的数据库,后台可以更改增加操作,

下载

您切换到源选项卡,这是系统将处理的数据。基本上,jasper report 将以类似于 xml 的文件格式接收输入数据,但标签名称将由库预先定义。例如,整个文件的超类的开始和结束标记必须是“jasperreport”标记。以下是一些必须注意的模板符号:

  • “$p{}”:动态添加到报表中的数据,可以是键值对,可以是数据源。
  • “$f{}”:从数据源添加到报告的复杂数据字段。
  • “$v{}”:根据现有表达式自动生成数据或手动添加数据。 ... 您可以阅读更多内容 (https://www.tutorialspoint.com/jasper_reports/jasper_report_expression.htm)

完成后,您可以开始将此文件复制到您的项目中以填充数据并进行处理。
然后继续导入以下库:

    
      net.sf.jasperreports
      jasperreports
      6.21.0
    

    
      net.sf.jasperreports
      jasperreports-fonts
      6.21.0
    

继续编写代码导入文件并填充数据。

final string outputfilename = "report.pdf";
files.deleteifexists(new file(outputfilename).topath());
inputstream inputstream = main.class.getresourceasstream("/report.jrxml");
map parameters = new hashmap<>();
parameters.put("book", 55000);
parameters.put("pen", 11111.1111);
jasperreport jasperreport = jaspercompilemanager.compilereport(inputstream);
jasperprint jasperprint = jasperfillmanager.fillreport(jasperreport, null, new jremptydatasource());
jasperexportmanager.exportreporttopdffile(jasperprint, outputfilename);

这里,因为我们直接填充,所以可以使用map类。如果你想从数据源(database,...)填充数据,可以参考(https://www.baeldung.com/spring-jasper).
结果如下

image description

3。安全编程
因为在渲染这个模板的过程中,库也会执行其中的函数,所以如果用户可以自定义模板标签,攻击者就会添加可以执行命令的恶意标签。此错误与 ssti 非常相似。
假设允许用户直接编辑模板。源码如下:

final string outputfilename = "out.pdf";
files.deleteifexists(new file(outputfilename).topath());
string input = "";
string template = "\n\n" + input + "";
inputstream inputstream = new bytearrayinputstream(template.getbytes());
jasperreport jasperreport = jaspercompilemanager.compilereport(inputstream);
jasperprint jasperprint = jasperfillmanager.fillreport(jasperreport, null, new jremptydatasource());
jasperexportmanager.exportreporttopdffile(jasperprint, outputfilename);

攻击者填充恶意函数来控制系统:

String input = "\n" +
                "        \"id\"\n" +
                "    \n" +
                "    \n" +
                "    \n" +
                "        \n" +
                "        \n" +
                "            \n" +
                "                \n" +
                "                \n" +
                "                    \n" +
                "                        \n" +
                "                    \n" +
                "                \n" +
                "            \n" +
                "        \n" +
                "    \n";

结果,命令被执行。文件“out.pdf”包含以下内容:

image description

所以程序员也必须小心,不要让用户直接在模板中输入内容。
另外,该库在旧版本中也存在漏洞(cve-2018-18809、cve-2022-42889、...),编程时应注意使用最新版本。定期更新。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

112

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

25

2026.01.26

eclipse教程
eclipse教程

php中文网为大家带来eclipse教程合集,eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。php中文网还为大家带来eclipse的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

189

2023.06.14

eclipse怎么设置中文
eclipse怎么设置中文

eclipse设置中文的方法:除了设置界面为中文外,你还可以为Eclipse添加中文插件,以便更好地支持中文编程。例如,你可以安装EBNF插件来支持中文变量名,或安装Chinese Helper来提供中文帮助文档。本专题为大家提供eclipse设置中文相关的各种文章、以及下载和课程。

795

2023.07.24

c语言编程软件有哪些
c语言编程软件有哪些

c语言编程软件有GCC、Clang、Microsoft Visual Studio、Eclipse、NetBeans、Dev-C++、Code::Blocks、KDevelop、Sublime Text和Atom。更多关于c语言编程软件的问题详情请看本专题的文章。php中文网欢迎大家前来学习。

592

2023.11.02

Eclipse版本号有哪些区别
Eclipse版本号有哪些区别

区别:1、Eclipse 3.x系列:Eclipse的早期版本,包括3.0、3.1、3.2等;2、Eclipse 4.x系列:Eclipse的最新版本,包括4.0、4.1、4.2等;3、Eclipse IDE for Java Developers等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

167

2024.02.23

eclipse和idea有什么区别
eclipse和idea有什么区别

eclipse和idea的区别:1、平台支持;2、内存占用;3、插件系统;4、智能代码提示;5、界面设计;6、调试功能;7、学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

136

2024.02.23

eclipse设置中文全教程
eclipse设置中文全教程

本专题整合了eclipse设置中文相关教程,阅读专题下面的文章了解更多详细操作。

109

2025.10.10

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号