如何在Jasper报表生成中实现列名跨越多行?

5

我已经编写了jasper规范,从表数据源生成PDF。这个工作正常。现在我要添加更多的列,报告看起来不好看。我现在在考虑是否可以像下面这样将列名压缩成多行

维护日期

维护

日期

Jasper能否实现这一点?

问候, 保罗


你是指JasperReports API的使用吗? - Alex K
我已经编写了jrxml,并使用表格数据源生成PDF。 - paulhudson
你可以在我的帖子中查看我的jrxml片段。 - Alex K
@AlexK 感谢您的回帖。但是我的问题是如何将一个单独的列名称显示在两行中 - 只是为了节省其他需要显示的超过11个列的空间。不像您在帖子中提供的那种方法。 - paulhudson
欢迎。在这种情况下,@mdahlman的答案对您来说是一个很好的解决方案。 - Alex K
2个回答

3
您的列名是否为硬编码?您只需将“Maintenance Date”更改为“Maintenance\nDate”即可换行吗?
注意:您无法在静态文本元素中添加“\n”字符。您需要使用文本字段。幸运的是,您可以在iReport中右键单击静态文本元素并将其转换为文本字段。
我想这可能会解决问题。如果不行,那么您可能需要让问题更加清晰明确。

是的,我的表列名在jrxml文件中是硬编码的。这里是我拥有的相同代码。 - paulhudson
完美。在这种情况下,添加“\n”应该是你所需要的。 - mdahlman
不确定如何格式化以下XML代码片段: <staticText> <reportElement key="staticText-7" style="Header Text" mode="Opaque" x="7" y="4" width="73" height="16"/> <box> <topPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <leftPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> <bottomPen lineWidth="0.0" lineColor="#000000"/> <rightPen lineWidth="0.0" lineStyle="Solid" lineColor="#000000"/> </box> <textElement/> <text><![CDATA[Maintenance Date]]></text> </staticText> - paulhudson
我刚刚将列名更改为如下内容,但在PDF中显示的仍然是相同的文本 <text><![CDATA["Maintenance\nDate"]]></text>,即PDF中仍然显示"Maintenance\nDate"。 - paulhudson
更新以涵盖静态文本与文本框需求。这次应该真的解决了。 - mdahlman
好的,我现在必须在需要的地方将staticText元素更改为textField元素。谢谢。 - paulhudson

1
如果你正在使用JasperReports API,你可以使用这个示例:
    //Detail
    band = new JRDesignBand();
    band.setHeight(40);

    JRDesignStaticText staticText = new JRDesignStaticText();
    staticText.setX(0);
    staticText.setY(0);
    staticText.setWidth(60);
    staticText.setHeight(20);
    staticText.setMode(ModeEnum.OPAQUE);
    staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    staticText.setStyle(boldStyle);
    staticText.setText("ID: ");
    staticText.getLineBox().getLeftPen().setLineWidth(1);
    staticText.getLineBox().getTopPen().setLineWidth(1);
    staticText.getLineBox().setLeftPadding(10);
    band.addElement(staticText);

    textField = new JRDesignTextField();
    textField.setX(60);
    textField.setY(0);
    textField.setWidth(200);
    textField.setHeight(20);
    textField.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    textField.setStyle(normalStyle);
    expression = new JRDesignExpression();
    expression.setValueClass(java.lang.Integer.class);
    expression.setText("$F{Id}");
    textField.setExpression(expression);
    textField.getLineBox().getTopPen().setLineWidth(1);
    textField.getLineBox().getRightPen().setLineWidth(1);
    textField.getLineBox().setLeftPadding(10);
    band.addElement(textField);

    staticText = new JRDesignStaticText();
    staticText.setX(0);
    staticText.setY(20);
    staticText.setWidth(60);
    staticText.setHeight(20);
    staticText.setMode(ModeEnum.OPAQUE);
    staticText.setHorizontalAlignment(HorizontalAlignEnum.LEFT);
    staticText.setStyle(boldStyle);
    staticText.setText("Name: ");
    staticText.getLineBox().getLeftPen().setLineWidth(1);
    staticText.getLineBox().getBottomPen().setLineWidth(1);
    staticText.getLineBox().setLeftPadding(10);
    band.addElement(staticText);


    textField = new JRDesignTextField();
    textField.setStretchWithOverflow(true);
    textField.setX(60);
    textField.setY(20);
    textField.setWidth(200);
    textField.setHeight(20);
    textField.setPositionType(PositionTypeEnum.FLOAT);
    textField.setStyle(normalStyle);
    expression = new JRDesignExpression();
    expression.setValueClass(java.lang.String.class);
    expression.setText("$F{FirstName} + \" \" + $F{LastName}");
    textField.setExpression(expression);
    textField.getLineBox().getRightPen().setLineWidth(1);
    textField.getLineBox().getBottomPen().setLineWidth(1);
    textField.getLineBox().setLeftPadding(10);
    band.addElement(textField);

    ((JRDesignSection) jasperDesign.getDetailSection()).addBand(band);

结果将会是:

enter image description here

这几乎和这个片段的jrxml文件完全一样:
<detail>
    <band height="40" splitType="Stretch">
        <staticText>
            <reportElement x="0" y="0" width="60" height="20"/>
            <box leftPadding="10">
                <topPen lineWidth="1.0"/>
                <leftPen lineWidth="1.0"/>
            </box>
            <textElement/>
            <text><![CDATA[ID: ]]></text>
        </staticText>
        <textField>
            <reportElement x="60" y="0" width="200" height="20"/>
            <box leftPadding="10">
                <topPen lineWidth="1.0"/>
                <rightPen lineWidth="1.0"/>
            </box>
            <textElement/>
            <textFieldExpression><![CDATA[$F{Id}]]></textFieldExpression>
        </textField>
        <staticText>
            <reportElement x="0" y="20" width="60" height="20"/>
            <box leftPadding="10">
                <leftPen lineWidth="1.0"/>
                <bottomPen lineWidth="1.0"/>
            </box>
            <textElement/>
            <text><![CDATA[Name: ]]></text>
        </staticText>
        <textField>
            <reportElement x="60" y="20" width="200" height="20"/>
            <box leftPadding="10">
                <bottomPen lineWidth="1.0"/>
                <rightPen lineWidth="1.0"/>
            </box>
            <textElement/>
            <textFieldExpression><![CDATA[$F{FirstName} + " " + $F{LastName}]]></textFieldExpression>
        </textField>
    </band>
</detail>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接