Itext 行间距单元格中的文本在分页符上分页符

Itext 行间距单元格中的文本在分页符上分页符,itext,Itext,我正在使用iText 5.5.4生成pdf 我有一堆行,这些行应该分组在一起,并有一个rowspan单元格来命名组。但是,在分页符上,“GRP”一词被分成了“G” 及"RP。有没有一种方法可以使组不可拆分,以便在当前页面无法容纳时可以在下一页上绘制 我尝试了keeprowstothere和setBreakpoints,但没有得到一致的结果 ------------------- | G | row 1 | | R | row 2 | | P | row 3 |

我正在使用iText 5.5.4生成pdf

我有一堆行,这些行应该分组在一起,并有一个rowspan单元格来命名组。但是,在分页符上,“GRP”一词被分成了“G” 及"RP。有没有一种方法可以使组不可拆分,以便在当前页面无法容纳时可以在下一页上绘制

我尝试了
keeprowstothere
setBreakpoints
,但没有得到一致的结果

-------------------
| G |    row 1    |
| R |    row 2    |
| P |    row 3    |
-------------------

布局图像:

Document document = new Document(new Rectangle(300, 125));
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
document.add(new Paragraph("Table with setSplitLate(true):"));
PdfPTable table = new PdfPTable(2);
table.setWidths(new float[]{1,5});
table.setSpacingBefore(10);
PdfPCell cell = new PdfPCell();
cell.addElement(new Paragraph("G"));
cell.addElement(new Paragraph("R"));
cell.addElement(new Paragraph("O"));
cell.addElement(new Paragraph("U"));
cell.addElement(new Paragraph("P"));

//PdfPCell cell = new PdfPCell( new Phrase("GROUP"));
//cell.setNoWrap(true);
//cell.setRotation(90);
//cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
//cell.setHorizontalAlignment(Element.ALIGN_CENTER);

cell.setRowspan(5);
table.addCell(cell);
table.addCell("row 1");
table.addCell("row 2");
table.addCell("row 3");
table.addCell("row 4");
table.addCell("row 5");
document.add(table);
document.add(new Paragraph("Table with setSplitLate(false):"));
table.setSplitLate(false);
document.add(table);
document.close();


由于您在StackOverflow上发布问题时没有提供任何强制性的代码(除非您对获得答案不感兴趣),因此我尝试编写一个示例来重现(不希望的)结果

我没有成功。见我的:

我没有真正使用
setSplitLate(true)true
。结果如下所示:

由于包含GRP的单元格不适合该页,因此表被转发到下一页(这正是您想要的)

当然,使用
setSplitLate(false)
时不会发生这种情况:

在这种情况下,包含GRP的单元被拆分:


基于您的问题中共享的稀缺信息,我假设您有一行
table.setSplitLate(false)代码中的某个地方。如果是,请将其移除。如果没有,请分享您的代码。

由于您在StackOverflow上发布问题时没有提供任何强制性的代码(除非您对获得答案不感兴趣),因此我尝试编写一个示例来重现(不希望的)结果

我没有成功。见我的:

我没有真正使用
setSplitLate(true)true
。结果如下所示:

由于包含GRP的单元格不适合该页,因此表被转发到下一页(这正是您想要的)

当然,使用
setSplitLate(false)
时不会发生这种情况:

在这种情况下,包含GRP的单元被拆分:


基于您的问题中共享的稀缺信息,我假设您有一行
table.setSplitLate(false)代码中的某个地方。如果是,请将其移除。如果没有,请共享您的代码。

我更新了您共享的代码,以重现我面临的问题。注释部分是我如何将文本添加到行跨距单元格中。请告诉我您是否能够使用代码示例重现该问题。我没有使用“setSplitLate”标志。我想要的是,如果组名不能放在当前页面上,请在下一页绘制它。组的组名和行数是从数据源动态获取的。您好,我查看了我的代码,但犯了一个错误。我分享的例子很糟糕,因为它无法与下一页的表格相匹配。我的代码的问题是因为有多个级别的表。外部表不能完全放在一个页面上,因此无论内部表中的数据是否可以放在下一个页面上,它都会按照给定页面上的空间进行破坏。一旦我移除了外表,对布局做了一些轻微的更改,它就可以正常工作了。我更新了您共享的代码,以重现我面临的问题。注释部分是我如何将文本添加到行跨距单元格中。请告诉我您是否能够使用代码示例重现该问题。我没有使用“setSplitLate”标志。我想要的是,如果组名不能放在当前页面上,请在下一页绘制它。组的组名和行数是从数据源动态获取的。您好,我查看了我的代码,但犯了一个错误。我分享的例子很糟糕,因为它无法与下一页的表格相匹配。我的代码的问题是因为有多个级别的表。外部表不能完全放在一个页面上,因此无论内部表中的数据是否可以放在下一个页面上,它都会按照给定页面上的空间进行破坏。它的工作很好,一旦我删除了外部的表略有改变布局。
document.add(new Paragraph("Table with setSplitLate(true):"));
PdfPTable table = new PdfPTable(2);
table.setSpacingBefore(10);
PdfPCell cell = new PdfPCell();
cell.addElement(new Paragraph("G"));
cell.addElement(new Paragraph("R"));
cell.addElement(new Paragraph("P"));
cell.setRowspan(3);
table.addCell(cell);
table.addCell("row 1");
table.addCell("row 2");
table.addCell("row 3");
document.add(table);
document.add(new Paragraph("Table with setSplitLate(false):"));
table.setSplitLate(false);
document.add(table);