JasperReport-报告簿未从Java

时间:2020-01-02 11:28:20

标签: jasper-reports

我已经从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)

有人可以帮助我吗? 谢谢

0 个答案:

没有答案