javaitext:如何在新页面上重复表单元格内容?
我想生成一个包含客户订单的表。(简化的)表格如下所示。如果客户有多个订单,我只需将客户信息添加到客户的第一行。因此,订单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)
但我希望在新页面的第一个customer单元格中重复customer 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)
我认为填充单元格可以通过组合页面/单元格事件来完成,但这需要将所有客户单元格的最小高度设置为填充的客户单元格的高度,因为我不知道新页面将在何时/何地出现。如果我有大客户单元格和小订单单元格,这将浪费大量空间。 有什么想法吗?我如何建立一个像上面那样的表格,并在分页符/新页面后重复某个单元格的内容
# 1 楼答案
我最近也遇到了同样的问题。可以通过使用IText的afterSplitTable事件来实现这一点
# 2 楼答案
我找到了一个可能的解决方案(对于iText 5.1+):
ColumnText
ColumnText.go()
将表写入文档李>go()
之后,获取通过ColumnText.getRowsDrawn()
写入的行数PdfPTable
(使用与原始表相同的设置)ColumnText.getRowsDrawn()
到原始表末尾的所有行按单元格复制到新表。现在我可以用需要的数据替换第一行的第一个空单元格李>ColumnText.setText(null)
从列文本中删除原始表ColumnText
别忘了用副本替换“原始”表,否则你会得到一个无限循环。在添加任何内容之前,不要忘记先从原始行复制和设置任何页眉或页脚行