我正在尝试对 pdf 执行 OCR。代码中有2个步骤:
我第一步使用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 个线程而不会出现内存问题?
重现步骤:
从这里下载 Linkedin …