Проект работает в затмении, но не после упаковки в банку - PullRequest
0 голосов
/ 15 января 2019

Мой проект использует itext7 для создания файлов PDF. Когда я запускаю из затмения все работает отлично. Когда я упаковываю его как банку, все работает, пока я не дохожу до того, что хочу создать PDF. Я тогда получаю:

Исключение в потоке "Поток приложения JavaFX" com.itextpdf.io.IOException: исключение ввода-вывода.
.....

Причина: java.io.FileNotFoundException: C: \ Users \ puser \ eclipse-workspace \ Document \ target \ SE001-0.1.1-SNAPSHOT.jar \ img \ Safety.png (Системе не удается найти указанный путь )

Папка проекта сохраняет изображения на src/main/resources/img. Как только баночка создана, она просто имеет /img в корне. Это означает, что вы не можете просто указать прямой путь, потому что он меняется при создании банки. Изображения JavaFX отлично работают с ..

Image user = new Image(getClass().getResourceAsStream("/img/Document.png"));

Использование этого с itext7 не работает, потому что ImageDataFactory.create() ищет байт [], и это входной поток.

Сейчас пытаюсь использовать:

Image safetyImage = new Image(ImageDataFactory.create(System.getProperty("user.dir") + "/img/Safety.png"));

Не работает, потому что банка не находится внутри пути.

Что я могу использовать, чтобы указать на файл изображения внутри банки и использовать его вместе с ним ext7?

1 Ответ

0 голосов
/ 15 января 2019

мкл был верен и спасибо!

Я создал служебный метод для преобразования входного потока в байтовый массив.

   public static byte[] toByteArray(InputStream in) throws IOException {
          //InputStream is = new BufferedInputStream(System.in);
          ByteArrayOutputStream os = new ByteArrayOutputStream();
          byte [] buffer = new byte[1024];
          int len;
          // read bytes from the input stream and store them in buffer
            while ((len = in.read(buffer)) != -1) {
                // write bytes from the buffer into output stream
                os.write(buffer, 0, len);
            }
            return os.toByteArray();
       }

Затем я использовал эту утилиту внутри метода ImageDataFactory.create ().

Image safetyImage = new Image(ImageDataFactory.create(toByteArray(getClass().getResourceAsStream("/img/Safety.png"))));
...