I've created a method like this:
public PdfDocument addBlankPage(final MediaModel pdfDocument) throws IOException {
final InputStream inputStream = mediaService.getStreamFromMedia(pdfDocument);
byte[] bytes = IOUtils.toByteArray(inputStream);
final PdfReader reader = new PdfReader(new ByteArrayInputStream(bytes));
final PdfWriter writer = new PdfWriter(pdfDocument.getRealFileName());
final PdfDocument document = new PdfDocument(reader, writer);
int index = document.getNumberOfPages();
final PageSize ps = new PageSize(document.getFirstPage().getPageSize());
document.addNewPage(index + 1, ps);
reader.close();
writer.close();
return document;
}
In order to add a new blank page to a PdfDocument and it looks fine and its "seems" to work. However , when I try to merge a PdfDocument with a blank page (added by my method) with other existing pdf documents in this method:
public .... {
ByteArrayOutputStream mergedPdfStream = new ByteArrayOutputStream();
PdfDocument mergedPdf = new PdfDocument(new PdfWriter(mergedPdfStream));
for (PdfDocument doc : pdfDocuments) {
int n = doc.getNumberOfPages();
for (int i = 1; i <= n; i++) {
PdfPage page = doc.getPage(i).copyTo(mergedPdf);
mergedPdf.addPage(page);
}
}
....
}
It throws :
com.itextpdf.kernel.PdfException: Cannot copy indirect object from the document that is being written.
at com.itextpdf.kernel.pdf.PdfObject.copyTo(PdfObject.java:318) ~[kernel-7.1.1.jar:?]
at com.itextpdf.kernel.pdf.PdfDictionary.copyTo(PdfDictionary.java:443) ~[kernel-7.1.1.jar:?]
at com.itextpdf.kernel.pdf.PdfPage.copyTo(PdfPage.java:379) ~[kernel-7.1.1.jar:?]
at com.itextpdf.kernel.pdf.PdfPage.copyTo(PdfPage.java:364) ~[kernel-7.1.1.jar:?]
I googled it and I didn't found any relevant information . Any hint ?
PD: I'm 100% sure that my method is the guilty , because when I merge other PDFs without using the blank Page method , it always works..