java - iText:如何在新页面上重复表格单元格内容?

标签 java itext

我想生成一个包含客户订单的表。 (简化的)表格如下所示。如果客户有多个订单,我只是在客户的第一行添加客户信息。所以订单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/

相关文章:

c# - iTextSharp - 更改可选内容组的顺序

java - 在 iText 中访问 OpenType 字形变体

iText 使用 XMLWorker 将整个表格保留在一页中

java - 如何使用 iText 将 PDF 文件附加到现有文件?

java - 克隆现有数据库进行 Junit 测试的最佳方法?

Java 和 Kerberos

Java抽象类 "instance variables"

java - 与 Jackrabbit 聚类

java - Android Studio : How to get EditText values from Fragment 1 to Fragment 2 respectively on button clicked

java - iText5 PDF 内容在页脚上被覆盖