Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 行范围内的IText table.deleteBodyRow()会导致错误_Java_Itext - Fatal编程技术网

Java 行范围内的IText table.deleteBodyRow()会导致错误

Java 行范围内的IText table.deleteBodyRow()会导致错误,java,itext,Java,Itext,我正在尝试创建一个RightHost列跨越多行的表 我使用cell.setRowspan(numorrows)实现这一点 我必须在页面末尾显示一些列值的总和。为此,我创建了一个页面事件,并在触发这些事件时将当前总值打印到页脚。为了在页面末尾获得正确的总和,我在每行之后调用下面的代码块 table.addCell(...) .... document.add(table); table.deleteBodyRows(); .... 通过这种方式,如果到达页面末尾,它将触发一个事件,我可以将正确的

我正在尝试创建一个RightHost列跨越多行的表

我使用
cell.setRowspan(numorrows)实现这一点

我必须在页面末尾显示一些列值的总和。为此,我创建了一个页面事件,并在触发这些事件时将当前总值打印到页脚。为了在页面末尾获得正确的总和,我在每行之后调用下面的代码块

table.addCell(...)
....
document.add(table);
table.deleteBodyRows();
....
通过这种方式,如果到达页面末尾,它将触发一个事件,我可以将正确的总和值写入页脚

问题是,当我在一行范围内调用
table.deleteBodyRows()
时,代码给出
java.lang.ArrayIndexOutOfBoundsException:-1

我找不到解决这个问题的办法。我有没有遗漏什么,或者有没有其他方法来达到这个要求


下面是一个示例代码块(一些大于SSCCE):

publicstaticvoidmain(字符串[]args)引发异常{
整数总和=0;
文档=新文档();
getInstance(文档,新文件输出流(“c:/sample.pdf”);
document.open();
PdfPTable=新的PdfPTable(3);
表.setWidths(新的int[]{1,1,1});
table.setTotalWidth(document.right()-document.left());
表2.setLockedWidth(真);
对于(int j=0;j<10;j++){
table.getDefaultCell().setRowspan(20);
表.addCell(新短语(“跨越行:“+j”);
table.getDefaultCell().setRowspan(1);
对于(int i=0;i<20;i++){
表.addCell(新短语(“行数:+i”);
表.addCell(新短语(“废话…”);
文件。添加(表);
table.deleteBodyRows();
totalSum+=i;//如果发生分页符,我将把当前的totalSum写入页脚
}
}
文件。添加(表);
document.close();
}

我只想在每行后面写下表格的内容,以便理解页面的结尾…

您使用的是哪个版本的iText?在最新的版本中已经应用了很多修复程序,我使用的是itextpdf-5.1.3.jar。在您的评论之后,我将其更改为最新的5.4.4,但仍然失败。。。我在这里发帖是因为我无法决定它是否是一个bug。因为我使用的是行跨度,所以我想将跨度行分成两页。您能提供一个SSCCE吗?我用一个示例修改了内容在准备一些示例时,我意识到问题与分页符无关,而是语句:
table.deleteBodyRows()。我相应地修改了问题和标题。。。
public static void main(String[] args) throws Exception {
    int totalSum = 0;
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream("c:/sample.pdf"));
    document.open();

    PdfPTable table = new PdfPTable(3);
    table.setWidths(new int[]{1,1,1});
    table.setTotalWidth(document.right() - document.left());
    table.setLockedWidth(true);
    for (int j = 0; j < 10; j++) {
        table.getDefaultCell().setRowspan(20);
        table.addCell(new Phrase("Spanning Row : "+j));
        table.getDefaultCell().setRowspan(1);
        for (int i = 0; i < 20; i++) {
            table.addCell(new Phrase("Row Num : "+i));  
            table.addCell(new Phrase("Blah blah..."));
            document.add(table);
            table.deleteBodyRows();
            totalSum += i;  // if the page break occures i'll write current totalSum to the footer
        }
    }
    document.add(table);

    document.close();
}