3

我正在编写生成 PDF 和 RTF 文档的代码,具体取决于用户的选择。两份文件中的信息是相同的。

到目前为止,我们一直在使用 Table、Cell、HeaderFooter 等类,这些类由文档编写器(PdfWriter 或 RtfWriter2)呈现为正确的形式。

但是,我越是尝试进行更改(主要是因为升级到 iText 2.1 使间距有点古怪),我被告知“使用 PdfpTable”或“使用 pageEvents 设置标题”的次数越多。似乎很多通用类都被弃用了。

我正在考虑修改代码以分离出 PDF 和 RTF 的表格创建。但是,所有 iText 教程内容似乎实际上都建议在需要 PDF 和 RTF 文档的情况下使用 Table。

此外,似乎虽然有 PdfpTable 类,但 RTF 没有类似的东西,所以无论如何我都会使用 Table,这会使我容易受到现在不受支持的 Table 类所带来的所有怪癖的影响。

基本上,将代码分成两部分的好处/缺点是什么 - 一个用于创建 PDF 文档,另一个以 RTF 格式创建相同的文档(如果已选择)?而 SimpleTable 在这一切中的作用是什么?它会给我所需的灵活性吗?

谢谢!

4

1 回答 1

7

来自iText In Action一书,第 6 章结尾:

如果您查看 iText API,您还会发现其他一些表类。com.lowagie.text.Table是原始表格类;它可以追溯到早期的 iText 时代。它在内部使用com.lowagie.text.pdf.PdfTable类将表格呈现为 PDF(不要将此类与PdfPTable混淆)。
还有较新的SimpleTable类,它试图在 PdfPTableTable之间形成链接。如果您将其添加到编写 PDF 的文档或中(如果您正在生成 HTML 或 RTF),它能够将自身转换为PdfPTable 。[...] 的主要缺点
类是它不再受支持。不同的人已经解决了大多数已知问题,但今天没有一个人了解所有表格方法是否以及如何工作。如果你决定使用这个类,你或多或少是靠自己的,你会遇到很多基于历史设计决策的古怪布局问题。但是,这并不意味着您不能很好地利用Table类。

表类的优点

使用 Table 类,您可以生成可以以 PDF、RTF 和 HTML 呈现的表格结构。如果您比较结果,您会发现表格的呈现方式存在细微差别。这个是正常的; 并非每种文档格式都支持每种表格功能。

  1. 您可以使用相同的代码以 PDF、HTML 或 RTF 格式生成表格。
  2. 您可以像在 HTML 中那样设置填充和间距。
  3. 您可以使用行跨度而不必求助于嵌套表。
  4. 即使添加了单元格,您也可以更改列数。
  5. 您可以在特定位置添加单元格(行数动态增加)。
  6. 您可以在将表格添加到文档之前删除一列。
  7. 您可以让 iText 添加Table,就好像它是PdfPTable 一样
  8. 您将获得基于Table对象的PdfPTable对象。

与 PdfPTable 不同,您可以按随机顺序将单元格添加到表中,并在需要时添加或删除列。如果您不使用 setRowspan(),您甚至可以将 Table 转换为 PdfPTable。

还有SimpleTable类,它是 ( PdfP )- Table的简化版本。将SimpleTable添加到 PDF 文档时,iText 首先尝试将表格添加为PdfPTable;如果失败,则将其添加为Table。将SimpleTable添加到 RTF 或 HTML 文档时,它被添加为TableSimpleTable不同于TablePdfPTable从某种意义上说,它重新引入了行的概念。如果您正在解析具有表格行单元结构的 XML 文件,这会很方便。如果行对应的标签有属性,则不必为行中的每个单元格单独定义该属性;您可以一次设置整行的属性。

概括

PdfPTable应该是您的首选;但是根据为您的项目定义的要求,可能有充分的理由选择TableSimpleTable

于 2013-06-13T14:11:20.697 回答