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

Riz*_*zen 6 java pdf jpeg2000 pdfbox

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

在此输入图像描述

这种情况仅发生在这个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);
     }
}
Run Code Online (Sandbox Code Playgroud)

这是我的依赖项:

  • pdfbox 2.0.4
  • jai-imageio-jpeg2000 1.3.0(防止错误:无法读取JPEG2000图像:Java Advanced Imaging(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
Run Code Online (Sandbox Code Playgroud)

我错过了代码中的内容还是应该报告错误?

Til*_*err 3

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

查看jai-imageio-jpeg2000 项目StdEntropyDecoder.java,然后按照此提交更改文件(从此拉取请求扩展)。构建项目并在 maven pom.xml 中引用版本 1.3.1-SNAPSHOT 或将 jar 文件复制到类路径中。

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

其他关键词:黑色墨迹、黑色斑点

  • 据了解:变更已同时拉取,但1.3.1版本尚未发布,因此仍需自行编译源码。 (2认同)