PDFBox как вставить страницу из донорского документа и потом закрыть донорскийJAVA

Программисты JAVA общаются здесь
Anonymous
PDFBox как вставить страницу из донорского документа и потом закрыть донорский

Сообщение Anonymous »

У меня есть конвейер обработки документов, в который мне нужно добавлять страницы из донорского документа. Все примеры, которые я нашел для клонирования страницы донора, не продолжают работать после закрытия документа донора. Мне нужно открыть донора, вытащить из него страницу, вставить ее в документ в конвейере, а затем закрыть донора (или он закрывается сам, когда выходит за рамки). Я использую PDFBox 2.0.27
Мое лучшее решение из StackOverflow 20084117

Код: Выделить всё

URL donorUrl = this.class.classLoader.getResource("files/DonorDocument.pdf")
File donorFile = new File(donorUrl.toURI());
PDDocument donorDocument = PDDocument.load(donorFile);
PDPage donorPage = donorDocument.getPage(0);

// trying to clone the page per SO 20084117
COSDictionary donorDictionary = donorPage.getCOSObject(); // they said getCOSDictionary but that is 404
COSDictionary newPageDictionary = new COSDictionary(donorDictionary);
newPageDictionary.removeItem(COSName.ANNOTS);
PDPage newPage = new PDPage(newPageDictionary);

targetDocument.addPage(newPage);

donorDocument.close();

// the following line will return a page which has been closed
targetDocument.getPage(document.numberOfPages - 1);
Я также попробовал несколько вариантов с помощью PDFCloneUtility

Код: Выделить всё

PDFCloneUtility cloner = new PDFCloneUtility(donorDocument);
COSBase clonedDOcument = cloner.cloneForNewDocument(donorPage.getCOSObject());
COSDictionary clonedDictionary = clonedDOcument as COSDictionary;
COSDictionary newPageDict = new COSDictionary(clonedDictionary);
PDPage newPage = new PDPage(newPageDict);
targetDocument.addPage(clonePage);

donorDocument.close();

// the following line will return a page which has been closed
targetDocument.getPage(document.numberOfPages - 1);
и

Код: Выделить всё

PDFCloneUtility cloner = new PDFCloneUtility(donorDocument);
PDPage clonePage = new PDPage();
cloner.cloneMerge(donorPage, clonePage);
targetDocument.addPage(clonePage);

donorDocument.close();

// the following line will return a page which has been closed
targetDocument.getPage(document.numberOfPages - 1);
редактировать: этот метод является одним из этапов конвейера приложения. Донор выбирается, открывается, добавляется, а затем метод завершает работу. Если я не закрою донорский документ в этом методе, он закроется сам, когда выйдет за пределы области действия.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -the-donor

Вернуться в «JAVA»