【问题标题】:Itext LargeElement and splitRows optionItext LargeElement 和 splitRows 选项
【发布时间】:2014-11-06 08:08:26
【问题描述】:

我正在尝试使用 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,所有三个测试用例都可以正常工作。

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

谢谢

【问题讨论】:

    标签: java pdf-generation itext pdfptable


    【解决方案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 不想包含一个只有一个标题和一个部分行的表格。目前这是一种解决方法,但我们正在寻找核心问题并加以解决。

    【讨论】:

    • 解决方法有效,但我会接受官方修复响应。谢谢
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-24
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多