我为我的iText表设置了一个标题,其中包含6列,后来我想对另一个表使用相同的标题并将colspans设置为更通用,但是那一行没有工作了
这是我的原始(工作)代码,包含6列:
public static PdfPTable createHeaderContent() {
PdfPTable table = new PdfPTable(6);
table.setWidthPercentage(100);
PdfPCell dobicell = new PdfPCell();
dobicell.setColspan(2);
dobicell.addElement(new Phrase(docType, DOBIFONTADR));
dobicell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.TOP);
table.addCell(dobicell);
dobicell = new PdfPCell();
dobicell.setColspan(2);
dobicell.addElement(new Phrase("Ing. Mario J. Schwaiger", DOBIFONTADR));
dobicell.setBorder(Rectangle.TOP);
table.addCell(dobicell);
dobicell = Dobilogo.getPiccell(92, 104);
dobicell.setBorder(Rectangle.TOP | Rectangle.RIGHT);
dobicell.setColspan(3);
dobicell.setRowspan(2);
table.addCell(dobicell);
dobicell = getKundenCol(kunde);
dobicell.setColspan(2);
dobicell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
table.addCell(dobicell);
dobicell = getUserCell(user);
dobicell.setColspan(2);
table.addCell(dobicell);
table.setHeaderRows(1);
return table;
}
"通用"的修改代码几乎是一样的:
public static PdfPTable createHeaderContent(int[] coldist) {
PdfPTable table = new PdfPTable(coldist[0] + coldist[1] + coldist[2]); //createHeaderContent(new int[]{4, 7, 4, 4, 7});
table.setWidthPercentage(100);
PdfPCell dobicell = new PdfPCell();
dobicell.setColspan(coldist[0]); //used to be 2, now 4
dobicell.addElement(new Phrase(doctype, DOBIFONTADR));
dobicell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.TOP);
table.addCell(dobicell);
dobicell = new PdfPCell();
dobicell.setColspan(coldist[1]); //used to be 2, now 7
dobicell.addElement(new Phrase("Ing. Mario J. Schwaiger", DOBIFONTTITEL));
dobicell.setBorder(Rectangle.TOP);
table.addCell(dobicell);
dobicell = Dobilogo.getPiccell(92, 104);
dobicell.setBorder(Rectangle.TOP | Rectangle.RIGHT);
dobicell.setColspan(coldist[2]); //used to be 3, now 4
dobicell.setRowspan(2); // <--- This is fishy, but why?
table.addCell(dobicell);
dobicell = getKundenCol(kunde);
dobicell.setColspan(coldist[3]); //used to be 2, now 4
dobicell.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.BOTTOM);
table.addCell(dobicell);
dobicell = getUserCell(user);
dobicell.setColspan(coldist[4]); //used to be 2, now 7
table.addCell(dobicell);
table.setHeaderRows(1);
return table;
}
起初我假设另一行隐藏并使用了dobicell.setRowspan(3);
,但这已经改变了第一个数据行。尝试添加另一个单元格会将其放在标题之后的第一行。
奇怪的是,当我将最后一部分的用户单元扩展到整个行的单元格时,消失了。
这个问题是否存在解决方案或原因?
答案 0 :(得分:1)
这里有两个问题,一个是iText似乎忽略的问题,另一个是导致问题的问题:
在原始代码中,单元格需要7列,因为它们连续两次setColspan(2)
和setColspan(3)
。但该表仅为6列构建:new PdfPTable(6)
。
iText似乎忽略了这里缺少的列......
代码将第一行声明为表格的标题:table.setHeaderRows(1)
。这与第一行中最后一个单元格的声明冲突,跨越2行setRowspan(2)
。
这里的iText忽略了标题行中的rowspan,导致出现不希望的外观。
要解决此问题,请不要声明行间距或使用至少两行的行间距(如果有足够的行将会跟进)。
OP在评论中确认了
在修改后的版本中,我仍然有
setHeaderRows(1)
。用setHeaderRows(2)
替换它解决了问题