iText(夏普):带有标题和子标题的表格

时间:2015-09-23 19:59:28

标签: itextsharp itext

我正在使用iText(iTextSharp版本5.5.7),我正在创建一个PdfPTable,其中行中的数据被排序。举一个具体的例子,说我的数据看起来像这样(包括我的标题 - h1,h2和h3):

+---+---+---+
|h1 |h2 |h3 |
+---+---+---+
| A | B | C |
+---+---+---+
| A | B | D |
+---+---+---+
| A | E | F |
+---+---+---+
| K | G | H |
+---+---+---+
| K | G | I |
+---+---+---+
| K | G | J |
+---+---+---+

我已经完成了工作,然后我开始设置PdfPCell的Rowspan属性,这样我就可以避免打印重复的文本了。这也很有效,我得到的是:

+---+---+---+
|h1 |h2 |h3 |
+---+---+---+
| A | B | C |
|   |   +---+
|   |   | D |
|   +---+---+
|   | E | F |
+---+---+---+
| K | G | H |
|   |   +---+
|   |   | I |
|   |   +---+
|   |   | J |
+---+---+---+

问题是,我点击分页符,我看到的是:

+---+---+---+
|h1 |h2 |h3 |
+---+---+---+
| A | B | C |
|   |   +---+
|   |   | D |
|   +---+---+
|   | E | F |
+---+---+---+
| K | G | H |
+---+---+---+

Page Break

+---+---+---+
|h1 |h2 |h3 |
+---+---+---+
|   |   | I |
|   |   +---+
|   |   | J |
+---+---+---+

我想要的是,当第二页开始时,我希望重新打印跨越的单元格(在这种情况下' K'和' G'),以便用户知道发生了什么。

我需要的是类似于HeaderRow,但是我需要在发出行时更改标题行。

关于如何使这项工作的任何想法?

1 个答案:

答案 0 :(得分:1)

您可以为PdfPTable定义页眉(和页脚)行,但这不会解决您的问题,因为这些页眉(或页脚)行重复完整行而您只想要重复一部分。

这并不意味着您的要求无法满足。您可以通过在单元格事件中添加内容而不是将其直接添加到单元格来解决此问题。

例如:您目前添加ABKG等内容,如下所示:

PdfPCell cell = new PdfPCell(new Phrase("A"));
cell.setRowspan(3);
table.addCell(cell);

如果此单元格被拆分并分布在多个页面上,则内容"A"将仅显示在第一页上。后续页面上不会有任何内容。

您可以通过添加为其定义单元格事件的单元格来解决此问题:

PdfPCell cell = new PdfPCell();
cell.setCellEvent(new MyCellEvent("A"));
cell.setRowspan(3);
table.addCell(cell);

您现在必须编写PdfPCellEvent接口的实现并实现cellLayout方法,以便使用传递给的坐标添加内容(在本例中为"A")这个方法作为参数。

有关灵感(以及如何使我的Java代码适应.NET的想法),请参阅Can I use an iTextSharp cell event to repeat data on the next page when a row is split?