6

我有一些以 HTML 格式显示的 Jasper 报告。我希望 HTML 表中列的宽度能够自动调整大小以适合最宽单元格(在该列中)的内容,以便显示所有数据。

目前这不会发生,因为 Jasper 生成的 HTML 为 <table> 和一些 <td> 元素指定了固定宽度,例如

<td style="width: 20px; height: 17px;">
  <span style="font-family: Arial; font-size: 11px;">foo-bar-baz@examp</span>
</td>

我不能简单地删除所有这些宽度属性(使用 JavaScript),因为(如上面的 HTML 所示)在使用这些宽度时将隐藏的任何数据甚至都不会返回到客户端

干杯,唐

4

3 回答 3

6

虽然不完美,但您可以将字段标记为溢出。这至少会给你所有的数据。在您的 jrxml 文件中,它将类似于:

<textField isStretchWithOverflow="true" hyperlinkType="None">
    <reportElement style="Report Sub-Title" x="0" y="84" width="802" height="20"/>
    <textElement/>
    <textFieldExpression class="java.lang.String">
        <![CDATA["For the period ...]]>
    </textFieldExpression>
</textField>

恐怕我不知道 Jasper 报告的任何允许动态调整列宽大小的功能 - 这可能是对 HTML 有意义但对 PDF 等其他输出格式没有意义的事情之一。

于 2008-11-20T20:48:40.923 回答
4

开发人员有意识地决定不允许单元格宽度拉伸。要让列根据内容改变宽度,必须通过编程来完成。一个有用的工具:DynamicJasper

DynamicJasper 动态创建报告,在运行时定义列、列宽(自动宽度)、组、变量、字体、图表、交叉表、子报告(也可以是动态的)、页面大小以及您可以在设计时定义的所有其他内容.

JasperReports 论坛DynamicJasper HOW-TO都有自动(动态)列宽的示例。

FastReportBuilder drb = new FastReportBuilder();
drb.addColumn("State", "state", String.class.getName(),20)
        .addColumn("Branch", "branch", String.class.getName(),30)
        .addColumn("Quantity", "quantity", Long.class.getName(),60,true)
        .addColumn("Amount", "amount", Float.class.getName(),70,true)
        .addBarcodeColumn("Bar-Code", "amount", Long.class.getName(), BarcodeTypes.USD3, true,
false,null, 100, true, ImageScaleMode.FILL, null)
        .addGroups(1)
        .setDetailHeight(30)
        .setTitle("November 2006 sales report")
        .setSubtitle("This report was generated at " + new Date())
        .setUseFullPageWidth(true);     

DynamicReport dr = drb.build();

调用true时传入addColumn表示使用固定宽度。关闭或传递参数false将动态设置列宽。您可能还需要调用setUseFullPageWidth( true )自动宽度来激活,但我不确定这一点。

于 2011-04-07T17:13:32.273 回答
-2

在 iReport 中有一个名为“Stretch Type”的选项。选择“相对于带高”

于 2009-09-03T15:18:38.403 回答