2014-07-03 29 views
1

我試圖在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); 
} 

我不知道我在想什麼。

感謝您的幫助,

格雷格

回答

1

您要舉報的問題不能被複制。我已經複製/粘貼你的代碼放到一個獨立的例子NestedTables和生成的PDF看起來OK:nested_tables.pdf

我看到你的問題,有兩種可能的原因:

  1. 您使用的是過時的或(更糟)非官方iText版本(誰知道這是一個非官方版本)。
  2. 您的實際代碼與您共享的代碼片段一樣瑣碎(但在這種情況下,您甚至無法編譯它)。

這些事情,在你的代碼段是不可能的:

PdfPTable outerTable = new PdfPTable(columnWidths); 
table.setTotalWidth(770F); 

你定義一個名爲outerTable變量,並在下一行設置名爲table可變寬度(即不被任何定義在你的代碼中)。

您使用:

cell = new PdfPCell(""); 

但沒有PdfPCell構造函數,它接受一個String值。

請下載the standalone example並檢查它是否適用於您。這個對我有用;如果它不適合你,你應該升級你的iText版本。

+0

嗨布魯諾,我剛剛在我的代碼中發現了一個錯字,我改變了外表的寬度,而不是設置內表的寬度。在我解決之後,一切正常。感謝您的評論。 – Greg

相關問題