在Grails-5中使用bootstrap.css生成PDF遇类型转换异常求助
Grails 5 中 Rendering 插件引入 Bootstrap.css 后 PDF 导出异常修复
异常信息
Caused by: java.lang.ClassCastException: org.xhtmlrenderer.render.BlockBox cannot be cast to org.xhtmlrenderer.newtable.TableBox
问题根源
Bootstrap.css 中的表格样式会修改原生 HTML 表格的渲染行为,比如给表格或其容器添加非标准的 display 属性,导致 Rendering 插件依赖的 xhtmlrenderer 库无法正确识别表格元素,错误地将表格节点解析为普通块级元素(BlockBox),后续代码强制转换为 TableBox 时触发类型转换异常。
可行解决方案
- 隔离PDF模板样式:不要在导出PDF的模板页面引入全局 Bootstrap.css,单独为PDF编写适配xhtmlrenderer的极简样式,只保留必要的排版规则。
- 覆盖Bootstrap表格样式:在PDF模板的自定义CSS中强制恢复表格的原生渲染属性,代码如下:
/* 重置表格样式,适配xhtmlrenderer */ table { display: table !important; border-collapse: collapse !important; table-layout: fixed !important; } thead, tbody { display: table-row-group !important; } tr { display: table-row !important; } th, td { display: table-cell !important; } /* 禁用Bootstrap的响应式表格容器干扰 */ .table-responsive { display: block !important; overflow-x: visible !important; } - 升级依赖版本:检查Rendering插件所依赖的xhtmlrenderer版本,尝试升级到支持Bootstrap样式解析的较新版本,注意要与Grails 5的版本兼容。
额外提示
确保PDF模板中的表格结构完全符合标准HTML规范,避免使用Bootstrap的table-responsive等会改变容器结构的类,这类元素会干扰xhtmlrenderer的节点解析逻辑。
内容的提问来源于stack exchange,提问作者Naeem Ghumman
相关产品推荐
相关产品推荐

