使用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);
}
}
以下是我的依赖项:
在日志中我有这个,但我不知道这是否是问题的原因。我该如何解决?
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
我是否遗漏了代码中的内容,还是应该报告错误?
答案 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。
所以最终可以通过升级到最新的官方库来解决此问题...