我正在尝试使用带有iText的嵌套表。我收到了一个DocumentException:
表格宽度必须大于零。
外表有16列。我调用一个传入外表的方法。此方法添加两个内部表。如果我添加其中一个内部表,它可以正常工作。如果我添加第二个内部表,我将获得从PdfPTable.writeSelectedRows方法抛出的异常。
private final float[] columnWidths = {183, 31, 88, 49, 35, 25, 35, 35, 35, 32, 32, 33, 35, 60, 46, 26 };
public void buildPdfReport(ByteArrayOutputStream out) {
Document document;
PdfWriter pdfWriter;
document= new Document(PageSize.LETTER.rotate(), 2, 2, 5, 2);
pdfWriter = PdfWriter.getInstance(document, out);
document.open();
PdfPTable outerTable = new PdfPTable(columnWidths);
table.setTotalWidth(770F);
table.setLockedWidth(true);
buildNestedTables(table);
document.add(outerTable);
document.newPage();
document.close();
pdfWriter.close();
}
private void buildNestedTables(PdfPTable outerTable) {
PdfPTable innerTable1 = new PdfPTable(1);
PdfPTable innerTable2 = new PdfPtable(2);
PdfPCell cell;
innerTable1.addCell("Cell 1");
innerTable1.addCell("Cell 2");
outerTable.addCell(innerTable1);
innerTable2.addCell("Cell 3");
innerTable2.addCell("Cell 4");
outerTable.addCell(innerTable2);
cell = new PdfPCell("");
cell.setColspan(14);
outerTable.addCell(cell);
}
我不确定我错过了什么。
感谢您的帮助,
格雷格
答案 0 :(得分:1)
您报告的问题无法复制。我已将您的代码复制/粘贴到一个独立的示例NestedTables中,生成的PDF看起来没问题:nested_tables.pdf
我发现了两个可能导致问题的原因:
这些内容在您的代码段中是不可能的:
PdfPTable outerTable = new PdfPTable(columnWidths);
table.setTotalWidth(770F);
您定义了一个名为outerTable
的变量,并在下一行中设置名为table
的变量的宽度(不会在代码中的任何位置定义)。
您使用:
cell = new PdfPCell("");
但是没有PdfPCell
构造函数接受String
值。
请下载the standalone example并检查它是否适合您。这个对我有用;如果它不适合你,你应该升级你的iText版本。