【问题标题】:Optimize docx4j performance优化 docx4j 性能
【发布时间】:2013-03-17 21:08:30
【问题描述】:

我正在使用 docx4j 2.8.1 替换 word 文件中的文本和徽标。现在我想提高性能,因为大约 50 个文档的处理速度很慢。建议使用哪些选项来提高 docx4j 的性能?

替换字符串(不是徽标)的代码如下所示:

 String xml = XmlUtils.marshaltoString(documentPart.getJaxbElement(), true);
 HashMap<String, String> mappings = buildReplaceMap(userData);

 Object obj = XmlUtils.unmarshallFromTemplate(xml, mappings);
 documentPart.setJaxbElement(obj);

【问题讨论】:

  • 我假设您正在通过单个 JVM 实例处理 50 个文档(因此您只会导致一次 JAXB 上下文初始化延迟)?
  • 是的。我观察到,如果文档是同时生成的,每个文档都在自己的线程中,则该过程所花费的时间甚至比文档一个接一个地生成的时间还要长。

标签: java docx4j


【解决方案1】:

请尝试http://www.docx4java.org/docx4j/docx4j-nightly-20130328.jar

它包含一个实验变量替换方法。根据您的问题假设 documentPart 和映射,您可以致电:

documentPart.variableReplace(mappings);

您不需要 documentPart.setJaxbElement。

在我对 175 页文档的测试中,处理时间为 1/3 秒(大约快 3 倍)。

提供更多资源(更多内核,如果您想同时进行的话)和更多 RAM 最容易实现任何进一步的性能改进。

让我知道你的想法。

【讨论】:

  • 决定自己编辑zip文件中的xml,不做xml解析等,纯文本替换。这是因为用例的复杂性有限。然而它可能很脆弱。但它真的很快。
  • 相关代码在 docx4j 3.0 中,所以请使用它而不是当前(但现在旧)的夜间构建。
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 2011-10-17
  • 2014-01-08
  • 1970-01-01
  • 2017-06-02
  • 2013-03-31
  • 2018-07-19
  • 1970-01-01
相关资源
最近更新 更多