代码之家  ›  专栏  ›  技术社区  ›  lealceldeiro VonC

如何在Jasper报告中组织框架,使它们完美地浮动?

  •  6
  • lealceldeiro VonC  · 技术社区  · 7 年前

    在Jasper报告中,我有4个帧(下图),它们的一些属性设置如同一个图中所示。

    Report image

    showBlue showRed BLUE RED 分别显示或隐藏,后续帧在前一帧之后“浮动”(考虑以下顺序: 蓝色 <- 红色 <- GREEN )而 BLACK

    两个左框( 红色 黑色 秀蓝 展示 false 蓝色 红色

    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>
    

    Java Project 以防你想和maven一起玩。

    问: 我怎么做镜框 红色 绿色 在上一帧之后适当地“上浮”,而 黑色 呆在同一个地方?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Community Mohan Dere    5 年前

    是的,绿色的不会 浮动 从那以后

    JRElement API

    就在它上面

    解决方案

    很明显,解决方案是不让任何元素位于它的正上方,实现这一点的一种方法是使用另一个框架或子报表。如果您需要元素浮动在这个设计下,您可能需要一个子报表,但我将展示父框架解决方案,因为这是解决直接问题的最简单方法。

    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

    附加设计说明

    正如您在输出中看到的,绿色和黑色框之间有4倍的高度差,这是由于帧之间的空白造成的。如果你需要像素完美的报告,你需要有 正在移除/浮动的。

        2
  •  2
  •   lealceldeiro VonC    7 年前

    也许你可以尝试使用多个 细节 printWhenExpresion 在每个波段,而不是在每个帧。

    Here

    推荐文章