在这件事上遇到了很大的障碍。我有一个主报表,它加载一个子报表。所述子报表包含嵌套列表,其内部列表在元素之间呈现一些意外的空白。空白处的大小是一致的,这几乎就像是报告呈现了一个“幽灵”元素。
供参考的相关jrxml:
<subDataset name="SurveyListDataSet">
<property name="com.jaspersoft.studio.data.defaultdataadapter" />
<queryString><![CDATA[]]></queryString>
<field name="surveyDate" class="java.lang.String"/>
<field name="surveyList" class="java.util.List"/>
</subDataset>
<subDataset name="SurveyDataSet">
<property name="com.jaspersoft.studio.data.defaultdataadapter" />
<queryString><![CDATA[]]></queryString>
<field name="question" class="java.lang.String"/>
<field name="response" class="java.lang.String"/>
</subDataset>
<field name="surveyDataList" class="java.util.List"/>
<detail>
<band height="17" splitType="Stretch">
<componentElement>
<reportElement x="0" y="0" width="505" height="17" isRemoveLineWhenBlank="true" />
<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="Vertical">
<datasetRun subDataset="SurveyListDataSet">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{surveyDataList})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="17" width="505">
<textField isStretchWithOverflow="true">
<reportElement style="report_value_bold" x="110" y="0" width="265" height="15" />
<textElement textAlignment="Left" />
<textFieldExpression><![CDATA[$F{surveyDate}]]></textFieldExpression>
</textField>
<line>
<reportElement style="line_light" x="105" y="16" width="400" height="1"/>
</line>
<componentElement>
<reportElement x="0" y="0" width="505" height="0" isRemoveLineWhenBlank="true" positionType="Float"/>
<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="Vertical">
<datasetRun subDataset="SurveyDataSet">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{surveyList})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="34" width="505">
<textField isStretchWithOverflow="true">
<reportElement style="report_value" x="125" y="17" width="265" height="15" positionType="Float" />
<textElement textAlignment="Left" />
<textFieldExpression><![CDATA[$F{question}]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
<reportElement style="report_value_bold" x="300" y="17" width="195" height="15" isRemoveLineWhenBlank="true" positionType="Float" />
<textElement textAlignment="Right" />
<textFieldExpression><![CDATA[$F{response}]]></textFieldExpression>
</textField>
<line>
<reportElement style="line_light" x="105" y="33" width="400" height="1" positionType="FixRelativeToBottom" />
</line>
</jr:listContents>
</jr:list>
</componentElement>
</jr:listContents>
</jr:list>
</componentElement>
</band>
</detail>
我看到的例子输出:
期望:每一个Q/A出现在它之上的Q/A线下面。在日期和上面的Q/A之间也不应该有任何差距。
我试过调整各种高度,postitionTypes等,但都没有用。感觉我可能错过了一些显而易见的东西,但我盯着这个看得太久了。感谢你的帮助!
发布于 2022-11-16 02:19:34
您的最内部列表reportElement的高度设置为0 0px,而突然间,listContents高度设置为34 0px,但在细节带设置为17 0px时,只包含17 0px的TextElement。
使用Jasperreports中的列表的基本概念是,每个内部列表都必须在其包含的列表中分配垂直空间。也就是说,您最内部的列表必须在外部列表中分配空间,并相对于外部列表中的其他元素定位。如果TextElement由于isStretchWithOverflow="true"
元素而被分散,则设置为positionType="Float"
的列表中的元素将“浮动”下来,列表将扩展。如果内部列表扩展,外部列表也会自动扩展。(如果设置为positionType="Float"
,内部列表下面的外部列表中的元素将向下浮动。
我已经澄清了你的例子:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.20.0.final using JasperReports Library version 6.19.0 -->
<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="nbsp" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="77c97c1b-90ba-40a8-a5c3-f88b8a48a585">
<subDataset name="SurveyListDataSet" uuid="da0fc5b7-7621-4907-b2b7-e8fa130b1945">
<queryString>
<![CDATA[]]>
</queryString>
<field name="_THIS" class="java.lang.String"/>
</subDataset>
<subDataset name="SurveyDataSet" uuid="e7a6a451-fe26-427c-917d-59070a76a200">
<queryString>
<![CDATA[]]>
</queryString>
<field name="_THIS" class="java.lang.String"/>
</subDataset>
<detail>
<band height="34" splitType="Stretch">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<componentElement>
<reportElement x="0" y="0" width="505" height="34" uuid="0d598531-c684-4c2b-be01-9ced3fa81f81">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<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="Vertical">
<datasetRun subDataset="SurveyListDataSet" uuid="7eeeb416-bd57-43dc-bc19-47481921f2a7">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList(new String[] { "2022-01-01", "2022-02-01", "2022-03-01", "2022-04-01" }))]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="34" width="505">
<textField textAdjust="StretchHeight">
<reportElement x="110" y="0" width="265" height="15" uuid="c0bfd9da-139d-41a9-9b91-34c4db12ebe9"/>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{_THIS}]]></textFieldExpression>
</textField>
<line>
<reportElement positionType="Float" x="105" y="16" width="400" height="1" uuid="d21b7ef6-f724-4ad9-a238-c68c28d486ab"/>
</line>
<componentElement>
<reportElement positionType="Float" x="0" y="17" width="505" height="17" uuid="54082666-799b-4117-92a5-255041315f7b">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.y" value="px"/>
</reportElement>
<jr:list printOrder="Vertical">
<datasetRun subDataset="SurveyDataSet" uuid="f955dac7-55df-4fc3-8e30-cdeefe73a5be">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(java.util.Arrays.asList(new String[] { "Question 1? ", "Question 2?", "Question 3?", "Question 4?" }))]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="17" width="505">
<textField textAdjust="StretchHeight">
<reportElement x="125" y="0" width="265" height="15" uuid="c1fb3fef-53d7-4e64-b05a-0478aed19226">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
</reportElement>
<textElement textAlignment="Left"/>
<textFieldExpression><![CDATA[$F{_THIS}]]></textFieldExpression>
</textField>
<textField textAdjust="StretchHeight">
<reportElement x="300" y="0" width="195" height="15" isRemoveLineWhenBlank="true" uuid="4dd5da20-e70f-4122-92e9-fea714edb33a">
<property name="com.jaspersoft.studio.unit.y" value="px"/>
</reportElement>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA[$F{_THIS}]]></textFieldExpression>
</textField>
<line>
<reportElement positionType="Float" x="105" y="16" width="400" height="1" uuid="b2e07c02-8deb-49fb-9a68-9f431a9f363d">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.y" value="px"/>
</reportElement>
</line>
</jr:listContents>
</jr:list>
</componentElement>
</jr:listContents>
</jr:list>
</componentElement>
</band>
</detail>
</jasperReport>
https://stackoverflow.com/questions/74454075
复制相似问题