0

我正在尝试使用 itext v5.5.3 创建一个包含大表的 pdf。

我需要 :

  • 内存管理
  • 重复标题(1 行)
  • 禁用行拆分

使用下面的代码,一切正常:

    Document document = new Document(PageSize.LETTER);
    PdfWriter.getInstance(document, baos);

    document.open();
    PdfPTable table = new PdfPTable(5);
    table.setHeaderRows(1);
    //table.setSplitRows(false);
    //table.setComplete(false);

    for (int i = 0; i < 5; i++) {table.addCell("Header " + i);}     

    for (int i = 0; i < 500; i++) {
        table.addCell("Test " + i);
        //if (i%5 == 0) {document.add(table);}
     }

    //table.setComplete(true);
    document.add(table);
    document.close();

如果我添加内存管理(每 5 个单元格添加表格到文档),我将丢失第一个标题:

    Document document = new Document(PageSize.LETTER);
    PdfWriter.getInstance(document, baos);

    document.open();
    PdfPTable table = new PdfPTable(5);
    table.setHeaderRows(1);
    //table.setSplitRows(false);
    table.setComplete(false);

    for (int i = 0; i < 5; i++) {table.addCell("Header " + i);}     

    for (int i = 0; i < 500; i++) {
        table.addCell("Test " + i);
        if (i%5 == 0) {document.add(table);}
    }

    table.setComplete(true);
    document.add(table);
    document.close();

如果我添加内存管理 + setSplitRows(false),我会丢失所有标题和一些行:

    Document document = new Document(PageSize.LETTER);
    PdfWriter.getInstance(document, baos);

    document.open();
    PdfPTable table = new PdfPTable(5);
    table.setHeaderRows(1);
    table.setSplitRows(false);
    table.setComplete(false);

    for (int i = 0; i < 5; i++) {table.addCell("Header " + i);}     

    for (int i = 0; i < 500; i++) {
        table.addCell("Test " + i);
        if (i%5 == 0) {document.add(table);}
    }

    table.setComplete(true);
    document.add(table);
    document.close();

我已经做了一些测试,使用 itext 版本 2.1.7.js2,所有三个测试用例都正常工作。

那么,错误还是非错误?我该怎么做才能使它正常工作?

谢谢

4

2 回答 2

2

如果您更换,您的问题不会出现

if (i % 5 == 0) {
    document.add(table);
}

经过

int x = 5; // or any other value higher than your PdfPTable number of columns
if (i % 10 == x) {
    document.add(table);
}

这个问题的明显原因是 iText 不想包含只有一个标题和一个部分行的表。目前这是一种解决方法,但我们正在寻找核心问题并进行修复。

于 2014-11-20T15:23:46.800 回答
1

这确实是一种回归,所以我在 iText 库中添加了针对此问题的修复程序。(修订版 6630)。

它将包含在 5.5.4 版本中,该版本将在两到三周后发布。

于 2014-12-04T11:00:16.393 回答