2009-07-03 243 views
2

我正在編寫生成PDF和RTF文檔的代碼,具體取決於用戶的選擇。這兩份文件中的信息都是一樣的。到目前爲止,我們使用Table,Cell,HeaderFooter等類,這些類被documentwriter(PdfWriter或RtfWriter2)渲染成正確的形式。PdfpTable與表(與SimpleTable?)

但是,我進一步嘗試進行更改(主要是因爲升級到iText 2.1使間隔有點古怪),我被告知「使用PdfpTable」的次數越多,或「使用pageEvents設置頭」。看起來好像很多泛型類都被棄用了。

我正在考慮修改代碼以分離PDF和RTF的表格創建。然而,所有的iText教程的東西似乎實際上推薦使用表格在需要PDF和RTF文件的情況下。

此外,看起來雖然有一個PdfpTable類,但沒有類似的RTF,所以我會使用Table,這會讓我容易受到現在不支持的Table類出現的所有怪癖。

基本上,將代碼分成兩個部分有什麼好處/缺點 - 一個用於創建PDF文檔,另一個用RTF格式創建相同的文檔(如果選擇了該文檔)? SimpleTable在哪裏進入到這一切?它會給我我需要的靈活性嗎?

謝謝!

回答

6

從書的iText在行動,第6章的結尾:

如果你看一下iText的API,您還可以找到一些其他表類。 com.lowagie.text.Table是原始表類;它從早期的iText日期開始計算。它在內部使用類com.lowagie.text.pdf.PdfTable將表格呈現爲PDF(請勿將此類與PdfPTable混淆)。
還有更新的SimpleTable類,它試圖形成 PdfPTable之間的聯繫。如果您將其添加到編寫PDF的 文檔或如果您正在生成HTML或RTF,則將其添加到,則它能夠將其自身翻譯爲PdfPTable。 [...]
類的主要缺點是不再支持。不同的 人已經修復了大部分已知問題,但是今天沒有一個人瞭解所有表方法是否以及如何工作。如果你決定使用這個課程,你自己或多或少地使用這個課程,並且你會在歷史設計決策的基礎上遇到很多古怪的佈局問題 。但是,這並不意味着你不能使 良好的使用類。 Table類

隨着表類的

優勢,您可以生成在 PDF,RTF,HTML和呈現的表結構。如果您比較結果,則會看到表格呈現方式中存在小差異 。這個是正常的;不是每個表格功能都支持 每種文檔格式。

  1. 您可以使用相同的代碼生成PDF,HTML或RTF表格。
  2. 您可以設置填充和間隔的方式在HTML中完成。
  3. 您可以使用行跨度而不必求助於嵌套表。
  4. 即使添加了單元格,也可以更改列數。
  5. 您可以在特定位置添加單元格(動態增加行數 )。
  6. 在將表格添加到文檔之前,您可以刪除一列。
  7. 您可以讓iText添加好像它是PdfPTable
  8. 您收到PdfPTable對象基於對象。

與PdfPTable相反,您可以按隨機順序向表中添加單元格,並添加 或刪除列(如果需要)。如果你的 沒有使用setRowspan(),你甚至可以把Table轉換爲PDFPDF。

另外還有SimpleTable,類,它是(PdfP)的簡化版本 - 。當向PDF文檔添加SimpleTable時,iText首先嚐試將 表添加爲PdfPTable;如果失敗,則將其添加爲。在向RTF或HTML文檔添加SimpleTable時,它將作爲添加。 SimpleTable不同 表PdfPTable從意義上講它重新引入了行的概念。 如果您正在解析具有表格 - 行 - 單元格結構的XML文件,這可能非常方便。 如果與行對應的標籤具有屬性,則不必爲行中的每個單元單獨定義此 屬性;您可以一次爲整個行設置屬性。

摘要

PdfPTable應該是您的第一選擇;但根據您的項目定義的要求,可能有充足的理由選擇SimpleTable