#jasper-reports
#jasper-отчеты
Вопрос:
Я использую компонент списка в своем отчете, и после / под списком следуют дополнительные элементы отчета.
Базовая коллекция списка может содержать от 1 до 50 записей, поэтому во время разработки отчета я не знаю, насколько большим станет список, поэтому я не знаю, где именно разместить эти следующие элементы.
Я ищу способ заставить список правильно растягиваться как текстовое поле, но атрибут isStretchWithOverflow определен только для текстовых полей, а не для списка. В настоящее время для списков большего размера список перекрывается со следующими элементами отчета.
Кто-нибудь знает, каково предполагаемое поведение при растяжении списков или как я мог бы решить свою проблему?
PS Я уже разместил этот вопрос на форуме JasperReports, но ответа нет: (
Вот пример кода:
<detail>
<band height="200">
<componentElement>
<reportElement x="0" y="10" width="500" height="100" stretchType="RelativeToBandHeight"/>
<c:list xmlns:c="http://jasperreports.sourceforge.net/jasperreports/components"
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="airfreightRates">
<dataSourceExpression>$F{spotAirfreightRates}</dataSourceExpression>
</datasetRun>
<c:listContents height="35">
<textField isStretchWithOverflow="true" isBlankWhenNull="true">
<reportElement x="0" y="0" width="70" height="15"/>
<box>
<pen lineWidth="1.0" lineColor="#000000"/>
</box>
<textElement verticalAlignment="Middle">
<font fontName="Arial" size="10"/>
</textElement>
<textFieldExpression class="java.lang.String">
"This is very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long textFieldExpression"
</textFieldExpression>
</textField>
</c:listContents>
</c:list>
</componentElement>
<staticText>
<reportElement x="0" y="30" width="500" height="50" positionType="Float" />
<textElement isStyledText="true"/>
<text><![CDATA[<font color="#FF0000">Static text outside the list contents!!<b>The placement of the text is the crucial point!!!</b></font>]]></text>
</staticText>
</band>
</detail>
Комментарии:
1. В конце концов, мы отказались от идеи использования JR и отправки iReport заказчику и внедрили собственный конструктор, соответствующий нашим потребностям
Ответ №1:
Попробуйте установить свойства, подобные приведенным в этом примере:
<detail>
<band height="20" splitType="Stretch">
<componentElement>
<reportElement stretchType="RelativeToTallestObject" x="186" y="0" width="57" height="20"/>
<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="dataset1">
<datasetParameter name="parameter1">
<datasetParameterExpression><![CDATA[$F{PRODUCT_ID}]]></datasetParameterExpression>
</datasetParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
<jr:listContents height="20" width="57">
<textField isStretchWithOverflow="true">
<reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="41" height="10"/>
<textElement/>
<textFieldExpression><![CDATA[String.valueOf($F{POSITIONS_POSITIONNO}).concat("LONG STRING, very long string ")]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
<textField isStretchWithOverflow="true">
<reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{PRODUCT_ID}]]></textFieldExpression>
</textField>
</band>
</detail>
Я установил RelativeToTallestObject
свойство для List
, TextField in List
и external TextField
и установил isStretchWithOverflow
для external TextField
.
Комментарии:
1. Сейчас это сработало для меня аналогичным образом. В каждом текстовом поле, содержащемся в списке, я устанавливаю isStretchWithOverflow=»true». Для элементов, следующих за таблицей, я устанавливаю positionType=»Float», чтобы они плавали в соответствии с дополнительным пространством, которое требуется списку. Я был совершенно уверен, что точно пробовал это раньше, но, вероятно, я сделал что-то не так…
2. Решение Алекса не работает для меня — мой следующий элемент — это вложенный отчет, при установке для него значения Float он исчезает:-( Есть идеи о том, как решить это более приятным способом?
3. Все, что мне нужно было сделать, это установить для внешних текстовых полей (после таблицы) значение positionType=»Float».
4. @DaDaDom: возможно, вложенный отчет исчезает, потому что ему больше не хватает места для отображения в группе? Попробуйте увеличить высоту диапазона.
Ответ №2:
Пожалуйста, попробуйте поместить список в фоновом режиме.
<background>
<band height="842" splitType="Prevent">
<frame>
<reportElement uuid="9020735c-7a94-4807-9596-1aabac997a00" x="28" y="492" width="290" height="14"/>
<componentElement>
<reportElement uuid="4259289c-8858-4336-a37b-8ad5a7a1ba51" mode="Transparent" x="0" y="0" width="290" height="14"/>
<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="dataset1" uuid="bf8de899-aa0b-43b4-9f4d-1e999524f66d">
<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{inclusions})]]></dataSourceExpression>
</datasetRun>
<jr:listContents height="14" width="290">
<textField isStretchWithOverflow="true">
<reportElement uuid="f8997d71-b315-4be6-9bdf-c3d0c20d0424" positionType="Float" stretchType="RelativeToTallestObject" x="14" y="3" width="271" height="8" isPrintWhenDetailOverflows="true" forecolor="#4A4A49"/>
<textElement>
<font fontName="Avenir-Medium" size="11" isBold="false"/>
<paragraph lineSpacing="Proportional" lineSpacingSize="1.03"/>
</textElement>
<textFieldExpression><![CDATA[$F{inclusion}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
</frame>
</band>