如何在Jasper Report中组织框架以使它们完美浮动?

时间:2018-10-04 20:41:58

标签: jasper-reports

在Jasper报表中,我有4个帧(如下图所示),它们具有某些属性,如同一幅图像所示。

Report image

现在,我们的想法是,在给定特定参数showBlueshowRed的情况下,分别显示或隐藏了帧BLUERED,并且随后的帧“浮动”了。前一个(考虑以下顺序:BLUE <-RED <-GREEN),而BLACK应该留在同一位置。

在放置RED之前,左两个框架(GREENBLACK)完美地漂浮。之后,当我将参数showBlueshowRed设置为false(隐藏BLUERED帧)时,结果是:

Incorrect rendering image

这是报告设计的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运行它。

问:如何将帧REDGREEN的前一帧正确地“浮动”,而将帧BLACK保持在同一位置地方?

2 个答案:

答案 0 :(得分:2)

是的,因为黑框紧靠其上方,绿色不会浮起

来自JRElement API

  

Float-元素在其上级部分中浮动,如果该元素在其上方找到的其他元素向下推。它尝试保留与位于紧邻其上方

的相邻元素之间的距离

解决方案

显然,解决方案是在其上方没有任何元素,而实现此目的的一种方法是使用另一帧或子报表。如果在此设计下还需要元素浮动,则可能需要子报表,但我将展示父框架解决方案,因为这是解决直接问题的最简单方法。

solution

使用父框架的示例

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>

输出

result

其他设计说明

正如您在输出中看到的,绿色和黑色框之间有4px的高度差,这是由于帧之间的空白。如果您需要像素完美的报告,则需要在要删除/浮动的组件之间保持零间距

答案 1 :(得分:1)

也许您可以尝试在报告中使用多个 Detail 条带。因此,您可以在每个频段而不是每个帧中使用属性printWhenExpresion

Here,您可以找到通过示例修改的jrxml代码。