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