含有矢量图的pdf转txt时消耗大量内存,造成OOM

我们的机器在处理pdf转txt业务时发生OOM,分析dump文件发现是由于产生了大量的aspose对象造成的。我们注意到所处理的pdf文件中含有大量矢量图,这也许是消耗过多内存的直接原因(普通不含矢量图的pdf在转换是顺利的)。并且,还发现pdf在初始化文档时(也就是下面这个方法)进程就会卡住:
Document textPdf = new Document(filePath)
我们的机器是linux系统,4核8G。在windos系统(32G内存)的环境下并没有这个问题。
其实我们转换成txt之后,只取了pdf中的文字部分,图片被丢弃了。
请问,aspose.Pdf中有没有相关设置可以规避矢量图的处理,或者是否有办法在pdf转txt时不消耗那么多的内存。

@arthurjjk

您能否分享您的示例 PDF 文档供我们参考,以便我们可以在我们的环境中测试该场景并相应地解决该问题?另外,请分享一下您是否使用过并尝试过23.7版本的API?

ISS_12137_02777.jpg (3.0 MB)

我自己构造了一个这样的文档,但是太大了传不上去。所以我把这张矢量图传上来,或许你可以自己建一个word文档,再把这张图片插进去。

我还没有尝试过23.7版本的API?

@arthurjjk

根据之前的要求,您能否分享您用于将 PDF 转换为文本的完整代码片段?我们需要代码片段来测试我们环境中的场景,就像您正在使用并面临问题一样。

// 前面只有一行设置licensen的代码
Document document = new Document(filePath);
PageCollection pages = document,getPages();
Textbsober textAbsorber = new TextAbsorber();
pages.accept(textAbsorber);
String extractedText = textAbsorber.getText();
try (PrintWriter = new PrintWriter(new BufferWriter(new OutputStreamWtiter(Files.newOutputStream(Paths.get(dstFileName)), StandardCharset.UTF_8)))) {
writer.write(extractedText);
}

@arthurjjk

我们使用了下面的文档和代码片段,但无法在我们的环境中重现该异常。我们使用了 23.6 版本的 API。

您能否使用 23.6 版本重试,如果您仍然发现任何问题,请告诉我们?

Doc1.pdf (381.4 KB)

Document doc = new Document(dataDir + "Doc1.pdf");
// Create TextAbsorber object to find all instances of the input search phrase
TextAbsorber textAbsorber = new TextAbsorber();

// Accept the absorber for all the pages
doc.getPages().accept(textAbsorber);

System.out.println("Text :" + textAbsorber.getText());

我使用23.6版本重试了一次,还是不行。你没有重现问题可能是因为你测试的机器内存够大,也可能是构造的这个pdf还不够典型。但总之,当pdf当中包含矢量图时,比不包含矢量图要消耗更多的内存。aspose-pdf的loadOptions是否有相关设置可以减少格式转换过程中的内存消耗

@arthurjjk

不,没有这样的设置可以在加载 PDF 文档时消耗更少的内存。您能否准备一下源示例 PDF 供我们参考并与我们分享?另外,请分享您设置的 JDK 版本以及 Java 堆大小。我们将再次测试该场景并相应地解决它。