表 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 章。獲得免費電子書!