我正在尝试使用pdfbox将pdf转换为png文件。不幸的是,结果是在输出的某些地方出现了奇怪的红色区域。我不确定是什么问题。仅有一些pdf文件是一个问题。
以下是我正在使用的一些代码:
public static BufferedImage generateFromPdf(String ref, InputStream stream, int pageIndex, PreviewMode mode) throws IOException {
PDDocument doc = null;
try (InputStream buffered = new BufferedInputStream(stream)) {
doc = PDDocument.load(buffered, PDF_LOADING_MEMORY_SETTING);
if (pageIndex > doc.getNumberOfPages()) {
return null;
}
PDFRenderer renderer = new PDFRenderer(doc);
return rasterizePdfBox(ref, pageIndex, renderer, mode);
} finally {
if (doc != null) {
doc.close();
}
}
}
然后:
private static BufferedImage rasterizePdfBox(String ref, int pageIndex, PDFRenderer renderer, PreviewMode mode) throws IOException {
Future<BufferedImage> result = executorService.submit(() -> {
LOGGER.info(String.format("Generate preview for ref: %s, page: %s, mode: %s ", ref, pageIndex, mode.name()));
return renderer.renderImageWithDPI(pageIndex - 1, mode.getDpi(), ImageType.RGB);
});
try {
return result.get();
} catch (InterruptedException | ExecutionException e) {
LOGGER.error(String.format("Error when generating preview: %s", e.getMessage()));
Thread.currentThread().interrupt();
throw new IOException(e.getMessage());
}
}
到目前为止,我只发现当我在Linux上的Master PDF editor
中打开输出时,红色的位置是空白的。尽管当我用Document Viewer
打开它们时,它们似乎很正常。
一些提示:
-有问题的pdf已被扫描。我可以在工作部分周围选择文本,但不能在上面有红色覆盖的地方选择文本。也许与OCR问题有关?
-如果我使用linux工具convert not-working-pdf.pdf converted.pdf
,然后尝试将此文件转换为png,则问题不再存在。
这是一个示例文件:https://ufile.io/3or9l
pdfbox版本:2.0.13
答案 0 :(得分:1)
这是一个PDFBox错误,原因是带有蒙版的双色调图像,这是不寻常的。光栅中只有一个颜色元素,因此仅应用了“ R”,而不是所有3个RGB目标。因此,白色显示为红色。
有关此问题PDFBOX-4470中的错误的更多详细信息,将在版本2.0.14中修复。在此之前,您可以使用snapshot。