Java 删除页面已刷新

Java 删除页面已刷新,java,itext7,Java,Itext7,我用Excel文件中的数据创建了一个PDF文件。我不确定发生了什么,但当我试图删除一个PdfPage并将其插入其他位置时,它显示了警告消息“删除页面已刷新” 使用的代码非常简单: PdfDocument pdf = ...; .... PdfPage page = pdf.removePage(10); pdf.addPage(1, page); 但我得到了警告和错误: [main]WARN com.itextpdf.kernel.pdf.PdfPage-删除页面已关闭 已经被冲走了。线程“m

我用Excel文件中的数据创建了一个PDF文件。我不确定发生了什么,但当我试图删除一个PdfPage并将其插入其他位置时,它显示了警告消息“删除页面已刷新”

使用的代码非常简单:

PdfDocument pdf = ...;
....
PdfPage page = pdf.removePage(10);
pdf.addPage(1, page);
但我得到了警告和错误:

[main]WARN com.itextpdf.kernel.pdf.PdfPage-删除页面已关闭 已经被冲走了。线程“main”中出现异常 com.itextpdf.kernel.PdfException:flush.page.cannot.be.added.or.inserted 在 com.itextpdf.kernel.pdf.PdfDocument.checkAndAddPage(PdfDocument.java:1473) 位于com.itextpdf.kernel.pdf.PdfDocument.addPage(PdfDocument.java:437)

老实说,我确实用其他一些PDF文件尝试了上述代码,它可以删除和插入页面。我的PDF文件可能的原因是什么

我的应用程序中使用的完整代码:

PdfWriter writer;
PdfDocument pdfDocument;
Document document;
try {
        writer = new PdfWriter(FileConfigurator.getAbsoluteResultFilePath(), 
                new WriterProperties().addXmpMetadata().setPdfVersion(PdfVersion.PDF_1_7));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

//Initialize PDF document
pdfDocument = new PdfDocument(writer);
// Initialize document
document = new Document(pdfDocument);

pdf.copyPagesTo(10,10,pdf,1);pdf.removePage(10+1)作为解决方法。也许你已经写了文件?正如在
flush=write buffer
中,而不是
flush=flush through the toilet
。基本上,这意味着在删除页面之前,您要删除的页面实际上已写入到输出流中。同一段代码可以在不同的输入上工作,但这并不能证明任何事情。iText7的默认行为是提前并经常刷新,以限制执行期间所需的内存量。异常表示该特定页面已经写入outputstream,因此不能再在代码中进行操作@Joop Eggen的代码应该会导致你想要的行为。通常,在插入和移动现有页面时,
copyPagesTo
应该是您的默认方法
将触发一个NullPointerException,我认为我们应该将它复制到另一个
topdf
中作为参数。我生成的PDF文件现在已经有60多页,里面有图片,但是仍然可以禁止刷新PDF吗?你能准确地展示你是如何创建文档的吗?我指的是您标记为
的部分。您是否使用
layout
模块中的
Document
来创建内容?
pdf.copyPagesTo(10,10,pdf,1);pdf.removePage(10+1)作为解决方法。也许你已经写了文件?正如在
flush=write buffer
中,而不是
flush=flush through the toilet
。基本上,这意味着在删除页面之前,您要删除的页面实际上已写入到输出流中。同一段代码可以在不同的输入上工作,但这并不能证明任何事情。iText7的默认行为是提前并经常刷新,以限制执行期间所需的内存量。异常表示该特定页面已经写入outputstream,因此不能再在代码中进行操作@Joop Eggen的代码应该会导致你想要的行为。通常,在插入和移动现有页面时,
copyPagesTo
应该是您的默认方法
将触发一个NullPointerException,我认为我们应该将它复制到另一个
topdf
中作为参数。我生成的PDF文件现在已经有60多页,里面有图片,但是仍然可以禁止刷新PDF吗?你能准确地展示你是如何创建文档的吗?我指的是您标记为
的部分。您是否正在使用
布局
模块中的
文档
创建内容?