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的主要内容,如果未能解决你的问题,请参考以下文章