在Jasper报表中,我有4个帧(如下图所示),它们具有某些属性,如同一幅图像所示。
现在,我们的想法是,在给定特定参数showBlue
和showRed
的情况下,分别显示或隐藏了帧BLUE
和RED
,并且随后的帧“浮动”了。前一个(考虑以下顺序:BLUE
<-RED
<-GREEN
),而BLACK
应该留在同一位置。
在放置RED
之前,左两个框架(GREEN
和BLACK
)完美地漂浮。之后,当我将参数showBlue
和showRed
设置为false
(隐藏BLUE
和RED
帧)时,结果是:
这是报告设计的jrxml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 -->
<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="Float_UP" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="6578bc34-0c2e-4179-99da-5ec1dd90a422">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="showBlue" class="java.lang.Boolean"/>
<parameter name="showRed" class="java.lang.Boolean"/>
<queryString>
<![CDATA[]]>
</queryString>
<detail>
<band height="211" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="400" height="12" uuid="54cb1704-59d8-4272-9ec1-db4cea913cd3"/>
<text><![CDATA[Header 1 (right before conditional frame)]]></text>
</staticText>
<frame>
<reportElement x="0" y="15" width="400" height="66" isRemoveLineWhenBlank="true" uuid="0140ba9b-f2f0-494c-82bc-caf6b5efc63e">
<printWhenExpression><![CDATA[$P{showBlue}]]></printWhenExpression>
</reportElement>
<box>
<pen lineWidth="3.0" lineColor="#2E0DD4"/>
</box>
<staticText>
<reportElement x="1" y="1" width="379" height="59" uuid="a8b7d505-a6ad-4359-9263-23ac087b19ff"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[BLUE: `isRemoveLineWhenBlank=true` and `printWhenExpression` set]]></text>
</staticText>
</frame>
<frame>
<reportElement positionType="Float" x="0" y="85" width="400" height="60" isRemoveLineWhenBlank="true" uuid="c80dd879-ce81-4921-b17e-9882763a3f61">
<printWhenExpression><![CDATA[$P{showRed}]]></printWhenExpression>
</reportElement>
<box>
<pen lineWidth="3.0" lineColor="#F50A25"/>
</box>
<staticText>
<reportElement x="0" y="0" width="380" height="50" uuid="d0cadbd4-b436-47f4-a32d-2b00f0c6b147"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[RED: `isRemoveLineWhenBlank=true`, `printWhenExpression` set and `positionType="Float"`]]></text>
</staticText>
</frame>
<frame>
<reportElement positionType="Float" x="2" y="151" width="398" height="60" uuid="e0a5ed13-d8f2-4acd-ac14-1f5633099542"/>
<box>
<pen lineWidth="3.0" lineColor="#22B002"/>
</box>
<staticText>
<reportElement x="1" y="1" width="377" height="39" uuid="482471b4-4c3b-42c6-892d-f8c42ca320bf"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[GREEN: `positionType="Float"`]]></text>
</staticText>
</frame>
<frame>
<reportElement x="420" y="15" width="130" height="70" uuid="8e057d80-72be-4f66-ae9b-ef80610daf36"/>
<box>
<pen lineWidth="3.0"/>
</box>
<staticText>
<reportElement x="6" y="6" width="118" height="44" uuid="36d8e560-3af5-4edf-b9ef-9b9311877c3a"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[BLACK]]></text>
</staticText>
</frame>
</band>
</detail>
</jasperReport>
而且我已经为Swagger设置了Java Project,以防您想通过maven运行它。
问:如何将帧RED
和GREEN
的前一帧正确地“浮动”,而将帧BLACK
保持在同一位置地方?
答案 0 :(得分:2)
是的,因为黑框紧靠其上方,绿色不会浮起
Float-元素在其上级部分中浮动,如果该元素在其上方找到的其他元素向下推。它尝试保留与位于紧邻其上方
的相邻元素之间的距离
显然,解决方案是在其上方没有任何元素,而实现此目的的一种方法是使用另一帧或子报表。如果在此设计下还需要元素浮动,则可能需要子报表,但我将展示父框架解决方案,因为这是解决直接问题的最简单方法。
jrxml
<?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="Float_UP" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="6578bc34-0c2e-4179-99da-5ec1dd90a422">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="showBlue" class="java.lang.Boolean"/>
<parameter name="showRed" class="java.lang.Boolean"/>
<queryString>
<![CDATA[]]>
</queryString>
<detail>
<band height="96" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="400" height="12" uuid="54cb1704-59d8-4272-9ec1-db4cea913cd3"/>
<text><![CDATA[Header 1 (right before conditional frame)]]></text>
</staticText>
<frame>
<reportElement x="0" y="15" width="409" height="78" uuid="82076f1d-b7a9-4b63-ab4a-af54b0817a62"/>
<frame>
<reportElement x="0" y="4" width="400" height="66" isRemoveLineWhenBlank="true" uuid="0140ba9b-f2f0-494c-82bc-caf6b5efc63e">
<printWhenExpression><![CDATA[$P{showBlue}]]></printWhenExpression>
</reportElement>
<box>
<pen lineWidth="3.0" lineColor="#2E0DD4"/>
</box>
<staticText>
<reportElement x="1" y="1" width="379" height="59" uuid="a8b7d505-a6ad-4359-9263-23ac087b19ff"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[BLUE: `isRemoveLineWhenBlank=true` and `printWhenExpression` set]]></text>
</staticText>
</frame>
<frame>
<reportElement positionType="Float" x="-1" y="75" width="400" height="60" isRemoveLineWhenBlank="true" uuid="c80dd879-ce81-4921-b17e-9882763a3f61">
<printWhenExpression><![CDATA[$P{showRed}]]></printWhenExpression>
</reportElement>
<box>
<pen lineWidth="3.0" lineColor="#F50A25"/>
</box>
<staticText>
<reportElement x="0" y="0" width="380" height="50" uuid="d0cadbd4-b436-47f4-a32d-2b00f0c6b147"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[RED: `isRemoveLineWhenBlank=true`, `printWhenExpression` set and `positionType="Float"`]]></text>
</staticText>
</frame>
<frame>
<reportElement positionType="Float" x="0" y="140" width="398" height="60" uuid="e0a5ed13-d8f2-4acd-ac14-1f5633099542"/>
<box>
<pen lineWidth="3.0" lineColor="#22B002"/>
</box>
<staticText>
<reportElement x="1" y="1" width="377" height="39" uuid="482471b4-4c3b-42c6-892d-f8c42ca320bf"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[GREEN: `positionType="Float"`]]></text>
</staticText>
</frame>
</frame>
<frame>
<reportElement x="420" y="15" width="130" height="70" uuid="8e057d80-72be-4f66-ae9b-ef80610daf36"/>
<box>
<pen lineWidth="3.0"/>
</box>
<staticText>
<reportElement x="6" y="6" width="118" height="44" uuid="36d8e560-3af5-4edf-b9ef-9b9311877c3a"/>
<textElement>
<font size="14"/>
</textElement>
<text><![CDATA[BLACK]]></text>
</staticText>
</frame>
</band>
</detail>
</jasperReport>
输出
其他设计说明
正如您在输出中看到的,绿色和黑色框之间有4px的高度差,这是由于帧之间的空白。如果您需要像素完美的报告,则需要在要删除/浮动的组件之间保持零间距。
答案 1 :(得分:1)
也许您可以尝试在报告中使用多个 Detail 条带。因此,您可以在每个频段而不是每个帧中使用属性printWhenExpresion
。
Here,您可以找到通过示例修改的jrxml代码。