当前位置: 首页 > 知识库问答 >
问题:

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

万俟均
2023-03-14

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

这种情况只发生在本PDF和其他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个答案

丌官盛
2023-03-14

经过13次提醒后,我终于让Stian发布了jai-Imageio-jpeg2000库的新版本1.4.0。

所以这个东西最终可以通过升级到最新的官方库来解决...

公宜春
2023-03-14

这是一个长期的问题(见PDFBOX-1752)。错误在JAI中,而不是在PDFBox中。“没有Unicode......”在这里无关紧要,这只与文本提取相关。

查看jai-Imageio-jpeg2000项目,然后将文件StdEntropyDecoder.java更改为此提交(从此拉取请求扩展)。在maven中构建项目和参考版本1.3.1-SNAPSHOTpom.xml或将jar文件复制到类路径中。

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

附加关键词:黑色墨迹,黑色斑点

 类似资料:
  • “黑白”调整可让您将彩色图像转换为灰度图像,同时保持对各颜色的转换方式的完全控制。也可以通过对图像应用色调来为灰度着色,例如创建棕褐色效果。 执行下列操作之一: 单击“调整”面板中的“黑白”图标 。 选取“图层”>“新建调整图层”>“黑白”。在“新建图层”对话框中,键入调整图层的名称,然后单击“确定”。 Photoshop 会应用默认的灰度转换。 注意:也可以选择“图像”>“调整”>“黑白”。但是

  • 我是openCV的新手,我一直在学习为Android提供的示例。 我的目标是检测颜色斑点,所以我从颜色斑点检测样本开始。 我将彩色图像转换为灰度,然后使用二值阈值进行阈值化。 背景是白色的,斑点是黑色的。我想探测那些黑色斑点。此外,我想画他们的彩色轮廓,但我不能这样做,因为图像是黑白的。 我已经设法在灰度中完成了这一点,但我不喜欢轮廓的绘制方式,这就像颜色容差太高,轮廓比实际的斑点大(可能斑点太小

  • 问题内容: 每当鼠标仅用CSS悬停在图像上时,我都试图在图像上添加透明的黑色覆盖层。这可能吗?我尝试了这个: 但是我无法让div出现。 问题答案: 我建议使用伪元素代替overlay元素。由于伪元素不能添加到封闭的元素上,因此您仍然需要包装该元素。 至于CSS,请在元素上设置 可选尺寸,并相对放置它。如果您希望获得自适应图像,则只需省略尺寸即可,但仍然可以使用(示例)。值得注意的是,尺寸必须位于父

  • 我得到以下错误 服务器:版本:1.12.6 API版本:1.24 Go版本:Go1.6.4 Git提交:78D1802构建:1月10日星期二20:20:01 2017 OS/arch:Linux/AMD64

  • 在OpenCV python中,假设我们用cv2.imread读取一个图像,并得到一个BGR numpy数组。接下来我们使用cv2.inrange命令生成一个掩码。掩模具有相同的宽度/高度,并且每个掩模像素要么是黑色的,要么是白色的。 我必须先将掩码转换成BGR图像吗?如果是,怎么做? 编辑:我不想像在将蒙版应用到彩色图像中那样将整个蒙版应用到图像上。另一种表达我所想要的方式:将面具视为一个黑白图

  • 我尝试使用PDFBox将BuffereImage中的图像绘制到PDF中,但失败了,我得到了黑色图像,Acrobat Reader发出警告,其中有“内存不足”之类的错误(但PDF是显示的)。 我使用BuffereImage是因为我需要将JavaFX图像对象(来自对Functiones.crearImagenDesdeTexto()的调用,是一个将文本转换为图像的函数)绘制成PDF。其余图像在不使用B