iText 结合 rowspan 和 colspan - PDFPTable

Posted

技术标签:

【中文标题】iText 结合 rowspan 和 colspan - PDFPTable【英文标题】:iText combining rowspan and colspan - PDFPTable 【发布时间】:2014-07-22 07:04:13 【问题描述】:

处理日历项目并使用 iText 生成 pdf 以打印约会。我可以绘制一个带有 colspan 的单元格和一个带有 rowpan 的单元格,但我不能将它组合起来。表格的宽度为 4 个单元格。我想实现这样的目标:

(A)(B)(C)(C)

(D)(E)(C)(C)

所以 (1,1), (1,2) 和 (2,1) (2,2) 是常规单元格。但在 (1,3) 中应该有一个单元格覆盖 (1,3) (1,4) (2,3) 和 (2,4),因此 colspan 为 2,rowspan 为 2。

当前代码:

PdfPTable 表 = 新 PdfPTable(4);

PdfPCell cell = new PdfPCell(new Phrase(" 1,1 "));

table.addCell(cell);

cell = new PdfPCell(new Phrase(" 1,2 "));

table.addCell(cell);

PdfPCell cell23 = new PdfPCell(new Phrase("multi 1,3 and 1,4"));

cell23.setColspan(2);

cell23.setRowspan(2);

table.addCell(cell23);

cell = new PdfPCell(new Phrase(" 2,1 "));

table.addCell(cell);

cell = new PdfPCell(new Phrase(" 2,2 "));

table.addCell(cell);

// 2,3 和 2,4 应该被填充,因为 1,3 有 rowspan 2 和 colspan 2。

//table.completeRow(); //没有效果

但这会产生错误:

ExceptionConverter: java.io.IOException: 文档没有页面。

如果我不开始创建第二行,它只会绘制得很好(1 行,并且 (1,3) 上的单元格的 colspan 为 2。由于没有第二行,因此 rowspan(2) 没有影响。 任何帮助表示赞赏。谢谢

【问题讨论】:

【参考方案1】:

乍一看,我会说:您收到“文档没有页面”异常,因为您没有向文档添加任何内容。我没看到:

document.add(table);

在您的代码 sn-p 中的任何位置。

我已将您的代码复制/粘贴到完整示例中,并在此处发布了完整示例:ColspanRowspan。生成的 PDF 看起来像 this:

这似乎是期望的行为。我只能想到两个不同之处:(1)您忘记添加实际表格(这是我最初的回答),或者(2)您使用的是强大的 iText 旧版本,其中不完全支持行跨度。

【讨论】:

这只是一个 sn-p,我稍后会这样做。正如我所说,如果我将第二行排除在外,则总体结构没有问题。它只是添加给我带来问题的第二行。 在根据您的代码编写概念证明后,我更新了答案。 谢谢。我猜这是版本,因为我 100% 确定 document.add(table) - 我只是注释掉了 sn-p 中的第 2 行,然后它就显示出来了。由于很紧急,我不得不切换到低级 API 绘图,但很高兴看到它确实按我预期的那样工作。

以上是关于iText 结合 rowspan 和 colspan - PDFPTable的主要内容,如果未能解决你的问题,请参考以下文章

怎么动态的rowspan合并行

html表单元素的colspan和rowspan

iText7高级教程之PDF与区块链——1.总览

iText7高级教程之PDF与区块链——1.总览

Xamarin表单中的RowSpan和ColumnSpan

使用 rowspan 和 colspan 解析表