![](/img/trans.png)
[英]How can I reference an XML file in my Visual Studio 2012 project as a data source in my project code?
[英]How to reference collection fields from XML data source in Jasper?
我被要求使用 Jasper 中的 XML 数据源修改模板,以使用来自 Java 程序的动态列。 因此,我将所有应在 PDF 中显示的列收集在一个列表中,然后将其作为表格的列打印在 PDF 中。 由于我是 Jasper 的初学者并且遇到了我的列表在子报表中为空的问题,我认为首先在主报表中显示列表的元素并从那里继续可能会更容易。
但是,即使在主报告中,列表似乎也始终为空,并且我尝试了各种不同的方法来尝试打印出列表的内容。 我首先检查列表的实际内容是否为空,并且可以在生成的 XML 中进行验证。 然后在 Jasper 中,我尝试在主报告中创建一个列表字段,指向我的 java 程序中的变量(对于其他变量,例如字符串,它工作得很好)。 使该字段仅访问列表中的一个字段,或打印出整个列表都会导致在生成的 PDF 中打印空值。
因此,在将 XML 作为 Jasper 中的数据源处理时,我似乎一定误解了如何引用/访问列表。
这是列表在 XML 中的样子:
<kunde>102591</kunde>
<company>Sony</company>
<currentDate>16.02.2019</currentDate>
<columns>
<string>id</string>
<string>type</string>
<string>name</string>
<string>area</string>
<string>salary</string>
</columns>
例如,我是否需要以不同于普通字符串字段的方式引用集合字段? 如果有人能解释这里的问题是什么,那将不胜感激。
Jasper 报告不会自动将您的节点转换为java.util.List
因为它不知道如何执行此操作。
相反,您可以使用例如subDatasource
创建另一个数据源,然后使用此数据源迭代值/集合。
注意:制作动态列并不简单,您可能需要使用交叉表。 在这个例子中,我将只展示如何在jr:list
上使用水平打印顺序以 columnHeader 方式输出字段值,这将回答如何引用集合字段的问题。
xml
<records>
<record>
<kunde>102591</kunde>
<company>Sony</company>
<currentDate>16.02.2019</currentDate>
<columns>
<string>id</string>
<string>type</string>
<string>name</string>
<string>area</string>
<string>salary</string>
</columns>
</record>
</records>
xml文件
<?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="Blank_A4_1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isFloatColumnFooter="true" uuid="b98a8766-0e9e-4ae0-9d7c-509e658cd367">
<subDataset name="customer" uuid="1b55ccc5-c764-45cf-b5c6-b2dea09c1e32">
<queryString language="XPath">
<![CDATA[/records/record/columns/string]]>
</queryString>
<field name="string" class="java.lang.String">
<fieldDescription><![CDATA[child::text()]]></fieldDescription>
</field>
</subDataset>
<queryString language="XPath">
<![CDATA[/records/record]]>
</queryString>
<field name="kunde" class="java.lang.String">
<fieldDescription><![CDATA[kunde]]></fieldDescription>
</field>
<field name="company" class="java.lang.String">
<fieldDescription><![CDATA[company]]></fieldDescription>
</field>
<field name="currentDate" class="java.lang.String">
<fieldDescription><![CDATA[currentDate]]></fieldDescription>
</field>
<columnHeader>
<band height="32" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="100" height="30" uuid="4b8856ca-e4f4-4e50-9882-c8c1f9f2fe9c"/>
<text><![CDATA[kunde]]></text>
</staticText>
<staticText>
<reportElement x="100" y="0" width="100" height="30" uuid="8b6f2e55-f3fe-4461-89bd-4e3ba1b5b06b"/>
<text><![CDATA[company]]></text>
</staticText>
<staticText>
<reportElement x="200" y="0" width="100" height="30" uuid="6320c458-dad4-46e8-a229-bbec8902ad73"/>
<text><![CDATA[currentDate]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="134" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="30" uuid="bde9ccfc-384e-48c7-aafa-3375b4a5d160"/>
<textFieldExpression><![CDATA[$F{kunde}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="100" y="0" width="100" height="30" uuid="43d2ce05-e723-4701-96f0-fbdd13768500"/>
<textFieldExpression><![CDATA[$F{company}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="200" y="0" width="100" height="30" uuid="298f066d-ce3a-491e-954c-b9d590fabb8f"/>
<textFieldExpression><![CDATA[$F{currentDate}]]></textFieldExpression>
</textField>
<componentElement>
<reportElement x="0" y="43" width="550" height="30" uuid="bfaa5273-3cd6-4538-b95b-fcd356a24423"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Horizontal">
<datasetRun subDataset="customer" uuid="3cfd00e4-8793-456e-806f-4ba30e10e6b3">
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("/record/columns/string")]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="30" width="80">
<textField>
<reportElement x="0" y="0" width="80" height="30" uuid="bc599749-6639-41d8-abdb-58df6b54f82e"/>
<textFieldExpression><![CDATA[$F{string}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
</band>
</detail>
</jasperReport>
输出
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.