动态列单元格宽度

Dón*_*nal 5 html java jasper-reports

我有一些以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>
Run Code Online (Sandbox Code Playgroud)

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

干杯,唐

Jam*_*ove 5

虽然不完美,但你可以用溢出来标记该区域.这至少可以为您提供所有数据.在您的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>
Run Code Online (Sandbox Code Playgroud)

我担心我不知道Jasper报告的任何功能会允许动态调整列宽的大小 - 这可能是对HTML有意义的事情之一,但对其他输出格式(例如PDF)却没什么意义.


Dav*_*vis 5

开发人员有意识地决定不允许单元宽度拉伸。对于要根据内容改变列宽度的列,必须通过编程来完成。一个有用的工具: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();
Run Code Online (Sandbox Code Playgroud)

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