在PDFBox 2.0.4上提取页面到图像时出现“黑色污点”

时间:2017-02-01 10:35:24

标签: java pdf pdfbox jpeg2000

使用PDFBox 2.0.4将页面提取为图像,我的结果页面包含多个“黑洞”,如下面的屏幕所示:

enter image description here

这种情况仅适用于此PDF及其他一些内容:http://www.filedropper.com/selection_3

这是一个简单的代码(使用JavaFX)来重现问题(下载PDF后更改文件路径):

public class PDFExtractionTest extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        FileInputStream inputStream = new FileInputStream(new File("C:\\Users\\John\\Desktop\\selection.pdf"));
        PDDocument document = PDDocument.load(inputStream);
        PDFRenderer pdfRenderer = new PDFRenderer(document);
        BufferedImage bufferedImage = pdfRenderer.renderImage(1);
        Image fxImage = SwingFXUtils.toFXImage(bufferedImage, null);

        BorderPane borderPane = new BorderPane();
        ImageView imageView = new ImageView(fxImage);

        borderPane.setCenter(imageView);

        primaryStage.setScene(new Scene(borderPane, 1024, 768));
        primaryStage.show();
    }

     public static void main(String[] args) throws FileNotFoundException {
         launch(args);
     }
}

以下是我的依赖项:

  • pdfbox 2.0.4
  • jai-imageio-jpeg2000 1.3.0(防止错误:无法读取JPEG2000图像:未安装Java高级成像(JAI)图像I / O工具)
  • levigo-jbig2-imageio 1.6.5(防止错误:无法读取JBIG2图像:未安装jbig2-imageio)

在日志中我有这个,但我不知道这是否是问题的原因。我该如何解决?

févr. 01, 2017 11:20:51 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
AVERTISSEMENT: No Unicode mapping for .notdef (9) in font Times-Bold
févr. 01, 2017 11:20:51 AM org.apache.pdfbox.rendering.Type1Glyph2D getPathForCharacterCode
AVERTISSEMENT: No glyph for 9 (.notdef) in font Times-Bold
févr. 01, 2017 11:20:51 AM org.apache.pdfbox.pdmodel.font.PDSimpleFont toUnicode
AVERTISSEMENT: No Unicode mapping for .notdef (9) in font Helvetica
févr. 01, 2017 11:20:51 AM org.apache.pdfbox.rendering.Type1Glyph2D getPathForCharacterCode
AVERTISSEMENT: No glyph for 9 (.notdef) in font Helvetica

我是否遗漏了代码中的内容,还是应该报告错误?

2 个答案:

答案 0 :(得分:1)

这是一个长期的问题(请参见PDFBOX-1752)。该错误在JAI中,而不在PDFBox中。 “ No unicode ...”在这里无关紧要,仅与文本提取有关。

检出the jai-imageio-jpeg2000 project,然后像在this commit中一样更改文件StdEntropyDecoder.java(从pull request开始扩展)。在您的maven pom.xml中构建项目并参考1.3.1-SNAPSHOT版本,或将jar文件复制到您的类路径中。

如果jai-imageio-jpeg2000项目团队发布了包含该拉取请求的新版本,那么您将不再需要自己构建。

其他关键字:黑色墨迹,黑色斑点

答案 1 :(得分:1)

经过13次提醒,我让Stian最终发布了jai-imageio-jpeg2000库的新版本1.4.0

所以最终可以通过升级到最新的官方库来解决此问题...