java - Jasper 报告空白页
问题描述
我的 jrxml 和 java 代码如下。我正在尝试使用一些文本和值创建报告。但是会生成空白报告。我正在传递地图以将报告填充为参数。我必须添加 4-5 个静态行,然后添加一个动态变量。我已经在详细的乐队中添加了这些东西。出了什么问题
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
name="Untitled_report_2"
columnCount="1"
printOrder="Vertical"
orientation="Portrait"
pageWidth="595"
pageHeight="842"
columnWidth="535"
columnSpacing="0"
leftMargin="30"
rightMargin="30"
topMargin="20"
bottomMargin="20"
whenNoDataType="NoPages"
isTitleNewPage="false"
isSummaryNewPage="false">
<property name="ireport.scriptlethandling" value="0" />
<property name="ireport.encoding" value="UTF-8" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
<field name="Field" class="java.lang.String"/>
<background>
<band height="0" isSplitAllowed="true" >
</band>
</background>
<title>
<band height="50" isSplitAllowed="true" >
</band>
</title>
<pageHeader>
<band height="50" isSplitAllowed="true" >
</band>
</pageHeader>
<columnHeader>
<band height="30" isSplitAllowed="true" >
</band>
</columnHeader>
<detail>
<band height="100" isSplitAllowed="true" >
<staticText>
<reportElement
x="20"
y="10"
width="180"
height="30"
key="staticText-1"/>
<box></box>
<textElement>
<font/>
</textElement>
<text><![CDATA[4-5 lines text]]></text>
</staticText>
<textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
<reportElement
x="20"
y="40"
width="60"
height="20"
key="textField-1"/>
<box></box>
<textElement>
<font/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{Field}]]></textFieldExpression>
</textField>
<staticText>
<reportElement
x="20"
y="70"
width="160"
height="30"
key="staticText-2"/>
<box></box>
<textElement>
<font/>
</textElement>
<text><![CDATA[4-5 lines text]]></text>
</staticText>
</band>
</detail>
<columnFooter>
<band height="30" isSplitAllowed="true" >
</band>
</columnFooter>
<pageFooter>
<band height="50" isSplitAllowed="true" >
</band>
</pageFooter>
<lastPageFooter>
<band height="50" isSplitAllowed="true" >
</band>
</lastPageFooter>
<summary>
<band height="50" isSplitAllowed="true" >
</band>
</summary>
</jasperReport>
Java代码:
InputStream fileInput = getApplicationContext().getResource("/WEB-INF/reports/myjrxml.jrxml").getInputStream();
JasperReport jasperReport = JasperCompileManager.compileReport(fileInput);
HashMap map = new HashMap();
map.put("Field", "test");
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, map);
byte[] output1 = JasperExportManager.exportReportToPdf(jasperPrint);
String filename = "d:/test.pdf";
FileOutputStream fo = new FileOutputStream(filename);
fo.write(output1);
fo.close();
解决方案
您将报告数据与参数混淆。我没有看到您有任何报告数据,这就是您得到一个空报告的原因。此外,您正在填充一个名为“字段”的参数,而不是实际的报告数据。因此,您要么需要在报告中创建一个名为“Field”的参数,然后在详细信息区域中引用它,要么您需要将报告数据传递到您的报告中,例如
JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(dataSet);
jasperPrint = JasperFillManager.fillReport(jasperReport, parameterMap, data);
wheredataSet
是一个集合,例如List<?>
. 在列表中,您将拥有一个对象,其中一个属性是Field
。
推荐阅读
- mysql - 从具有多行结果的子查询结果中搜索关键字
- list - vim:列出搜索结果,找到其中一个然后跳回
- python - Tensorflow:来自相同初始猜测的完全不同的结果
- c# - mongodb4.0在c#中启动事务(驱动rversion 2.7+),在事务执行期间,整个数据库会被锁定,如何解决?
- powershell - 如何通过使用 PowerShell 处理 GUI 返回错误级别?
- ocaml - 是否可以在 Ocaide 中使用 OUnit?
- android - 如何为接口后面抽象的行为主题编写 RXjava 2 测试
- vue.js - 依赖于另一个查询结果的 Apollo 查询
- javascript - 如何在 vuejs 中获取表中特定行的值?
- reactjs - 在反应中提交后重定向到另一个组件