java - 使用 pdfbox 将 pdf 转换为 png 时文本周围的红色区域
问题描述
我正在尝试使用 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());
}
}
到目前为止,我只发现当我Master PDF editor
在 linux 上打开它们时,输出中红色的地方是空白的。虽然当我用Document Viewer
.
一些提示: - 已扫描有问题的 pdf。我可以选择工作部件周围的文本,但不能选择有红色覆盖的地方。也许这与 OCR 问题有关?- 如果我使用 linux 工具convert not-working-pdf.pdf converted.pdf
然后尝试将此文件转换为 png,则问题不再存在。
这是一个示例文件:https ://ufile.io/3or9l
pdfbox版本:2.0.13
解决方案
这是一个 PDFBox 错误,原因是带有蒙版的双色调图像,这是不寻常的。光栅中只有一个颜色元素,因此仅应用“R”而不是所有 3 个 RGB 目标。因此,白色出现为红色。
有关问题PDFBOX-4470中此错误的更多详细信息,将在版本 2.0.14 中修复。在此之前,您可以使用快照。
推荐阅读
- javascript - 无法在angularjs中使用动态表头对表进行排序?
- acumatica - 我想对我的自定义屏幕设置进行验证
- c++11 - 从所有包元素的特定成员推导出参数包
- python - Twisted WSGI 服务器无法验证客户端
- linux - 如何在linux中提取行并保存为文本文件
- python - 如何在 PyCharm 中制作部分
- sql - Alias 如何提高性能
- apache-nifi - Apcahe NIFI -- 无法配置 ConsumeKafkaRecord
- java - PDFTron HTML 到 PDF 转换失败和错误代码 0
- javascript - `for of` 循环是否重新评估过滤后的数组?