我想生成一个包含客户订单的表。 (简化的)表格如下所示。如果客户有多个订单,我只是在客户的第一行添加客户信息。所以订单1到3属于客户1,订单4和5属于客户2
Customer | Order (header row)
-------------+--------------------------------------------
Name 1 | Item 1 (Order 1)
Street |
City |
-------------+--------------------------------------------
| Item 1 (Order 2)
| Item 2
-------------+--------------------------------------------
| Item 1 (Order 3)
-------------+--------------------------------------------
Name 2 | Item 1 (Order 4)
Street | Item 2
City | Item 3
| Item 4
-------------+--------------------------------------------
| Item 1 (Order 5)
这工作正常,除非我得到一个分页符/新页面。在这种情况下,表格将如下所示:
Customer | Order
-------------+--------------------------------------------
Name 1 | Item 1 (Order 1)
Street |
City |
-------------+--------------------------------------------
| Item 1 (Order 2)
| Item 2
### new page ###
Customer | Order
-------------+--------------------------------------------
| Item 1 (Order 3)
-------------+--------------------------------------------
Name 2 | Item 1 (Order 4)
Street | Item 2
City | Item 3
| Item 4
-------------+--------------------------------------------
| Item 1 (Order 5)
但我希望在新页面的第一个客户单元格中重复客户 1,所以它看起来像这样:
Customer | Order
-------------+--------------------------------------------
Name 1 | Item 1 (Order 1)
Street |
City |
-------------+--------------------------------------------
| Item 1 (Order 2)
| Item 2
### new page ###
Customer | Order
-------------+--------------------------------------------
Name 1 | Item 1 (Order 3)
Street |
City |
-------------+--------------------------------------------
Name 2 | Item 1 (Order 4)
Street | Item 2
City | Item 3
| Item 4
-------------+--------------------------------------------
| Item 1 (Order 5)
我认为填充单元格可以通过组合页面/单元格事件来完成,但这需要将所有客户单元格的最小高度设置为已填充客户单元格的高度,因为我不知道什么时候/新页面将出现的位置。如果我有大客户单元和小订单单元,这会浪费很多空间。 任何想法,我如何构建一个像上面的表格并在分页符/新页面后重复某个单元格的内容?
最佳答案
我最近偶然发现了同样的问题。您可以使用 IText 的 afterSplitTable 来实现此目的事件。
public void afterSplitTable(PdfPTable table, PdfPRow startRow, int startIdx) {
// Get the previous value
Phrase previous = table.getRow(startIdx - 1).getCells()[0].getPhrase();
// The cell to add the previous value in
PdfPCell newCell = table.getRow(startIdx).getCells()[0];
// Check if the new cell is empty to prevent overwriting some content
if (newCell.getPhrase().getContent() == ""){
// set the phrase of the new cell to the phrase of the previous one
newCell.setPhrase(previous);
}
}
关于java - iText:如何在新页面上重复表格单元格内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216508/