iText 5 getDefaultCell().setBorder(PdfPCell.NO_BORDER)无效

Mat*_*cht 3 java itext

我是iText的新手,我正在尝试构建一个表.但由于某些原因table.getDefaultCell().setBorder(PdfPCell.NO_BORDER)没有效果,我的桌子还有边框.

这是我的代码:

PdfPTable table = new PdfPTable(new float[] { 1, 1, 1, 1, 1 });
table.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
Font tfont = new Font(Font.FontFamily.UNDEFINED, 10, Font.BOLD);
table.setWidthPercentage(100);
PdfPCell cell;
cell = new PdfPCell(new Phrase("Menge", tfont));
table.addCell(cell);
cell = new PdfPCell(new Phrase("Beschreibung", tfont));
table.addCell(cell);
cell = new PdfPCell(new Phrase("Einzelpreis", tfont));
table.addCell(cell);
cell = new PdfPCell(new Phrase("Gesamtpreis", tfont));
table.addCell(cell);
cell = new PdfPCell(new Phrase("MwSt", tfont));
table.addCell(cell);
document.add(table);
Run Code Online (Sandbox Code Playgroud)

你知道我做错了什么吗?

Bru*_*gie 7

你混合了两个不同的概念.

概念1:PdfPCell手动定义每个,例如:

PdfPCell cell = new PdfPCell(new Phrase("Menge", tfont));
cell.setBorder(Rectangle.NO_BORDER);
table.addCell(cell);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以定义单元格本身的每个方面,单元格的每个属性.

概念2:您允许iText PdfPCell隐式创建,例如:

table.addCell("Adding a String");
table.addCell(new Phrase("Adding a phrase"));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以在默认单元格的级别定义属性.当iText PdfPCell在您的位置创建时,这些属性将在内部使用.

结论:

您可以PdfPCell单独为所有实例定义边框,也可以让iText创建PdfPCell实例,在这种情况下,您可以在默认单元格的级别定义边框.

如果您选择第二个选项,则可以像这样调整代码:

PdfPTable table = new PdfPTable(new float[] { 1, 1, 1, 1, 1 });
table.getDefaultCell().setBorder(PdfPCell.NO_BORDER);
Font tfont = new Font(Font.FontFamily.UNDEFINED, 10, Font.BOLD);
table.setWidthPercentage(100);
table.addCell(new Phrase("Menge", tfont));
table.addCell(new Phrase("Beschreibung", tfont));
table.addCell(new Phrase("Einzelpreis", tfont));
table.addCell(new Phrase("Gesamtpreis", tfont));
table.addCell(new Phrase("MwSt", tfont));
document.add(table);
Run Code Online (Sandbox Code Playgroud)

这个决定是根据经验通过设计做出的:它提供了最灵活的细胞和特性.