JBig2 не разрешается во время выполнения?
У меня есть приложение Java/Gradle, которое использует PDFBox для преобразования PDF-файлов в PNG. При локальном тестировании в моей IDE мой код выглядит следующим образом:
public static void main(String[] args) throws IOException {
PDDocument doc = PDDocument.load(new File("pdfFile.pdf"));
PDFRenderer renderer = new PDFRenderer(doc);
OutputStream os = new FileOutputStream(new File("image.png"));
ImageIO.write(renderer.renderImageWithDPI(0, 300), "png", os);
}
В prod другое приложение запускает новую JVM, которая запускает мое приложение. Я не уверен, какой путь к классам для родительского приложения, но имеет ли это значение, если в моих зависимостях Gradle есть следующее?
implementation "org.apache.pdfbox:jbig2-imageio:3.0.2"
При тестировании моего основного метода локально в моей среде IDE он работает нормально, но не использует вторую настройку, которую я описал. Я также проверил свой манифест и вижу следующие файлы:
META-INF/services/javax.imageio.spi.ImageReaderSpi
META-INF/services/javax.imageio.spi.ImageWriterSpi
Что мне не хватает?
0 ответов
Я отвечаю на ваш комментарий как на ответ, поскольку в противном случае форматирование / пространство ограничено.
Мы используем slf4j для "перенаправления" всех журналов обычных пользователей в log4j. Вы должны добавить в свой журнал следующую зависимость - затем, после добавления приложения для pdfbox, он войдет в ваш стандартный файл журнала...
<!-- PdfBox is using Apache commons logging. To force this to use log4j2 the following lib has to be used -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.30</version>
</dependency>
На ваш второй вопрос: нет, не обязательно. Все ли библиотеки доступны в пути к классам? Без сообщения об ошибке очень сложно понять, что именно происходит. Вы видите консоль? Если да, то используйте следующий код, чтобы проверить, есть ли там ваши классы.
try {
Class<?> clazz = Class.forName("org.apache.pdfbox.pdmodel.PDDocument");
}
catch (ClassNotFoundException e) {
System.err.println("PdfBox classes not found!");
}