当前位置: 首页 > 知识库问答 >
问题:

PDFBox和JPEG 2000示例中的图像类型未知

张鸿宝
2023-03-14

但是,当我尝试将该图像添加到PDF中时:

PDDocument document = new PDDocument();
PDImageXObject pdImage = pdImage = PDImageXObject.createFromFileByContent(
   "samples/relax.jp2", document);
PDPage page = new PDPage(new PDRectangle(pageWidth, pageHeight));
PDPageContentStream contentStream = new PDPageContentStream(document, page);
contentStream.drawImage(pdImage, matrix);
contentStream.close();

我有个例外:

原因:java.lang.IllegalArgumentException:不支持图像类型未知:relax.jp2,位于org.apache.pdfbox.pdmodel.graphics.Image.pdimagexObject.CreateFromFileByContent(pdimagexObject.java:313)

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>fontbox</artifactId>
        <version>2.0.12</version>
    </dependency>
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>jempbox</artifactId>
        <version>1.8.16</version>
    </dependency>       
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>jbig2-imageio</artifactId>
        <version>3.0.2</version>
    </dependency>
    <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>

我是不是做错什么了?或者PDFBox和/或我正在使用的示例有问题?

其他Apache库Tika将此示例文件MIME类型检测为image/jp2:

TikaConfig tika = new TikaConfig();
Metadata metadata = new Metadata();
MediaType mimetype = tika.getDetector().detect(
     TikaInputStream.get(new FileInputStream("samples/relax.jp2"), metadata);

共有1个答案

孙自怡
2023-03-14

来自PDFBOX的API文档:

CreateFromFileByContent()
支持以下文件类型:jpg、jpeg、tif、tiff、gif、bmp和PNG。

查看源代码,createfromfilebycontent()中调用的是它们自己对已知文件类型的检查,独立于底层库,检测代码如下所示:filetypedetector.java。

此检查不识别JPEG 2000。

实际上createFromFileByExtension()可能是更好的选择:

if ("gif".equals(ext) || "bmp".equals(ext) || "png".equals(ext)) {
    BufferedImage bim = ImageIO.read(file);
    return LosslessFactory.createFromImage(doc, bim);
}

只要你假装你有一个GIF、BMP或PNG,并且你的ImageIO支持JPEG2000,这可能有点工作(未经测试)。

 类似资料:
  • 有人能给我一个如何使用Apache PDFBox 2.0.3在PDF文件中显示图像的例子吗? 提前谢谢

  • 我的程序在Eclipse中运行完美,但是当我导出它时,图像不显示出来。 我的设置看起来像 我参考标志。来自MenuMain的png。java,我尝试了很多方法; 前3个在Eclipse中工作,但都不在Jar中工作。我检查了Jar文件,res文件夹在那里,所有的图像也是如此。我还尝试编辑MANIFEST. MF并添加了类路径: 但它仍然不起作用。我在运行Jar时没有发现任何错误,其他所有内容都显示在

  • 主要内容:从PDF文档生成图像在前一章中,我们已经看到了如何合并多个PDF文档。 在本章中,我们将了解如何从PDF文档的页面提取图像。 从PDF文档生成图像 PDFBox库提供了一个名称为的类,它将PDF文档呈现为AWT BufferedImage。 以下是从PDF文档生成图像的步骤。 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可以使用类名称调用

  • 主要内容:将图像插入PDF文档在前一章中,我们已经学习如何从现有的PDF文档中提取文本。 在本章中,将讨论如何将图像插入PDF文档。 将图像插入PDF文档 分别使用类的以及类的方法将图像插入到PDF文档中。 以下是从现有PDF文档中提取文本的步骤。 第1步:加载现有的PDF文档 使用类的静态方法加载现有的PDF文档。 此方法接受一个文件对象作为参数,因为这是一个静态方法,可以使用类名称调用它,如下所示。 第2步:检索页面 在P

  • 然后,我根据页面大小与图像大小计算缩放的维度,返回:java.awt.dimension[width=562,height=792]我使用下面的代码来计算缩放的维度: 为了实际执行图像缩放,我使用image Scalr API: 我的问题是我做错了什么?当缩放到较小的尺寸时,大的图像不应该被模糊。这与PDF页面的分辨率/大小有关吗?

  • 我正在建立一个java项目,使用pdfBox从PDF中获取图像。由于我使用tika应用程序实现其他功能,我决定使用tika-app-1.20中的pdfBox。罐子 我以前尝试过包括jai-imageio-core-1.3.1.jar,因为Tika-app已经与这个罐子捆绑在一起了。我单独尝试了tika-app jar。 这条线是投掷错误