1

We print on Fop.0.9.4. Windows 10 system. Xml file 1.5mb size (not very big).

In xml file this structure:

<root>
 <element />
 <element />
 <element />
 <element />
... 3000 elements or more
</root>

In xslt file we write

<for-each select="root/element">
 <block-container>
  <some-simple-elements>
 </block-container>
</for-each>

If count of pages less 500, than fop is worked, but if 501 pages or more print is crashed.

On log:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Unknown Source)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuffer.append(Unknown Source)
at org.apache.fop.layoutmgr.AbstractLayoutManager.addChildLM(AbstractLayoutManager.java:317)
at org.apache.fop.layoutmgr.AbstractLayoutManager.addChildLMs(AbstractLayoutManager.java:331)
at org.apache.fop.layoutmgr.AbstractLayoutManager.createNextChildLMs(AbstractLayoutManager.java:291)
at org.apache.fop.layoutmgr.LMiter.hasNext(LMiter.java:40)
at org.apache.fop.layoutmgr.AbstractLayoutManager.getChildLM(AbstractLayoutManager.java:115)
at org.apache.fop.layoutmgr.table.TableCellLayoutManager.getNextKnuthElements(TableCellLayoutManager.java:162)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.createElementsForRowGroup(TableContentLayoutManager.java:490)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.getKnuthElementsForRowIterator(TableContentLayoutManager.java:251)
at org.apache.fop.layoutmgr.table.TableContentLayoutManager.getNextKnuthElements(TableContentLayoutManager.java:179)
at org.apache.fop.layoutmgr.table.TableLayoutManager.getNextKnuthElements(TableLayoutManager.java:243)
at org.apache.fop.layoutmgr.BlockContainerLayoutManager$BlockContainerBreaker.getNextKnuthElements(BlockContainerLayoutManager.java:612)
at org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreaker.java:551)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:301)
at org.apache.fop.layoutmgr.BlockContainerLayoutManager.getNextKnuthElementsAbsolute(BlockContainerLayoutManager.java:509)
at org.apache.fop.layoutmgr.BlockContainerLayoutManager.getNextKnuthElements(BlockContainerLayoutManager.java:195)
at org.apache.fop.layoutmgr.StaticContentLayoutManager$StaticContentBreaker.getNextKnuthElements(StaticContentLayoutManager.java:317)
at org.apache.fop.layoutmgr.AbstractBreaker.getNextBlockList(AbstractBreaker.java:551)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:301)
at org.apache.fop.layoutmgr.StaticContentLayoutManager.doLayout(StaticContentLayoutManager.java:239)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager.layoutSideRegion(PageSequenceLayoutManager.java:407)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager.finishPage(PageSequenceLayoutManager.java:415)
at org.apache.fop.layoutmgr.PageSequenceLayoutManager.makeNewPage(PageSequenceLayoutManager.java:377)
at org.apache.fop.layoutmgr.PageBreaker.handleBreakTrait(PageBreaker.java:492)
at org.apache.fop.layoutmgr.PageBreaker.startPart(PageBreaker.java:398)
at org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.java:420)
at org.apache.fop.layoutmgr.AbstractBreaker.addAreas(AbstractBreaker.java:370)
at org.apache.fop.layoutmgr.PageBreaker.doPhase3(PageBreaker.java:262)
at org.apache.fop.layoutmgr.AbstractBreaker.doLayout(AbstractBreaker.java:345)

1 Answers1

1

Use 64 bit Java Runtime

If you are running 32 bit Java Runtime, the maximum heap size is 1024. But with 64 bit it can go as high as your CPU RAM. For my case, I need to set to 9216MB and I can render up to 5,000 pages of PDF.

kai sek
  • 11
  • 1