Привет, коллеги!
Подскажите, как правильно реализовать такую схему:
- В одной форме Edit парсится pdf файл.
- Кроме всего прочего из pdf выдергиваются картинки. После ряда преобразований картинка из pdf бывает byte[], BufferedImage или InputStream.
- Если картинок несколько вызывается вспомогательная форма в которой предлагается выбрать одну картинку.
- Далее картинка возвращается в исходную форму и надо ее записать в сущность.
На этапе парсинга все работает и изображение из Image вспомогательной формы в которой мы выбираем “правильное” изображение из списка что нашлось в pdf, попадает в основную. Но когда записываешь основную форму в сущность, то при последующем просмотре сущности картинки там не оказывается в Image.
Вот код парсинга в основной форме:
List<RenderedImage> images = new ArrayList<>();
textResume = parsePdfCV(inputStream);
RandomAccessRead rad = new RandomAccessReadBuffer(fileLoader.openStream(fileDescriptor));
PDFParser parser = new PDFParser(rad);
PDDocument pdDoc = parser.parse();
// тут нашли страницы в pdf и ц цикле поместили
for (PDPage page : pdDoc.getPages()) {
images.addAll(getImagesFromResources(page.getResources()));
}
if (images.size() > 1) {
// это вызов вспомогательной формы в которой выбираем из всех картинок найденных в pdf одну
SelectRenderedImagesFromList selectRenderedImagesFromList =
screens.create(SelectRenderedImagesFromList.class);
selectRenderedImagesFromList.setRenderedImages(images);
selectRenderedImagesFromList.setCandidateCV(getEditedEntity());
selectRenderedImagesFromList.addAfterCloseListener(evnt -> {
// при закрытии формы теперь возвращаем элемент Image который выбрали
if (((SelectedCloseAction) evnt.getCloseAction()).getResult()
.equals(CandidateCV.SelectedCloseActionType.SELECTED)) {
Image selectedImage = selectRenderedImagesFromList
.getSelectedImage();
// готовим размещение этой картинки в Image основной формы
FileDescriptor fd = dataManager
.commit(selectRenderedImagesFromList.getSelectedImageFileDescriptor());
candidatePic
.setSource(FileDescriptorResource.class)
.setFileDescriptor(fd);
}
});
selectRenderedImagesFromList.show();
}
ну а тут описание дескриптора элемента Image в основной форме, который привязан к контейнеру данных
<image id="candidatePic"
dataContainer="candidateCVDc"
property="fileImageFace"
width="100%"
align="TOP_RIGHT"
height="100%"
stylename="widget-border"
scaleMode="FILL"/>
Итого вопрос: как правильно выгрузив из pdf BufferedImage или InputStream запихать его через Image в контейнер и чтоб записалось в сущность?