借助Java代码在JasperReports中添加FilterExpression
我正在用Java开发一个工具,可以在JasperReports中实现一些自动化(自动打印、设置参数等),我主要使用JasperReport库。现在我必须使用Java代码设置过滤器表达式。我知道如何准备参数,我是这样做的:借助Java代码在JasperReports中添加FilterExpression,java,jasper-reports,Java,Jasper Reports,我正在用Java开发一个工具,可以在JasperReports中实现一些自动化(自动打印、设置参数等),我主要使用JasperReport库。现在我必须使用Java代码设置过滤器表达式。我知道如何准备参数,我是这样做的: Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("filter", "where name like '%.'"); 如果有这样一种简单的方法
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("filter", "where name like '%.'");
如果有这样一种简单的方法来修改参数,我想也有类似的方法来修改过滤器表达式。我已经搜索了很长时间,但什么也没找到。只能在
JasperDesign
对象中设置/更改报表筛选器表达式(或任何其他表达式)(请参见setFilterExpression
方法)。必须将JasperDesign
对象重新编译为JasperReport
过滤器表达式的另一种替代方法是
JRParameter.filter
内置参数,它将net.sf.jasperreports.engine.DatasetFilter
实例作为值。JasperReports包括一个名为FieldFilter
的DatasetFilter
实现,该实现在内部用于交互式筛选,但它可能不适合您的需要,在这种情况下,您需要编写自己的DatasetFilter
实现。因为您使用的是数据库连接,我找不到比在查询中过滤更好的方法
这限制了需要从数据库传输和迭代的数据,从而提高了性能并减少了内存使用
注意,您正在使用$p!传递整个查询!()
,我可能更愿意使用prepared语句只传递值,并使用$P()
在jasper report expression中设置查询以了解差异,请参见
如果您无法在查询中进行筛选,另一种解决方案是将数据加载到bean中,对其进行筛选,然后将生成的
列表作为传递。我需要使用Java代码将新的筛选表达式添加到我的Jasper报告中。
-这是什么意思?您可以手动将筛选表达式添加到报告中。例如:$F{NAME}.contains(“USP”)|$F{NAME}.contains(“O”)
。在报告的源代码中,它看起来是这样的:
我的工作是在java代码中设置这些条件。你是在谈论基于JavaBean的数据源吗?确切地说,我是指JasperReport库。我想,如果我可以使用这个库设置参数,也可以选择设置过滤器表达式,但我不知道如何设置。任何方法都是好的,但前提是可以自动完成(使用代码),您可以过滤集合,例如借助Guava:或流API:
JasperPrint pdf = JasperFillManager.fillReport(jasperReport, parameters, connection);