我已经从JasperStudio创建了一个报告书。 在设计人员看来,该报告可以按预期工作,但是当从groovy / grails中填充数据时,该报告将打印空值和空表。
json看起来像这样:
{ "activities": [
{
"date": "xxx",
"fieldName": "xxx"
}
],
"ext": {
"user": {
"username": "yyyy"
}
}
}
master.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" pageWidth="595" pageHeight="842" sectionType="Part" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="30" bottomMargin="30" uuid="d2716064-8ae4-40cf-a575-33afba400e3a">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="dataSource/jsonAdapter.xml"/>
<property name="net.sf.jasperreports.default.locale" value="it"/>
<parameter name="REPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["/JaspersoftWorkspace/activities"]]></defaultValueExpression>
</parameter>
<queryString language="json">
<![CDATA[]]>
</queryString>
<group name="cover">
<groupHeader>
<part uuid="7aed05b9-1301-4a53-b47e-34289560bc0c">
<p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd">
<subreportExpression><![CDATA[$P{REPORT_DIR} + "cover.jasper"]]></subreportExpression>
</p:subreportPart>
</part>
</groupHeader>
</group>
<detail>
<part uuid="9f371f2f-dcc0-4663-92a4-a134005986ae">
<p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd">
<subreportExpression><![CDATA[$P{REPORT_DIR} + "page1.jasper"]]></subreportExpression>
</p:subreportPart>
</part>
</detail>
</jasperReport>
page1.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="page1" pageWidth="842" pageHeight="595" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" resourceBundle="i18n/messages" uuid="3a437b9f-0650-40e7-b874-8e8aae977233">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="dataSource/jsonAdapter.xml"/>
<property name="com.jaspersoft.studio.report.description" value=""/>
<subDataset name="DataSet1" uuid="05c265c9-3c7d-4574-803c-e37342453cf3">
<field name="date" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="date"/>
</field>
<field name="fieldName" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="fieldName"/>
</field>
<field name="commodityName" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="commodityName"/>
</field>
<field name="varietyName" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="varietyName"/>
</field>
</subDataset>
<parameter name="REPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["/Users/fmonorchio/JaspersoftWorkspace/FieldActivities/"]]></defaultValueExpression>
</parameter>
<queryString language="json">
<![CDATA[]]>
</queryString>
<field name="username" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="ext.user.username"/>
</field>
<detail>
<band height="245" splitType="Stretch">
<frame>
<reportElement x="0" y="0" width="802" height="245" uuid="e458b945-8e6f-47e3-abca-89ea8ee908e2"/>
<componentElement>
<jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" whenNoDataType="AllSectionsNoDetail">
<datasetRun subDataset="DataSet1" uuid="fdfe69e2-eeac-4287-9e41-4c39610a79be">
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("activities")]]></dataSourceExpression>
</datasetRun>
<jr:column width="58" uuid="a374b753-55e7-444e-bb47-49dd351d1431">
<jr:columnHeader style="Table_CH" height="40">
<textField>
<reportElement x="0" y="0" width="58" height="40" uuid="1bca6a6e-afd1-44ff-bef7-c363781c2663"/>
<textElement textAlignment="Center">
<font size="9" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$R{column1}]]></textFieldExpression>
</textField>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="58" height="30" uuid="7cb27a67-5335-4d6b-b854-934fc5e7f8e2"/>
<textElement textAlignment="Center">
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{date}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
<jr:column width="58" uuid="e1faea67-bb0b-428f-a0d6-305568ba2e04">
<jr:columnHeader style="Table_CH" height="40">
<textField>
<reportElement x="0" y="0" width="58" height="40" uuid="117522ba-b4ea-4b7e-999d-6115c1a8ab68"/>
<textElement textAlignment="Center">
<font size="9" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$R{column2}]]></textFieldExpression>
</textField>
</jr:columnHeader>
<jr:detailCell style="Table_TD" height="30">
<textField isBlankWhenNull="true">
<reportElement x="0" y="0" width="58" height="30" uuid="97b86539-b1dc-444f-aaaf-5b3e74bd4f5c"/>
<textElement textAlignment="Center">
<font size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{fieldName}]]></textFieldExpression>
</textField>
</jr:detailCell>
</jr:column>
</jr:table>
</componentElement>
</frame>
</band>
</detail>
</jasperReport>
而这就是古怪的部分。 在这里,我正在从地图创建一个json输入流,并传递给jasper引擎
def stream = new FileInputStream('/master.jasper')
def report = JRLoader.loadObject(stream)
def json = (tables as JSON).toString()
def data = new JsonDataSource(IOUtils.toInputStream(json, StandardCharsets.UTF_8))
def out = new ByteArrayOutputStream()
JasperReportsUtils.renderAsPdf(report, ['REPORT_DIR': 'path'], data, out)
有人可以帮助我吗? 谢谢