小编Lio*_*r Y的帖子

小 pdf 文件产生巨大的 BufferdImage

我正在尝试对 pdf 执行 OCR。代码中有2个步骤:

  1. 将 pdf 转换为 tiff 文件
  2. 将 tiff 转换为文本

我第一步使用ghost4j,第二步使用tess4j。一切都很好,直到我开始多线程运行它,然后发生了奇怪的异常。我在这里读到:https ://sourceforge.net/p/tess4j/discussion/1202293/thread/44cc65c5/ghost4j不适合多线程,所以我改变了第一步使用PDFBox。

所以现在我的代码看起来像:

PDDocument doc = PDDocument.load(this.bytes);
PDFRenderer pdfRenderer = new PDFRenderer(doc);
BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300);
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "tiff", os);
os.flush();
os.close();
bufferedImage.flush();
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 800 kb pdf 文件运行此代码,并在检查内存后

BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, 300);
Run Code Online (Sandbox Code Playgroud)

它提高到 500 MB 以上!!如果我将此 BufferedImage 保存到磁盘,则输出大小为 1 MB...因此,当尝试使用 8 个线程运行此代码时,我也会遇到 Java 堆大小异常...

我在这里缺少什么?为什么 1 MB 的文件会产生 500 MB 的图像文件?我尝试使用 DPI 并降低质量,但文件仍然很大......是否有任何其他库可以将 pdf 渲染为 tiff,并且我可以执行 10 个线程而不会出现内存问题?

重现步骤:

  1. 从这里下载 Linkedin …

java ocr bufferedimage tesseract pdfbox

8
推荐指数
1
解决办法
517
查看次数

标签 统计

bufferedimage ×1

java ×1

ocr ×1

pdfbox ×1

tesseract ×1