【发布时间】:2016-06-09 22:39:34
【问题描述】:
可以使用 PDFBox v1.x 提取包括 TIFF 格式的图像。仍然可以使用 2.0.1 版本提取某些格式,但它似乎不适用于 TIFF 格式。
for (COSName c : page.getResources().getXObjectNames()) {
PDXObject o = resources.getXObject(c);
if (o instanceof PDImageXObject) {
PDImageXObject image = (PDImageXObject) o;
try (ByteArrayOutputStream bout = new ByteArrayOutputStream()) {
ImageIO.write(image.getImage(), image.getSuffix(), bout);
System.out.println("Image Bytes: " + bout.size());
}
}
}
上面代码中的 ByteArrayOutputStream 有 PNG 和 JPEG 的字节,但没有 TIFF 的字节。有什么建议吗?
谢谢。
【问题讨论】:
-
我首先想到的问题是:ImageIO 是否支持 TIFF?尝试将 image.getSuffix() 替换为“png”,以便尝试将其保存为 png。如果它确实有效,那么您的 ImageIO 只是不支持写入 TIFF 文件。
-
“但它似乎不起作用”不是很具体。当图像在 pdf 文件中以 ccitt 格式编码时,
image.getSuffix()返回“tiff”。您没有链接到特定的 PDF 文件。只有当 jai_imageio.jar 在您的类路径中时,ImageIO.write()才能正常工作。 1:查看ImageIO.write()的返回值。 2:使用ImageIOUtils,这将检查lib是否存在。 3:读取依赖:pdfbox.apache.org/2.0/dependencies.html 4:使用最新版本,即2.0.2。 (仅从昨天开始:-)) -
我已经尝试了 2.0.2 版本,但结果是一样的。 JAI 的 imageio、编解码器和核心位于类路径中,并且“ImageIOUtils.writeImage”产生的结果类似于“ImageIO.write”。但是将 TIFF 视为 PNG(如@user254948 所建议)是有效的,即我能够将 TIFF 保存为 PNG,对其进行编辑并将其保存为 PDF。感谢您的建议。