Java PDFBox渲染Jpeg2000和JBIG2

Java PDFBox渲染Jpeg2000和JBIG2,java,pdf,tomcat,pdfbox,jbig2,Java,Pdf,Tomcat,Pdfbox,Jbig2,我想将每个pdf页面转换为一个图像(如屏幕截图),然后将该图像上载到存储服务 private void getImageBytes(PDDocument document, int pageIndex, int dpi, ConcurrentHashMap<String, byte[]> imgsToUpload, String imgKey) throws IOException { PDFRenderer pdfRenderer = new PDFRenderer

我想将每个pdf页面转换为一个图像(如屏幕截图),然后将该图像上载到存储服务

  private void getImageBytes(PDDocument document, int pageIndex, int dpi, ConcurrentHashMap<String, byte[]> imgsToUpload, String imgKey) throws IOException {


    PDFRenderer pdfRenderer = new PDFRenderer(document);
    BufferedImage bim = pdfRenderer.renderImageWithDPI(pageIndex, dpi, ImageType.RGB);
    final ByteArrayOutputStream os = new ByteArrayOutputStream();
    ImageIO.write(bim, "png", os); // import javax.imageio.ImageIO;
    os.flush();
    os.close();
    imgsToUpload.put(imgKey, os.toByteArray());
  }
但生成的图像仍然是空白的。并记录此错误:
无法读取JPEG2000图像:未安装Java高级图像(JAI)图像I/O工具

那么,我错过了什么,我认为添加依赖项可以解决这个错误

我应该使用pdfbox-tools.imageIo而不是java.imageIo吗


PS:我是Java新手,所以我认为这可能是一个配置问题

您需要在pom文件中添加这些依赖项以解决此问题

<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-core</artifactId>
    <version>1.4.0</version>
</dependency>
<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-jpeg2000</artifactId>
    <version>1.3.0</version>
</dependency>

com.github.jai-imageio

这是一个直接的独立计划吗?还是tomcat中的某个东西?@tilmahausherr,它是一个spring boot应用程序,运行tomcat作为服务器。基本上,这个端点所做的是,从pdf中提取所有表单字段,并将每个页面作为图像。我记得读过这篇关于tomcat的文章。。。我发现之前已经讨论过了,但没有解决方案:我想知道如果你把jar文件放在tomcat jar文件所在的tomcat目录中,它是否有效?我刚刚重新启动了我的电脑,它工作了,我真的不知道发生了什么或出了什么问题@TilmanHausherr,但是图像有黑色污点,我发现你的一个答案是JAI的一个bug,它已经解决了,但没有发布。是的,你需要用上面提到的修改做你自己的构建。IIRC主要修改在存储库中。jai-imageio-jpeg2000的版本为1.4.0,其中包含“墨迹”错误修复
<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-core</artifactId>
    <version>1.4.0</version>
</dependency>
<dependency>
    <groupId>com.github.jai-imageio</groupId>
    <artifactId>jai-imageio-jpeg2000</artifactId>
    <version>1.3.0</version>
</dependency>