0

我有一个 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 

我错过了什么?

4

1 回答 1

1

我回复您的评论作为答案,因为否则格式/空间是有限的。

我们使用 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!");
}
于 2020-09-16T09:43:37.387 回答