列标题拆分和合并

时间:2012-07-03 14:37:37

标签: jasper-reports ireport

我正在使用iReport和Jasper Reports 4.5.0构建报告。除了我有一个要求之外,它的一切工作正常,在一些表的格式化中我还无法解决。 有些列需要有标题(分组两列或更多列)和副标题(每一列),我无法弄清楚如何实现这一点。

以下是所需最终“风格”的示例:

| POSITION |column 2|column 3|
| x  |  Y  |        |        |
------------------------------
| 10 | 20 |value|value

3 个答案:

答案 0 :(得分:0)

我认为你在想这个。如果您没有对基于您的示例的数据使用分组,那么您似乎没有这样做,那么这是非常基本的。

列标题只是静态文本字段。并且您可以在Column Header带中的任何位置添加它们。这是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="report1" language="groovy" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b478862e-b118-4290-8664-eae9b2966b31">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="GROUP_BY" class="java.lang.String">
        <defaultValueExpression><![CDATA[]]></defaultValueExpression>
    </parameter>
    <field name="x" class="java.lang.String"/>
    <field name="y" class="java.lang.String"/>
    <field name="column1" class="java.lang.String"/>
    <field name="column2" class="java.lang.String"/>
    <columnHeader>
        <band height="40" splitType="Stretch">
            <staticText>
                <reportElement uuid="039d11f3-52eb-4717-9c83-34cbdcb81d6a" x="0" y="20" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[x]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="f0d66af8-19c2-4d50-9d1a-37b1162a75a8" x="100" y="20" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[y]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="44e3960a-31f3-444c-ad32-061af30cf82c" x="200" y="0" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[column1]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="6d468249-5242-4cf6-a4db-7995bdea15ba" x="300" y="1" width="100" height="20"/>
                <textElement/>
                <text><![CDATA[column2]]></text>
            </staticText>
            <staticText>
                <reportElement uuid="461dc8bb-a938-42ed-86c5-006732fbba4f" x="0" y="0" width="200" height="20"/>
                <textElement/>
                <text><![CDATA[Position]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="23" splitType="Stretch">
            <textField>
                <reportElement uuid="e2aff92b-0f47-4f78-9f49-c861c04533be" x="0" y="3" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{x}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="6091fb48-0bb6-422e-8520-b6e2d6e5cce1" x="100" y="3" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{y}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="8b32925f-256c-4026-a3f1-8e435a12ccd0" x="200" y="3" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{column1}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement uuid="8b9d0540-da1a-41bf-b7e8-5f2cf9141fb6" x="300" y="3" width="100" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{column2}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

答案 1 :(得分:0)

我遇到了同样的麻烦,但是使用了Table Component并且需要第一列没有出现,如果没有任何行(Column Header方法没有按照我想要的方式工作)

所以我使用columnGroup解决了这个问题,将我需要的所有列(在你的例子中,POSITION列)设置为0我不想显示的行的高度(在示例JRXML部分中)您可以在columnGrouptableFootercolumnHeader的{​​{1}}标签之间看到它

以下示例是一个表格组件,可以产生类似这样的内容

columnFooter

JRXML代码:

+-------------------+
|     POSITION      |                       
+-------------------+---------------+---------------+
|    x    |    y    |    Column1    |    Column2    |
+---------+---------+---------------+---------------+
|  $F{x}  |  $F{Y}  |  $F{column1}  |  $F{column2}  |
+-------------------+---------------+---------------+

答案 2 :(得分:0)

我能够通过以下过程获得包含多页报告的多行列标题:

JasperReports_TwoLineTableHeader

  1. 将表的列标题高度设置为40px
  2. 第1栏和第1栏2有一个单行标题,所以这些文本框的高度= 40px
    • 下面的代码包含第1列和第34页的xml;收集系统&#34;但第2栏遗漏了可读性)
  3. 我将第3-5列分组
    • columnGroup width =&#34; 240&#34;
    • columnHeader height =&#34; 40&#34;
    • textbox1&#34;分配生产&#34;:x =&#34; 0&#34; Y =&#34; 0&#34;宽度=&#34; 240&#34;高度=#&34; 20&#34;
    • textbox2&#34; Gas MCF&#34;:x =&#34; 0&#34; Y =&#34; 20&#34;宽度=&#34; 80&#34;高度=#&34; 20&#34;
    • textbox3&#34; Oil&#34;:x =&#34; 80&#34; Y =&#34; 20&#34;宽度=&#34; 80&#34;高度=#&34; 20&#34;
    • textbox3&#34; Water&#34;:x =&#34; 160&#34; Y =&#34; 20&#34;宽度=&#34; 80&#34;高度=#&34; 20&#34;
  4. 第1栏

    <jr:column width="200" uuid="5255e943-4959-49c4-9f83-0c6567d56684">
        <jr:groupFooter groupName="GatheringGroup_dsSixMonths">
            <jr:cell style="Alternate_Row" height="20" rowSpan="1">
                <property name="com.jaspersoft.studio.unit.height" value="px"/>
                <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
                <property name="com.jaspersoft.studio.unit.width" value="px"/>
                <textField isStretchWithOverflow="true" pattern="#,##0.00">
                    <reportElement x="0" y="0" width="200" height="20" uuid="78a4370a-8d3e-4bae-9a58-47b5b947189c"/>
                    <textFieldExpression><![CDATA[$F{GatheringSystem.GatheringSystemName}]]></textFieldExpression>
                </textField>
            </jr:cell>
        </jr:groupFooter>                   
        <jr:columnHeader height="40" rowSpan="1">
            <property name="com.jaspersoft.studio.unit.height" value="px"/>
            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
            <property name="com.jaspersoft.studio.unit.width" value="px"/>
            <staticText>
                <reportElement style="Crosstab_Header" x="0" y="0" width="200" height="40" uuid="9b4976a1-5deb-4edf-a4a7-39bd4375663d">
                    <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                    <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
                </reportElement>
                <text><![CDATA[Gathering System]]></text>
            </staticText>
        </jr:columnHeader>
        <jr:detailCell height="0">
            <property name="com.jaspersoft.studio.unit.height" value="px"/>
            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
        </jr:detailCell>
    </jr:column>    
    

    Cols 3-5 - COLUMN GROUP HAS width =&#34; 240&#34;像素

    <jr:columnGroup width="240" uuid="dc55dcaa-91d3-4450-9300-3aaea94c789a">
                <property name="com.jaspersoft.studio.components.table.model.column.name" value="Columns [3]"/>
                <property name="com.jaspersoft.studio.unit.height" value="pixel"/>
    
                <jr:columnHeader style="Table 1_CH" height="40">
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
                    <property name="com.jaspersoft.studio.unit.height" value="px"/>
    

    第一个文本框&#34;分配的生产&#34;有高度=&#34; 20&#34; px,宽度=&#34; 240&#34;

                    <staticText>
                        <reportElement style="Crosstab_Header" x="0" y="0" width="240" height="20" uuid="1308d33c-05c3-4a0b-8fb3-6247693a95b6">
                            <property name="com.jaspersoft.studio.unit.height" value="px"/>
                            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
                            <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                            <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                        </reportElement>
                        <text><![CDATA[Allocated Production]]></text>
                    </staticText>
    

    第二个文本框&#34; Gas MCF&#34;有高度=&#34; 20&#34; px,宽度=&#34; 80&#34;,位于x = 0,y = 20

                    <staticText>
                        <reportElement style="Crosstab_Header" x="0" y="20" width="80" height="20" uuid="3b3cacbb-232c-4a5c-afd7-e069213d6eac">
                            <property name="com.jaspersoft.studio.unit.height" value="px"/>
                            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
                            <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                            <property name="com.jaspersoft.studio.unit.width" value="pixel"/>
                        </reportElement>
                        <text><![CDATA[Gas MCF]]></text>
                    </staticText>
    

    第三个文本框&#34; Oil&#34;位于x = 80,y = 20

                    <staticText>
                        <reportElement style="Crosstab_Header" x="80" y="20" width="80" height="20" uuid="6fd8d11e-b10c-4530-aaa7-2b2066ddc1de">
                            <property name="com.jaspersoft.studio.unit.height" value="px"/>
                            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
                            <property name="com.jaspersoft.studio.unit.y" value="pixel"/>
                        </reportElement>
                        <text><![CDATA[Oil]]></text>
                    </staticText>
    

    最后一个文字框&#34; Water&#34;位于x = 160,y = 20

                    <staticText>
                        <reportElement style="Crosstab_Header" x="160" y="20" width="80" height="20" uuid="4402b753-1d83-4e19-9467-47c6d5d7b173">
                            <property name="com.jaspersoft.studio.unit.height" value="px"/>
                            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
                        </reportElement>
                        <text><![CDATA[Water]]></text>
                    </staticText>
                </jr:columnHeader>