代码之家  ›  专栏  ›  技术社区  ›  9ilsdx 9rvj 0lo

PdfBox和JPEG2000示例的图像类型未知

  •  1
  • 9ilsdx 9rvj 0lo  · 技术社区  · 7 年前

    我取了一个样本 JPEG 2000 fnord examples page

    但是,当我尝试将该图像添加到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:图像类型未知 位于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 回复  |  直到 5 年前
        1
  •  2
  •   informatik01 Viswanath Lekshmanan    5 年前

    来自PDFBox的 API documentation :

    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);
    }
    

    只要你假装你有 骨形态发生蛋白 还有你的 ImageIO 支持 JPEG 2000