表 iText 5 与 iText 7 相对应

选择 iText 5 类名 PdfPTablePdfPCell 是因为我们已经有了名为 TableCell 的类来创建最高编程级别的表和单元对象。iText 内部还有一个名为 PdfTable 的类。这些类有很多缺陷,他们不赞成使用 PdfPTablePdfPCell。他们很久以前就被删除了。

多年来,PdfPTablePdfPCell 也受到了一些用户的批评。例如:用户不理解文本模式复合模式之间的区别。

**** 创建像这样的 PdfPCell 时使用文本模式

cell = new PdfPCell(new Phrase("Cell with rowspan 2"));

在这种情况下,你可以定义属性,例如 PdfPCell 级别的水平对齐。

**** 使用 addElement() 方法时,复合模式会启动:

cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));

在这种情况下,忽略在 PdfPCell 级别定义的某些属性(例如水平对齐)。水平对齐将在添加到单元格的元素级别定义。例如:如果要创建一个单元格,其中不同的段落需要具有不同的水平对齐方式,你将切换到复合模式。

如果你查看使用 iText 5 示例创建的表格的屏幕截图,你会注意到具有内容 Cell 1.1 (以文本模式添加)和 Cell 1.2 (以复合模式添加 )的单元格的排列方式完全不同。

在回答对奇数对齐的批评时,我们介绍了使用上升和下降信息的方法。我们将这些方法用于具有内容 Cell 2.1 (以文本模式添加)和 Cell 2.2 (以复合模式添加 )的单元格。我们还为这些单元格引入了 5 的填充。

现在结果好多了。

我们在 iText 7 中修复了什么:

由于我们从头开始创建 iText 7,因此我们没有遗留类,其中包含我们无法重用的名称。我们推出了新的 Table 和新的 Cell 级。

没有更多的文本模式,也没有更多的复合模式。创建 Cell 或者没有参数,或者使用定义 rowspan 和 colspan 的参数创建。所有内容都以相同的方式添加:使用 add() 方法。

我们的客户也要求提供区分边距和填充的方法。在 iText 7 示例中,我们添加了灰色背景以显示差异。在具有内容单元格 2.1 的单元格中,我们定义了 5 个用户单位的边距。默认填充为 2.在包含内容单元格 2.2 的单元格中,我们定义了 5 个用户单位的填充,默认边距为 0。

从屏幕截图中可以看出,单元格渲染得非常好。我们没有必要使用方法来设置上升器或下降器。默认行为更接近开发人员期望的行为。

想进一步了解 iText 7 中的表格和单元格?

阅读添加 AbstractElement 对象(第 2 部分) ,这是 iText 7:Building Blocks 教程的第 5 章。获得免费电子书!