Мне нужно разделить или объединить некоторые PDF, и у меня есть несколько редких PDF, которые создают следующее исключение.
com.itextpdf.kernel.PdfException: Pdf indirect object belongs to other PDF document. Copy object to current pdf document.at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:216)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:206)
at com.itextpdf.kernel.pdf.PdfOutputStream.write(PdfOutputStream.java:112)
at com.itextpdf.kernel.pdf.PdfWriter.writeToBody(PdfWriter.java:393)
at com.itextpdf.kernel.pdf.PdfWriter.flushObject(PdfWriter.java:301)
at com.itextpdf.kernel.pdf.PdfDocument.flushObject(PdfDocument.java:1743)
at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:183)
at com.itextpdf.kernel.pdf.PdfObject.flush(PdfObject.java:152)
at com.itextpdf.kernel.pdf.PdfObjectWrapper.flush(PdfObjectWrapper.java:94)
at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:505)
at com.itextpdf.kernel.pdf.PdfPage.flush(PdfPage.java:462)
at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:847)
at testPDF.PDF.splitByPage(PDF.java:564)
at testPDF.Main.main(Main.java:153)
После небольшого поиска я обнаружил этот пост о схожей проблеме:
Itext7 генерирует PDF с исключением "Pdf косвенный объект принадлежит другому документу PDF. Копировать объектк текущему документу pdf. "
В моем случае я только разделяю и объединяю pdf, я не касаюсь содержимого pdf, поэтому я не знаю, почему происходит это исключение.(Из того, что я понял, исключение связано с проблемой копирования какого-либо шрифта).
Мой код следующий:
public static void splitByPage(File pdfToSplit, int nbPageByPDF){
try {
// Open the document in reading mode
PdfDocument pdfDoc = new PdfDocument(new PdfReader(pdfToSplit));
List<PdfDocument> splitDocuments = new PdfSplitter(pdfDoc) {
int partNumber = 1;
@Override
protected PdfWriter getNextPdfWriter(PageRange documentPageRange) {
try {
return new PdfWriter(pdfToSplit.getAbsolutePath()
.substring(0,
pdfToSplit.getAbsolutePath()
.lastIndexOf(".")
)
+ "splitPage_part"
+ String.valueOf(partNumber++)
+ ".pdf");
} catch (FileNotFoundException e) {
throw new RuntimeException();
}
}
}.splitByPageCount(nbPageByPDF);
// Close all the part created
for (PdfDocument doc : splitDocuments) {
doc.close(); // exception throws at the first closing
}
// Close the initial pdf to split
pdfDoc.close();
}
Этот код основан на следующем примере: https://developers.itextpdf.com/examples/stamping-content-existing-pdfs/clone-splitting-pdf-file
При объединении возникает та же ошибка, когда я пытаюсьзакройте новый PDF-файл, где я добавил PDF-файл, вызывающий исключения.(Но я могу сделать это по-другому. Я могу добавить другой PDF-файл (без этой проблемы) в PDF-файл с проблемой).
Я думаю, что мне нужно найти способ скопировать шрифт непосредственно изисходный pdf для каждого pdf-файла, который я создаю, но я не могу найти способ сделать это.
При необходимости я могу отправить вам конфиденциально pdf, с которым возникает ошибка, только конфиденциально, так как этот pdfнемного конфиденциально.
Заранее благодарен за любую помощь или предложение.