Java 使用pdfbox将pdf转换为png时文本周围的红色区域

Java 使用pdfbox将pdf转换为png时文本周围的红色区域,java,pdf,pdfbox,Java,Pdf,Pdfbox,我正在尝试使用pdfbox将pdf转换为png文件。不幸的是,结果是在输出的某些地方出现了奇怪的红色区域。我不确定是什么问题。这是一个问题,只有一些pdf文件 下面是我正在使用的一些代码: publicstaticbufferedimage generateFromPdf(stringref、InputStream、intpageindex、PreviewMode模式)引发IOException{ PDDocument=null; try(InputStream buffered=new Buf

我正在尝试使用pdfbox将pdf转换为png文件。不幸的是,结果是在输出的某些地方出现了奇怪的红色区域。我不确定是什么问题。这是一个问题,只有一些pdf文件

下面是我正在使用的一些代码:

publicstaticbufferedimage generateFromPdf(stringref、InputStream、intpageindex、PreviewMode模式)引发IOException{
PDDocument=null;
try(InputStream buffered=new BufferedInputStream(stream)){
doc=PDDocument.load(缓冲、PDF加载、内存设置);
如果(pageIndex>doc.getNumberOfPages()){
返回null;
}
PDFRenderer渲染器=新的PDFRenderer(doc);
返回光栅化PDFBOX(参考、页面索引、渲染器、模式);
}最后{
如果(doc!=null){
doc.close();
}
}
}
然后:

private static BufferedImage rasterizePdfBox(字符串引用,int pageIndex,PDFRenderer渲染器,预览模式)引发IOException{
未来结果=executorService.submit(()->{
LOGGER.info(String.format(“为ref:%s、page:%s、mode:%s、ref、pageIndex、mode.name()生成预览”);
返回renderer.renderImageWithDPI(pageIndex-1,mode.getDpi(),ImageType.RGB);
});
试一试{
返回result.get();
}捕获(中断异常|执行异常e){
LOGGER.error(String.format(“生成预览时出错:%s”,e.getMessage());
Thread.currentThread().interrupt();
抛出新IOException(例如getMessage());
}
}
到目前为止,当我在linux上的
Master PDF editor
中打开它们时,我只发现输出中红色的地方是空白的。当我用
文档查看器打开它们时,它们看起来很正常

一些提示: -已扫描有问题的PDF。我可以选择工作部件周围的文本,但不能选择覆盖红色的位置。也许这与OCR问题有关? -如果我使用linux工具convert not-working-pdf.pdf converted.pdf
,然后尝试将此文件转换为png,那么问题就不再存在了

下面是一个示例文件:


pdfbox版本:2.0.13

这是一个pdfbox错误,原因是一个带有掩码的双音图像,这是不寻常的。光栅中只有一个颜色元素,因此仅应用“R”,而不是全部3个RGB目标。正因为如此,白色变成了红色


有关此问题的更多详细信息,将在2.0.14版中修复。在此之前,您可以使用。

请以可复制的方式共享该问题出现的pdf示例。PDFBox似乎存在将遮罩应用于图像的问题。在示例文件中,图像Im1是带有遮罩的DeviceGray JBIG2图像。红色区域正好是应用遮罩后图像的可见区域。移除遮罩后,图像将正确渲染为黑白。