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

如何在jasper报表中实现静态文本的动态化(在jrxml文件中)

狄宏大
2023-03-14
Date    Trip1
11/04/15    5
12/04/15    8
13/04/15    9
Date    Trip1   Trip2
11/04/15    5   56
12/04/15    8   34
13/04/15    9   22
<?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="all_dto" language="groovy" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="89b85722-ba33-45f9-8706-74b3dacad933">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="title" class="java.lang.String">
        <defaultValueExpression><![CDATA[DDDDD]]></defaultValueExpression>
    </parameter>
    <parameter name="reportId" class="java.lang.String"/>
    <parameter name="operationTime" class="java.lang.String"/>
    <field name="Date" class="java.lang.String"/>
    <field name="Distance" class="java.lang.String"/>

    <variable name="agencyName" class="java.lang.String"/>
    <background>
        <band/>
    </background>
    <title>
        <band height="30">
            <frame>
                <reportElement uuid="85d468b6-12c0-4042-8566-b50602873de0" mode="Opaque" x="0" y="0" width="500" height="24" backcolor="#006699"/>
                <textField>
                    <reportElement uuid="5769f1cf-6378-4bb0-b172-4716e2eb79fd" x="18" y="0" width="450" height="18" forecolor="#FFFFFF"/>
                    <textElement markup="none">
                        <font size="12" isBold="true"/>
                    </textElement>
                    <textFieldExpression><![CDATA[$P{title}]]></textFieldExpression>
                </textField>

            </frame>
        </band>
    </title>
    <columnHeader>
        <band height="21">
            <staticText>
                <reportElement uuid="6fe065c4-169e-4505-b362-ac4251c8b1f6" mode="Opaque" x="0" y="0" width="100" height="21" forecolor="#006699" backcolor="#E6E6E6"/>
                <textElement>
                    <font size="9" isBold="true"/>
                </textElement>
<text><![CDATA[Date]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="6fe065c4-169e-4505-b362-ac4251c8b1f6" mode="Opaque" x="100" y="1" width="83" height="20" forecolor="#006699" backcolor="#E6E6E6"/>
                <textElement>
                    <font size="9" isBold="true"/>
                </textElement>
                        <text><![CDATA[Distance]]></text>

            </staticText>

        </band>
    </columnHeader>
    <detail>
        <band height="21">
                <textField>
                <reportElement uuid="8d449f27-3ff5-4f72-9da6-c0f816e48c9e" x="0" y="0" width="100" height="21" forecolor="#666666"/>
                <textElement>
                    <font size="8" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{Date}]]></textFieldExpression>

            </textField>
            <textField>
                <reportElement uuid="8d449f27-3ff5-4f72-9da6-c0f816e48c9e" x="100" y="1" width="83" height="20" forecolor="#666666"/>
                <textElement>
                    <font size="8" isBold="true"/>
                </textElement>
                <textFieldExpression><![CDATA[$F{Distance}]]></textFieldExpression>
            </textField>

        </band>
    </detail>
    <pageFooter>
        <band height="30">
            <textField>
                <reportElement uuid="df503057-dcfe-47a4-ba3c-240611bdf374" mode="Opaque" x="0" y="17" width="515" height="13" backcolor="#E6E6E6"/>
                <textElement textAlignment="Right">
                    <font size="6"/>
                </textElement>
                <textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report">
                <reportElement uuid="361f0bb0-014d-402f-80f3-fe748ced00a9" mode="Opaque" x="515" y="17" width="40" height="13" backcolor="#E6E6E6"/>
                <textElement>
                    <font size="6"/>
                </textElement>
                <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
            <textField pattern="EEEEE dd MMMMM yyyy">
                <reportElement uuid="98d5cae2-2532-4834-8de0-73b47852ac1f" x="0" y="17" width="100" height="13"/>
                <textElement/>
                <textFieldExpression><![CDATA[$P{operationTime}]]></textFieldExpression>
            </textField>
        </band>
    </pageFooter>
</jasperReport>

共有1个答案

拓拔富
2023-03-14

你至少可以用两种不同的方法来做。使用交叉表(请参见Jasper帮助,尽管这很明显)或创建多个列。

在报表属性中,选择希望显示的最大列数。然后创建一个组,并对要分组的数据进行break(在本例中是trip)。创建列页眉和页脚,并将trip字段放在页眉中。在detail字段中,从调色板中添加一个列符。

注您需要传入一个集合参数,该参数包含您想要显示的trips,并与查询中的$x in运算符匹配。

