问题描述
我想知道当子报表达到特定条件时如何在主报表中进行分页。 所有数据都来自 Java 代码中的集合。我想要的结果是(示例):
- 子报表有 2 个字段:“nome”和“idade”;
- 用idade小于5的人的数据填写子报表;
- 如果有 idade 等于或大于 5 的人,则在主报告处进行分页,并用这些人的数据填充子报告;
- 标题必须在每一页重复。
到目前为止,我的进度是列出所有没有过滤器的人。
我使用的是 Jaspersoft Studio 6.10.0 版和 JDK 8。
主报告JRXML:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.10.0.final using JasperReports Library version 6.10.0-unknown -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="master_report" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="cd7e30b6-06b9-4357-ae80-337e2283a0a8">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="pessoas" class="java.util.List"/>
<queryString>
<![CDATA[]]>
</queryString>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch">
<staticText>
<reportElement x="170" y="24" width="430" height="30" uuid="1bf251d7-e6ff-4da3-9dbe-921a8ed657ab"/>
<textElement textAlignment="Center">
<font size="20"/>
</textElement>
<text><![CDATA[Jasper Reports People Fill]]></text>
</staticText>
</band>
</title>
<detail>
<band height="57" splitType="Stretch">
<subreport>
<reportElement x="0" y="0" width="802" height="34" uuid="2669b472-dcd5-4ec9-bbc9-7f900e08dbe5"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{pessoas})]]></dataSourceExpression>
<subreportExpression><![CDATA["reports/subreport.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
</jasperReport>
子报表:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.10.0.final using JasperReports Library version 6.10.0-unknown -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="subreport" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="98cc3add-3118-40e8-859c-5e0264ae9fe8">
<queryString>
<![CDATA[]]>
</queryString>
<field name="nome" class="java.lang.String"/>
<field name="idade" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<detail>
<band height="61" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="401" height="30" uuid="cd2eb0f5-9846-4717-b073-8de4ed07a4a8"/>
<textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="401" y="0" width="401" height="30" uuid="537035d0-88c6-425e-b28d-41a598de2b29"/>
<textFieldExpression><![CDATA[$F{idade}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Java 主代码示例:
package org.example.subreport;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import org.example.subreport.domain.Pessoa;
import java.io.File;
import java.util.*;
public class Main {
public static void main(String[] args) {
try {
JasperCompileManager.compileReportToFile(
"reports/master_report.jrxml","reports/master_report.jasper");
JasperReport masterReport = (JasperReport) JRLoader.loadObject(new File("reports/master_report.jasper"));
JRBeanCollectionDataSource pessoasCol = new JRBeanCollectionDataSource(Collections.singletonList(""));
// The parameter "pessoas" will be shared with the subreport
Map<String,Object> pessoas = new HashMap<>();
pessoas.put("pessoas",getListaPessoasParaSubreport());
JasperPrint jasperPrintPDF = JasperFillManager.fillReport(masterReport,pessoas,pessoasCol);
JasperExportManager.exportReportToPdfFile(jasperPrintPDF,"reports/master" + ".pdf");
} catch (JRException e) {
e.printStackTrace();
}
}
public static List<Pessoa> getListaPessoasParaSubreport() {
Pessoa john = new Pessoa ("John","23");
Pessoa maria = new Pessoa ("Maria","40");
Pessoa peter = new Pessoa ("Peter","4");
Pessoa annie = new Pessoa ("Annie","1");
return Arrays.asList(john,maria,peter,annie);
}
}
佩索阿课程:
package org.example.subreport.domain;
public class Pessoa {
private String nome;
private String idade;
public Pessoa() {
}
public Pessoa(String nome,String idade) {
this.nome = nome;
this.idade = idade;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getIdade() {
return idade;
}
public void setIdade(String idade) {
this.idade = idade;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)