我需要借助master report的参数将一个dataSource传递给我的子报表List<String>.我不知道dataSource是什么类型是正确的以及如何在子报表中获取值.
我的主报告中的片段:
<parameter name="seznamPriloh" class="java.util.List" isForPrompting="false"/>
....
<subreport>
<reportElement x="0" y="56" width="555" height="76"/>
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{seznamPriloh})]]></dataSourceExpression>
<subreportExpression><![CDATA[cz.alis.keong.jasjdr.reporting.ReportCompiler.compile("R79_SeznamPriloh")]]></subreportExpression>
</subreport>
Run Code Online (Sandbox Code Playgroud)
我的子报告中的代码段:
<detail>
<band height="23">
<textField>
<reportElement x="56" y="3" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{}]]></textFieldExpression>
</textField>
</band>
</detail>
Run Code Online (Sandbox Code Playgroud)
请告诉我如何通过主报告的java.util.List<String>类型参数将数据源传递到子报告.
编辑次数:08.14 14:20将标签添加到Java
编辑:08.14 15:30涉及如何打印iReport中另一个列表中包含的字符串列表?适用于4.5.0和List<String>
我需要在Table组件(JasperReports)中显示JRBeanCollectionDataSource数据.
这是我的模板,ShowPerson.jrxml文件:
<?xml version="1.0" encoding="UTF-8"?>
<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="ShowPerson" pageWidth="612" pageHeight="792" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="304c4c4e-c99a-4399-8081-748d3b7c0b8c">
<style name="table">
<box>
<pen lineWidth="1.0" lineColor="#000000"/>
</box>
</style>
<style name="table_TH" mode="Opaque" backcolor="#F0F8FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="table_CH" mode="Opaque" backcolor="#BFE1FF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<style name="table_TD" mode="Opaque" backcolor="#FFFFFF">
<box>
<pen lineWidth="0.5" lineColor="#000000"/>
</box>
</style>
<subDataset name="Table Dataset 1" whenResourceMissingType="Empty" uuid="63b01547-bce2-47c9-ba15-666f94d11387">
<queryString language="SQL">
<![CDATA[]]>
</queryString>
<field name="name" class="java.lang.String"/>
<field name="age" class="java.lang.Integer"/>
</subDataset>
<parameter name="INFO" class="java.lang.String"/>
<title>
<band …Run Code Online (Sandbox Code Playgroud) 我正在使用java和iReport(来自jasper)创建一个简单的报告程序,它应该用pdf创建一个报告,显示PC的IP地址,位置,此时是否空闲(由另一个系统处理),以及它目前所附的项目清单(也在其他地方管理).
我正在使用iReport这个问题,并创建了一个虚拟集合生成类,如下所示:
public class PCReports {
public static java.util.Collection PC_collection;
public static java.util.Collection generateCollection() {
PC_collection = new ArrayList<PCLineDTO>();
PCLineDTO line = new PCLineDTO();
line.setIP("192.168.1.1");
line.setLab("location");
line.setActive(true);
line.addProjectName("project1");
line.addProjectName("project2");
line.addProjectName("project3");
PC_collection.add(line);
line = new PCLineDTO();
line.setIp("192.168.1.2");
line.setLab("location2");
line.setActive(false);
line.addProjectName("project1");
line.addProjectName("project2");
PC_collection.add(line);
return PC_collection;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,实体类是:
public class PCLineDTO {
private String ip;
private String lab;
private Boolean active;
private ArrayList<String> projects;
}
Run Code Online (Sandbox Code Playgroud)
在一些互联网搜索之后,我找到了一种使用子报告做类似事情的方法.
问题是,我不知道如何打印作为dataSource传递给该子报表的字符串集合.
在我在Internet上找到的示例中,对于主集合中的每个项目,子报表都传递了一组对象 - 每个属性都有自己的getter方法 - 而不是像这里的情况那样的字符串集合.在这些情况下,他们通过我无法使用的iReport语法访问他们需要使用的值,例如:
$F{project}
Run Code Online (Sandbox Code Playgroud)
由于iReport在其接收的对象中查找包含的getProject方法,但在这种情况下,它是一个简单的String对象(没有getProject方法,因为它).
我试图通过传递自定义数据源来填充表.我创建了一个包含表格的简单报告.报告它自己从ms sql数据库获取数据.我编写了一个类似于本例中的类的java类.但我在桌上没有任何价值.在该示例中没有scriptlet.我检查了(String) this.getFieldValue("KN_FormelGG"); 代码行.它从字段中获取数据并可以在报告中显示.所以我猜bean数据源没有填充.我在a中调用了填充表方法afterGroupInit.如何在jasper中使用java中的数据集合?我也尝试在数据集和查询对话框中添加java bean ,但它也没有帮助我.我应该将scriptlet添加到子报表/表吗?我的问题的主要重点是在scriptlet中具有自定义数据源.我解决了另一个问题,但我仍然没有得到答案.我添加$P{FieldDataSource}.getData()了检查数据,但它提供了null.
java class 1:
package testProjektIman.scriptlets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class FillTable extends JRDefaultScriptlet {
@Override
public void afterGroupInit(final String id)
throws JRScriptletException {
fillTable();
}
public ArrayList<String> splitGGArray(final String kNFormelGG) {
ArrayList<String> fieldNames = new ArrayList<>();
String[] array = (kNFormelGG.split(" "));
for (String sub : array) {
fieldNames.add(sub);
}
return …Run Code Online (Sandbox Code Playgroud) 我正在使用iReport 3.6.
我有一个JavaBean类,它具有以下代码:
private Collection<String> containerNumber;
public Collection<String> getContainerNumber()
{ return containerNumber; }
public void setContainerNumber(Collection<String> pContainerNumber)
{ this.containerNumber = pContainerNumber; }
Run Code Online (Sandbox Code Playgroud)
当我让iReport 3.6读取这个JavaBean时,它会看到一个Collection(这就是我想要的).但我想在报告中将此集合显示为动态列表/字段.因此,当setContainNumber设置1个容器编号时,报告显示1个容器.当setContainerNumber设置10个容器时,报告显示10个容器.在我的报告中的容器下面,我有更多的字段,当它显示10个容器时,这些字段应该删除10个容器空间.当它显示1个容器时,这些字段应该丢弃1个容器空间.
我的问题:如何使用字符串集合显示动态列表作为JavaBean数据源?
我通过参数将字符串列表传递给 JasperReports 报告。
String jasperFileName = "C:\\TestReportProcess.jasper";
Map<String, Object> params = new HashMap<String, Object>();
params.put("List", getMyListOfString());
JasperPrint jprint = (JasperPrint) asperFillManager.fillReport(jasperFileName, params, new JREmptyDataSource());
Run Code Online (Sandbox Code Playgroud)
当报告开始时,它显示每个项目的逗号
item 1,
item 2,
item 3,
item 4,
etc etc
Run Code Online (Sandbox Code Playgroud)
怎样才能避免呢?
我的碧玉报告 xml
<parameter name="List" class="java.util.ArrayList" isForPrompting="false"/>
<detail>
<band height="280" splitType="Stretch">
<textField isStretchWithOverflow="true" pattern="">
<reportElement x="0" y="13" width="550" height="45" uuid="f907894e-e9f1-418b-9ab8-1db276b8482e"/>
<textElement>
<font fontName="Antique Olive Compact"/>
</textElement>
<textFieldExpression><![CDATA[$P{List}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Run Code Online (Sandbox Code Playgroud)
这是我的简单 xml 报告,只有一个参数 java.util.Arraylist