当前位置: 首页 > 知识库问答 >
问题:

Docx4j Permgen Space与2G和一个小文档转换为PDF时

翟修明
2023-03-14

我们有一辆5公里的车。将docx文件读入Docx4j-2.8.1,然后转换为PDF。在单元测试中,这是可行的,但一旦部署到Tomcat 7(实际上是TomEE-1.6.0-SNAPSHOT)中,我们在执行PDF转换时会出现Permgen空间错误。

示例代码:

wordMLPackage = WordprocessingMLPackage.load(inputStream);
final PdfConversion pdfConvertor = new Conversion(wordMLPackage);
pdfConvertor.output(stream, null);
return stream.toByteArray();

inputStream是从的字节[]创建的。docx文件。docx文件本身是一个单独的页面,只有泰晤士报新罗马版的文本和几个要点(供示例使用)。

堆栈跟踪如下(我已将堆大小添加到顶部的日志中):

https://gist.github.com/jmkgreen/5046890

这台机器有6GB内存,Tomcat有以下设置:

set JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx2048M -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=1024m -XX:MaxPermSize=4096m -XX:+DisableExplicitGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

我不希望看到这个错误。如果您能提供一些建议,我们将不胜感激。

编辑:在调用PDF转换器之前,我从MemoryPoolMXBean for Perm Gen添加了getUsage(). getMax():82MB。

我还减少了tomcat catalina。JAVA_的bat文件条目选择如下:

set JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -XX:MaxPermSize=4096m -XX:+DisableExplicitGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

编辑2:从docx4j切换到XDocReport解决了崩溃问题。可惜既没有提供特别准确的渲染...

共有1个答案

郎献
2023-03-14

也许你的JAVA_OPTS没有被正确阅读?以下内容应该足够了:

set JAVA_OPTS=-XX:PermSize=256m -XX:MaxPermSize=256m
 类似资料:
  • 我正在尝试使用他们网站上提供的Docx4j社区包将一个Word文件转换成PDF。(http://www . docx 4 Java . org/docx 4j/docx 4j-community-3 . 3 . 1 . zip) 看起来这个包上的docx4j和FOP之间存在版本不兼容问题,我想知道以前是否有人遇到过这个问题,您是否知道什么版本的库可以实现这个功能。 这是我的代码: 我复制了下面的s

  • 问题内容: 如何将多个PDF文件合并/转换为一个大PDF文件? 我尝试了以下操作,但是目标文件的内容不符合预期: 我需要一个非常简单/基本的命令行(CLI)解决方案。最好的办法是,如果我可以将合并/转换的输出直接传送到管道中(就像我之前在这里提出的问题中最初尝试的那样:Linux管道(convert->pdf2ps-> lp)。 问题答案: 抱歉,我设法使用Google自己找到了答案,还有些运气:

  • 问题内容: 如何将Word文档转换为PDF,其中文档包含各种内容,例如表格。尝试使用iText时,原始文档看起来与转换后的PDF不同。有没有我可以使用的开源API /库,而不是调用可执行文件? 问题答案: 这是一项艰巨的任务,如果您想要完美的结果(如果不使用Word则不可能),则难度就更大了,因为仅使用纯Java即可为您完成所有操作且都是开源的API数量为零,我相信( 更新:我错了,请参见下文 )

  • 我正在尝试使用Apache POI将文档转换为pdf,但生成的pdf文档只包含文本,它没有任何格式,如图像、表格对齐等。

  • 我正在将数百个ODT文件转换成PDF文件,一个接一个地做需要很长时间。我有一个多核的CPU。是否可以使用bash或python编写一个脚本并行地完成这些操作?有没有一种方法从命令行使用libreoffice并行化批文档转换(不确定我是否使用了正确的词)?我在Python/bash中调用了以下命令: 蒂姆

  • 问题内容: 我有大量文本字符串,这些字符串显然是PDF文件的原始数据,我需要将其重新制作为PDF。 目前,我正在将字符串读取到StringBuffer中,但是如果需要,可以更改它。从那里,我尝试将其写到文件中并更改扩展名(我真的希望这样做能起作用,但是我有点不知道),我尝试将其带入String,然后从中取出byte []。并将其写入文件,或使用DataOutputStream将字节放入文件中。这些