当前位置: 首页 > 知识库问答 >
问题:

隐藏列时移除空格

景育
2023-03-14

我正在使用JasperReports 4.5.0生成报告。我正在生成不同格式的报告,如html、csv、pdf、xls、doc。在我的一份报告中,我有6列,分别是col1、col2、col3、col4、col5、col6。但根据情况,我想把col4藏起来。为此,我使用了printWhenExpression。现在它根据条件隐藏列,但问题是该列占用的空间保持不变。

我怎样才能去掉col3和col5之间的空隙?

下面的代码是为了理解我是如何使用它的。

<staticText>
                <reportElement x="500" y="0" width="0" height="20" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
                    <printWhenExpression><![CDATA[$P{routeType}==Boolean.FALSE]]></printWhenExpression>
                </reportElement>
                <box>
                    <topPen lineWidth="0.25"/>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font size="12" isBold="true"/>
                </textElement>
                <text><![CDATA[Col4]]></text>
            </staticText>

<textField isBlankWhenNull="true">
                <reportElement x="500" y="0" width="0" height="20" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true">
                    <printWhenExpression><![CDATA[$P{routeType}==Boolean.FALSE]]></printWhenExpression>
                </reportElement>
                <box>
                    <leftPen lineWidth="0.25"/>
                    <bottomPen lineWidth="0.25"/>
                </box>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <textFieldExpression><![CDATA[$F{col4}]]></textFieldExpression>
            </textField>

只有当routeType值为false时,此字段才会打印。否则,它也应该删除空格的列。

共有2个答案

陈宏胜
2023-03-14

你可以用两个细节带来欺骗它。一个细节带B1有6列,第二个带B2有5列。然后在带属性中,当printWhenExpression为false时打印B1,当printWhenExpression为true时打印B2。

蓟清野
2023-03-14
  • 您可以使用JasperReports API或DynamicJasper API

以下是使用DynamicJasper API的示例

  • 您可以使用“假”字段(text Field)来显示一列的数据,而不是显示两个字段(两列)

您可以在两个文本字段下放置另一个文本字段(其宽度为两个文本字段)。使用printWhenExpression属性,您可以显示两列或一列。

以下是我的报告设计(在iReport中):

我的jrxml文件

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ..>
    <parameter name="hideStreetColumn" class="java.lang.Boolean">
        <defaultValueExpression><![CDATA[false]]></defaultValueExpression>
    </parameter>
    <queryString>
        <![CDATA[SELECT id, street, city FROM address]]>
    </queryString>
    <field name="ID" class="java.lang.Integer"/>
    <field name="STREET" class="java.lang.String"/>
    <field name="CITY" class="java.lang.String"/>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement x="139" y="13" width="279" height="20"/>
                <textElement textAlignment="Center" verticalAlignment="Middle">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Sample of hiding column]]></text>
            </staticText>
            <textField>
                <reportElement x="189" y="33" width="211" height="20"/>
                <box leftPadding="10"/>
                <textElement/>
                <textFieldExpression><![CDATA["To hide Street column: " + $P{hideStreetColumn}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement x="100" y="0" width="200" height="20">
                    <printWhenExpression><![CDATA[$P{hideStreetColumn}]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="0" y="0" width="100" height="20"/>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20">
                    <printWhenExpression><![CDATA[!$P{hideStreetColumn}]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{STREET}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="200" y="0" width="100" height="20">
                    <printWhenExpression><![CDATA[!$P{hideStreetColumn}]]></printWhenExpression>
                </reportElement>
                <box leftPadding="10">
                    <topPen lineWidth="1.0"/>
                    <leftPen lineWidth="1.0"/>
                    <bottomPen lineWidth="1.0"/>
                    <rightPen lineWidth="1.0"/>
                </box>
                <textElement/>
                <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

要显示所有三列,我们应该将hideStreetColumn参数设置为false。结果将是:

要仅显示两列(Street列是隐藏的),我们应该将hideStreetColzo参数设置为true。结果将是:

 类似资料:
  • 问题内容: 我有一些服务器端HTML输出,我无法使用纯CSS来处理,本质上DIV有时适用: 要么 要么 要么 当DIV == 我要删除它。 有任何想法吗? 问题答案: 甚至更好(假设使用jQuery): 编辑:其他答案是好的,但OP想要删除空项目,而不是将其隐藏。

  • 隐藏CardView时如何删除空间?我用android和Firebase做了一个应用程序,我在cardviews中显示Firebase的信息,但当信息不正确时,cardview必须消失。重点是cardview消失了,但仍然在布局中使用了空格,我已经在 setVisibility(GONE)视图变得不可见,但仍然占用空间,但对我来说不起作用。 这是我的布局: 这是mview: 我希望你能帮助我。

  • 问题:如果距离为空/null,我试图隐藏一个值。 我尝试了以下操作,但该值仍在显示: 和 什么是实现我所期待的正确方法。 以下是我在coldfusion中定义距离的方式: 当我做以下建议时: ng-show="e.distance===未定义" 当我执行其他建议时,例如ng hide=“e.distance”, 以下是提供商包含的内容:

  • 问题内容: 有没有办法隐藏标签栏并删除剩余空间(大约50像素)? 我试过了 没运气。我看到空白。 问题答案: 如果您在隐藏的标签栏下仍看到黑色条纹,是否尝试 在 此处选择 “在不透明的条下延伸边缘” ? 还要确保仍然选择 “底部栏” 。希望能帮助到你!

  • 这是我的HTML PHP表格页面的全部代码。。 我遇到的问题是,如果列和行(字段)为空, 当数据为空时,我想隐藏列和行字段。

  • 选中其中的一列隐藏以后,表格的操作列是固定列,固定列的最上面多了一行空白列 应该这么解决? 麻烦各位大佬给个解决方法