Страница удаления уже очищена

Я создал файл PDF с данными из файла Excel. Я не уверен, что произошло, но когда я попытался удалить одну PdfPage и вставить ее в другое место, появилось предупреждающее сообщение «Удаляемая страница уже очищена».

Используемый код довольно прост:

PdfDocument pdf = ...;
....
PdfPage page = pdf.removePage(10);
pdf.addPage(1, page);

Но я получил предупреждение и ошибки:

[основная] ПРЕДУПРЕЖДЕНИЕ com.itextpdf.kernel.pdf.PdfPage — Страница удаления уже очищена. Исключение в потоке "основной" com.itextpdf.kernel.PdfException:flushed.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);

person cao    schedule 19.09.2016    source источник
comment
pdf.copyPagesTo(10, 10, pdf, 1); pdf.removePage(10+1); как обходной путь. Может быть, вы уже написали документ? Как в flush = write buffer вместо flush = flushed through the toilet.   -  person Joop Eggen    schedule 19.09.2016
comment
По сути, это означает, что до удаления страницы удаляемая страница фактически записывалась в выходной поток. Один и тот же фрагмент кода может работать на разных входных данных, но это ничего не доказывает.   -  person Antoniossss    schedule 19.09.2016
comment
Поведение по умолчанию для iText7 заключается в ранней и частой очистке, чтобы ограничить объем памяти, необходимый во время выполнения. Исключение означает, что эта конкретная страница уже была записана в выходной поток и поэтому больше не может манипулироваться в коде. Код @Joop Eggen должен привести к желаемому поведению. Как правило, при вставке и перемещении существующих страниц copyPagesTo должен быть методом по умолчанию.   -  person Samuel Huylebroeck    schedule 19.09.2016
comment
pdf.copyPagesTo(10, 10, pdf, 1); вызовет исключение NullPointerException, я думаю, мы должны скопировать его в другой topdf для параметра. В моем сгенерированном PDF-файле сейчас уже более 60 страниц с картинками внутри, но все же можно ли запретить сбрасывать PDF?   -  person cao    schedule 20.09.2016
comment
Можете ли вы показать, как именно вы создаете свой документ? Я имею в виду ту часть, которую вы пометили как .... Вы используете Document из модуля layout для создания контента?   -  person Alexey Subach    schedule 02.02.2017
comment
Я думаю, что нашел проблему: проблема с сбросом возникнет, если у меня много страниц TOC (у меня 6 страниц TOC в моем PDF-файле); но когда я попытался уменьшить количество страниц оглавления до 2, программа работает как задумано.   -  person cao    schedule 18.04.2017