【问题标题】:Dynamic column cell width动态列单元格宽度
【发布时间】:2010-09-22 22:59:21
【问题描述】:

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

目前这不会发生,因为 Jasper 生成的 HTML 为

和一些
元素指定了固定宽度,例如
<td style="width: 20px; height: 17px;">
  <span style="font-family: Arial; font-size: 11px;">foo-bar-baz@examp</span>
</td>

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

干杯, 唐

【问题讨论】:

  • 您是否尝试过使用iReport。它是用于编写 JasperReports 的 IDE。它可以让你的生活更简单。
  • 我也有同样的问题。如果您希望列均匀分布在可用宽度上,这是不可能的。在 Jasper Stuido 中,当您创建一个包含 10 列的表格时,它会将列分成一个宽度仅为 22 像素的小区域。然后您必须编辑每个单元格并手动将宽度更改为您计算的某个值 - 这需要几个小时。然后,当您想更改它时..出于这个原因,我不再使用表格了。我几乎对所有内容都使用子报表,因为您可以通过拖动来更改它们的宽度。

标签: java html jasper-reports


【解决方案1】:

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

DynamicJasper 创建报告 动态地,在运行时定义 列,列宽(自动宽度), 组、变量、字体、图表、 交叉表、子报表(也可以 是动态的),页面大小和一切 否则您可以在设计时定义 时间。

JasperReports forumDynamicJasper 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();

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

【讨论】:

    【解决方案2】:

    虽然不完美,但您可以将字段标记为溢出。这至少会给你所有的数据。在您的 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 等其他输出格式没有意义的事情之一.

    【讨论】:

    • 同意杰米爱。但我会将他的建议应用于 columnHeader 标记,以便该属性适用于整个列。
    • 太棒了,谢谢!!我发现当列拉伸以适应内容时,相邻列旁边没有填充。按照this SO answer 的建议,在textField 元素中添加&lt;box padding="10"/&gt; 修复了该问题
    【解决方案3】:

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

    【讨论】:

    • @Carlos:这将导致单元格在高度上拉伸,而不是宽度。
    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多