如何在BIRT的CDATA中修改HTML <table>的单元格宽度
BIRT CDATA块中设置HTML表格宽度的解决方案
BIRT的HTML渲染层内置了属性白名单清洗规则,你之前能生效的bgcolor、border、align等属性都在白名单放行范围内,但原生HTML元素的width属性不在白名单中,会被渲染层直接过滤——这也是为什么同样的HTML代码在浏览器能正常渲染,但到BIRT里width设置就失效的核心原因。
方案1:将宽度规则迁移到元素的style内联属性中
不要使用<table width="100%">、<td width="200px">这类原生HTML属性写法,把宽度配置写到元素的style属性里,BIRT对style属性内的CSS规则透传优先级更高,不会触发白名单过滤:
- 表格整体宽度写法:
<table style="width:100%; border-collapse:collapse; border:1px solid #ccc;"> - 单元格宽度写法:
<td style="width:220px; padding:6px;">单元格内容</td>
注意:CSS宽度值必须带长度单位(px/%),不要只写纯数字,否则BIRT的样式解析层会将其判定为无效值直接丢弃。
方案2:内嵌独立style块定义全局表格样式
如果表格的列数较多,逐个单元格写内联style效率太低,可以在CDATA块的最开头嵌入独立的<style>标签,通过类选择器批量设置宽度。BIRT不会对独立style标签内的CSS规则做属性级过滤,宽度配置可以100%透传到最终渲染的页面中:
<!-- 以下内容直接放在CDATA块的最开头 --> <style> /* 自定义独立类名,避免和BIRT默认报表样式冲突 */ .custom-html-table { width: 100%; border-collapse: collapse; } .custom-html-table td { padding: 5px 10px; border: 1px solid #ddd; } /* 给需要固定宽度的列单独定义类 */ .custom-html-table .col-fixed-180 { width: 180px; } </style> <!-- 实际表格结构 --> <table class="custom-html-table"> <tr> <td class="col-fixed-180">固定宽度列内容</td> <td>自适应宽度列内容</td> </tr> </table>
注意事项
- 不需要修改BIRT的全局HTML过滤配置去放行
width原生属性,上述两种写法不需要改动全局环境,升级BIRT版本也不会出现兼容问题,稳定性更好。 - 改完配置后可以直接查看最终导出的HTML源码,确认
width对应的CSS规则是否被保留——如果规则还存在,就说明配置已经生效。
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

