在用DocBook和FOP生成HTML文件及PDF过程中,HTML文件能顺利生成,但无法生成PDF文件。问题出在表格上。
最早时,此表格与其他内容一起放在单独的xml文件中,能顺利生成PDF文件。后来随着内容的增多,将不同的章节放到不同的xml文件,此表格随之放在其他的xml文件中后,问题就来了。FOP的报错信息:
警告: Warning(Unknown location): fo:table, table-layout="auto" is currently not supported by FOP
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
看到table-layout="auto" is currently not supported by FOP,很自然就想着应该是FOP不支持table-layout="auto"。顺着该思路,想尽一切办法应对FOP中表格的问题,浪费了整整一晚上,无果而终。
沮丧之余,回想之前既然能够顺利生成PDF,说明FOP即使当前不支持table-layout="auto",但也能应付上面的情况,FOP的表格功能应该不会有问题。回头再看出错信息,"OutOfMemoryError",内存溢出!
fop.bat文件中最后一行调用了java:
"%JAVACMD%" %JAVAOPTS% %LOGCHOICE% %LOGLEVEL% -cp "%LOCALCLASSPATH%" org.apache.fop.cli.Main %FOP_CMD_LINE_ARGS%
将其修改为:
"%JAVACMD%" -Xmx1024m %JAVAOPTS% %LOGCHOICE% %LOGLEVEL% -cp "%LOCALCLASSPATH%" org.apache.fop.cli.Main %FOP_CMD_LINE_ARGS%
我的爱机内存为4G,查看Windows任务管理器后,还余2G多可用,便将java在堆上默认的64M内存改为1G。重新调用fop.bat,终于顺利生成了PDF文件。
真是FOP也为内存而疯狂!