<?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="report12" language="groovy" columnCount="3" pageWidth="595" pageHeight="842" columnWidth="185" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="427aadaf-d91a-41be-8ab6-4c8b67934889">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString>
        <![CDATA[select getdate() date,
       1 as trip_no,
       11 as val
union
select getdate() date,
       2 as trip_no,
       12 as val
union
select getdate() date,
       3 as trip_no,
       15 as val
union
select getdate() date,
       1 as trip_no,
       25 as val
union
select getdate() date,
       2 as trip_no,
       10 as val
union
select getdate() date,
       3 as trip_no,
       5 as val
]]>
    </queryString>
    <field name="date" class="java.sql.Timestamp"/>
    <field name="trip_no" class="java.lang.Integer"/>
    <field name="val" class="java.lang.Integer"/>
    <group name="x">
        <groupExpression><![CDATA[$F{trip_no}]]></groupExpression>
    </group>
    <group name="trip">
        <groupExpression><![CDATA[$F{trip_no}]]></groupExpression>
        <groupHeader>
            <band height="20">
                <textField>
                    <reportElement uuid="531f49e8-78a7-4786-a788-7e7588263e48" x="0" y="0" width="183" height="20"/>
                    <textElement/>
                    <textFieldExpression><![CDATA[$F{trip_no}]]></textFieldExpression>
                </textField>
            </band>
        </groupHeader>
        <groupFooter>
            <band height="1">
                <break type="Column">
                    <reportElement uuid="a224f69e-5d76-4cd2-8959-373bdaa51b78" x="0" y="0" width="100" height="1"/>
                </break>
            </band>
        </groupFooter>
    </group>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement uuid="8f94c9e6-e5bf-4904-a529-923acca4dc2a" x="0" y="0" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{date}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="9997bf64-2fe8-47fd-9b76-b501d210d309" x="100" y="0" width="83" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{val}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
 类似资料:
  • 我有一组数据要使用jasper报告以表格格式显示,并且当前正在编写. jrxml文件。 在我的数据集中,我有数据可以帮助我们了解表的列数,从而使它成为表的动态列。 因此,问题是从数据库中提取的数据是特定于行的;那么,我怎样才能把它转换成表的列数呢? 我有一个从其中提取数据的dB表: 我必须同样创建报告: -: LEVEL的数量成为特定测试的列数。

  • 我想生成jasper报表,用于打印在固定大小的文具上。我创建了html表,并将所有的值放在其中,根据我的要求,现在我想通过Java打印,所以我现在使用了jasper报告,因为我有列,是变化的时间。根据我的要求,我在网上搜索,我得到了动态的jasper是解决方案,但由于方法添加列需要列名和传递变量,这是从setter getter方法,但我的整个列是动态的,那么我如何生成setter getter方

  • 问题内容: 所以这很尴尬。我有一个应用程序,该应用程序已集成在一起,现在它只提供一个静态HTML页面,其中包含指向CSS和JS的链接。而且我找不到文档中描述返回静态文件的位置。是的,我可以使用,但是我知道数据没有模板化。我还以为或者是正确的事情,但我不能让这些工作。同时,我正在打开文件,阅读内容,并装配Response具有适当mimetype的: 有人要为此提供代码示例或网址吗?我知道这将变得简单

  • 单文件组件所需的依赖如何在组件被使用的时候才动态引入? 上文代码中,我想开发一个echarts的单文件组件,因为项目没有用脚手架,所以组件只能以单文件组件的形式开发。这个时候就产生了一个问题,如果需要给每一个引用到该组件的页面都加上script标签引入echarts依赖显然是非常繁琐和呆板的。所以想找一种动态引入的方式,只需要将echarts组件和静态页面放入固定的路径下,引用到这个组件的时候,自

  • 为便于开发,larva采用动态类型,于是首先遇到的一个问题就是,在转化为java的时候,如何处理动态类型带来的问题。乍一看,这个不是很复杂,已经有前车之鉴了,Cython就可以把python代码直接转化成C代码,我的做法和Cython有相似之处,但考虑效率问题,做了一点修改 (虽然第一版本并不实现class语法来自定义类,不过在论述这个问题的时候,假定有自定义类,因为主要矛盾就在自定义类的属性方面

  • [更新] 这是一个简化的用例。我们的实际需求是,我们有。RTF文档作为BLOB存储在DB中。我们希望在我们的大报告之间插入这些文档的内容。这些rtf文件包含文本、表格和图像。当我试图读取这个rtf文件时,只有文本出现。有人能提出任何其他的替代方案来实现这一点吗?