我们的机器在处理pdf转txt业务时发生OOM,分析dump文件发现是由于产生了大量的aspose对象造成的。我们注意到所处理的pdf文件中含有大量矢量图,这也许是消耗过多内存的直接原因(普通不含矢量图的pdf在转换是顺利的)。并且,还发现pdf在初始化文档时(也就是下面这个方法)进程就会卡住:
Document textPdf = new Document(filePath)
我们的机器是linux系统,4核8G。在windos系统(32G内存)的环境下并没有这个问题。
其实我们转换成txt之后,只取了pdf中的文字部分,图片被丢弃了。
请问,aspose.Pdf中有没有相关设置可以规避矢量图的处理,或者是否有办法在pdf转txt时不消耗那么多的内存。
我还没有尝试过23.7版本的API?
// 前面只有一行设置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);
}
我们使用了下面的文档和代码片段,但无法在我们的环境中重现该异常。我们使用了 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是否有相关设置可以减少格式转换过程中的内存消耗
不,没有这样的设置可以在加载 PDF 文档时消耗更少的内存。您能否准备一下源示例 PDF 供我们参考并与我们分享?另外,请分享您设置的 JDK 版本以及 Java 堆大小。我们将再次测试该场景并相应地解决它。