java - 如何通过 API 从 JasperReport 对象(.jasper 编译文件)获取子报表名称?

标签 java jasper-reports

有一个包含子报告的主报告文件。它被编译为 .jasper,我通过将它加载到 JaserReport 来访问它。类(class)。

我能够获取字段和数据集

report.getMainDataset().getFields();

但是我无法获得子报告,我一直试图让它们通过
report.getAllBands();

然后使用 for 子句
 for (int i = 0; i < bands.length; i++) {
            JRElement[] element = bands[i].getElements(); 
  }

这样我就可以得到一些 JRBaseSubreport类,这是我所能得到的。我可以访问子报表的元素,但无法获取子报表的名称。

有没有办法做到这一点?

最佳答案

无法获取子报表中的数据 只需将主报告加载到 JasperReport目的。此对象仅包含主报表及其元素。

与子报表相关的元素是 JRBaseSubreport ,它引用了与主报表中的子报表标记相关的数据,因此它不包含实际的报表对象。

子报表将为 由填料加载 根据表达式,您实际上可以根据数据源的值加载不同的子报告,因此 jasper 报告在报告填充之前无法知道要加载哪个子报告。

但是你可以访问表达式 它将用于加载子报告,这在您的情况下可能就足够了

关于如何访问表达式的示例(第一个详细信息带中的子报表)

//I know the subreport is in first detail band so I access this directly 
JRBaseBand detailBand1 = (JRBaseBand) report.getDetailSection().getBands()[0];
List<JRChild> elements = detailBand1.getChildren(); //Get all children
for (JRChild child : elements) {
    if (child instanceof JRBaseSubreport){ //This is a subreport
        JRBaseSubreport subreport = (JRBaseSubreport)child;
        String expression= ""; //Lets find out the expression used
        JRExpressionChunk[] chunks = subreport.getExpression().getChunks();
        for (JRExpressionChunk c : chunks) {
            expression +=c.getText();
        }
        System.out.println(expression); 
        //Here you could do code to load the subreport into a JasperReport object
    }
}

有了这些数据,您可以手动将子报表加载到另一个 JasperReport 中。对象和访问名称、字段等。当然,如果您有一个复杂的表达式,您的代码将需要反射(reflect)这一点(从数据源检索参数或数据)

关于java - 如何通过 API 从 JasperReport 对象(.jasper 编译文件)获取子报表名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38654585/

相关文章:

java - 根据 JasperReports 中的条件更改文本字段数据颜色(前景色)

java - 如何与抽象枚举进行比较?

java - 可轮询干扰器

java - 使用 firebase-mlkit 访问云视觉 api 时套接字关闭

java - 新选项卡上的 JasperReports

java - 如何用模式格式化 java.time.LocalDateTime 和 java.time.LocalDate?

java - Jasper 报告 - Docx 生成

java.lang.OutOfMemory错误: Java heap space:Trying to use jasper exportreport method

java - 如何使用 Jackson 反序列化 Java Bean,包括嵌套类和列表

java - 如何计算 IBAN 国家校验码?