表 iText 5 与 iText 7 相对应
选择 iText 5 类名 PdfPTable
和 PdfPCell
是因为我们已经有了名为 Table
和 Cell
的类来创建最高编程级别的表和单元对象。iText 内部还有一个名为 PdfTable
的类。这些类有很多缺陷,他们不赞成使用 PdfPTable
和 PdfPCell
。他们很久以前就被删除了。
多年来,PdfPTable
和 PdfPCell
也受到了一些用户的批评。例如:用户不理解文本模式和复合模式之间的区别。
**** 创建像这样的 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 章。获得免费电子书!