我们正在使用带有 XML Worker 的 iText 5.5.7 并遇到了长表的问题,其中在页面末尾运行的行被分成两个到下一页(见图)。
我们已尝试按使用 iText,XMLWorker 防止文本块中的分页符和iText 从 HTML 表格中删除 PDF 格式的页面中的建议使用page-break-inside:avoid;
,但没有效果。
我们试过了
-
在
<tbody>
中包装每一行并应用分页符避免(无效) -
定位
tr, td
并应用分页符(无效) -
将每个
td
的内容包装在div
中并应用分页符(itext 一旦到达页面结尾就停止处理行)
我们的印象是支持page-break-inside:avoid
,但尚未看到对此的确认。是否有使用 XML worker 创建此效果的示例或最佳实践,或者是执行此级别操作所需的 Java API?
干杯
目前正在分页的行:
期望的效果:包含太多数据的行包装到下一页
1 回答
.NET 开发人员,但您应该能够轻松翻译以下 C#代码。
任何时候默认的 XML Worker 实现都不能满足您的需求,您基本上只需要查看源代码。首先,查看
XML Worker
是否支持标签类中所需的标记。有一个很好的<table>
实现支持page-break-inside:avoid
样式,但它只能在<table>
级别工作**,而不是行<tr>
级别。幸运的是,覆盖表的End()
方法并不是那么多。如果不支持标记,则需要通过继承AbstractTagProcessor来滚动自己的自定义标记处理器,但不是为了这个答案而去那里。
无论如何,对代码。不是通过改变
page-break-inside:avoid
样式的行为来吹走默认实现,我们可以使用自定义HTML
属性并充分利用两个世界:并且生成一些测试的简单方法
HTML
:最后是解析代码:
完整来源.
维护默认实现 - 首先将
<table>
保持在一起,而不是分成两页:自定义实现在第二个
<table>
中保持行: