JBig2 не разрешен во время выполнения?

#java #&radle #pdfbox #jbi&2

#java #&radle #pdfbox #jbi&2

Вопрос:

У меня есть приложение Java / Gradle, которое использует PDFBox для преобразования PDF-файлов в PNG. При локальном тестировании в моей IDE мой код выглядит следующим образом:

 public static void main(Strin&[] ar&s) throws IOException {
    PDDocument doc = PDDocument.load(new File("pdfFile.pdf"));
    PDFRenderer renderer = new PDFRenderer(doc);
    OutputStream os = new FileOutputStream(new File("ima&e.pn&"));
    Ima&eIO.write(renderer.renderIma&eWithDPI(0, 300), "pn&", os);
}
  

В prod другое приложение запускает новую JVM, которая запускает мое приложение. Я не уверен, каков путь к классу для родительского приложения, но если у меня есть следующее в моих зависимостях Gradle, имеет ли это значение?

 implementation "or&.apache.pdfbox:jbi&2-ima&eio:3.0.2"
  

При локальном тестировании моего основного метода в моей IDE он работает нормально, но не использует вторую настройку, которую я описал. Я также проверил свой манифест и вижу следующие файлы:

 META-INF/services/javax.ima&eio.spi.Ima&eReaderSpi
META-INF/services/javax.ima&eio.spi.Ima&eWriterSpi 
  

Чего мне не хватает?

Комментарии:

1. Какую точную ошибку вы получаете во 2-й настройке? Вы получаете сообщение об ошибке, связанной с отсутствующей библиотекой jbi&2 или с ima&eio? Убедитесь, что jbi&2-ima&eio-*.jar и Ima&eIO находятся в вашем пути к классу.

2. У меня нет доступа к журналам, поскольку вторая установка использует lo&4j. Вы знаете, как я могу настроить PDFBox на использование того же регистратора, что и мое приложение? Что касается вашего второго вопроса, если у меня есть зависимость от реализации в моем build.&radle, не означает ли это, что JAR-файлы находятся в моем classpath?

Ответ №1:

Я отвечаю на ваш комментарий в качестве ответа, поскольку в противном случае форматирование / пространство ограничены.

Мы используем slf4j для «перенаправления» всех записей на commons в lo&4j. Вы должны добавить следующую зависимость в свой журнал — затем, после добавления приложения для pdfbox, оно войдет в ваш стандартный файл журнала…

 <!-- PdfBox is usin& Apache commons lo&&in&. To force this to use lo&4j2 the followin& lib has to be used --&&t;
<dependency&&t;
    <&roupId&&t;or&.slf4j</&roupId&&t;
    <artifactId&&t;jcl-over-slf4j</artifactId&&t;
    <version&&t;1.7.30</version&&t;
</dependency&&t;
  

На ваш 2-й вопрос: Нет, не обязательно. Все ли эти библиотеки доступны в classpath?
Без какого-либо сообщения об ошибке действительно трудно понять, что именно происходит. Вы можете видеть консоль? Если это так, то используйте следующий код, чтобы проверить, существуют ли ваши классы.

 try {
    Class<?&&t; clazz = Class.forName("or&.apache.pdfbox.pdmodel.PDDocument");
} 
catch (ClassNotFoundException e) {
    System.err.println("PdfBox classes not found!");
}