首页 文章

Itext LargeElement和splitRows选项

提问于
浏览
0

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

我需要 :

  • 内存管理

  • 重复 Headers (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个单元格添加一个表格),我将失去第一个 Headers :

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),我会丢失所有 Headers 和一些行:

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,所有三个测试用例都正常工作 .

那么,bug还是没有bug?我该怎么做才能使这个工作?

谢谢

2 回答

  • 2

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

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

  • 1

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

    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不希望包含只有 Headers 和一个部分行的表 . 目前这是一种解决方法,但我们正在寻找核心问题并进行修复 .

相关问题