You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-users@xmlgraphics.apache.org by Chuck Paussa <Ch...@systems.dhl.com> on 2001/11/14 21:30:56 UTC
Re: How to avoid using too much memory to create relatively large PDF file
Xingjian,
80 Mb is not bad. We allocate 250Mb to process my documents. I've been
monitering the conversations on memory usage on fop-dev and the short
story is this:
They're working on several schemes to reduce memory usage. Those schemes
won't bear fruit for a while. Until then, the only suggestion I've seen
is do the following:
Create new page sequences as often as you can. I'm able to calculate my
page sizes before calling FOP (It's a line oriented report), so I'm
manually creating a page sequence for each page. Other people are
creating page sequences for each section etc. The drawback to creating a
page sequence is that a page sequence forces a page break. (Oh well, I'm
not busted up about this because I'm manually calculating my pages.) The
plus to this is that now you can process huge HUGE files. My old process
was crashing whenever it encountered a report with greater than 70 pages
or so. Now I can process reports of arbitrary size.
With the page sequences you will notice that FOP consumes all available
memory and then starts garbage collecting when it runs out. Garbage
collection takes time, so processing speed is not improved. Your ability
to process more pages is improved though.
How we calculate page sequences:
We process the original XML into a new XML that holds all the lines.
<line>
<col1>gdsj</col1>
<col2>e8whe</col2>
...
</line>
<line type="subtotal">
...
If the number of lines will create a report that's bigger than 40 pages
(meaning it might crash FOP) We reprocess the thing to add in <page> tags
<page>
<line>
<col1>gdsj</col1>
<col2>e8whe</col2>
...
</line>
<line type="subtotal">
...
</page>
And then reprocess that xml to generate a new page sequence per page.
(Example of the code inserted at each page break follows:
</fo:table-body>
</fo:table>
</fo:flow>
</fo:page-sequence>
<!-- page break -->
<fo:page-sequence master-name="master-sequence">
<fo:static-content flow-name="header">
<fo:block> pg. <fo:page-number/> of <fo:page-number-citation
ref-id="terminator"/> </fo:block>
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<fo:table font-family="Helvetica" font-size="7pt"
font-weight="normal">
<fo:table-column column-width="18mm" column-number="1"/>
<fo:table-column column-width="13mm" column-number="2"/>
<fo:table-column column-width="20mm" column-number="3"/>
. more columns here
. . .
<fo:table-header>
<fo:table-row>
<fo:table-cell display-align="after" column-number="1">
<fo:block text-align="start">DATE </fo:block>
</fo:table-cell>
<fo:table-cell display-align="after" column-number="2">
<fo:block text-align="start"> CODE </fo:block>
</fo:table-cell>
. more columns here
. . .
</fo:table-row>
</fo:table-header>
<fo:table-body>
Xingjian Shangguan wrote:
> Hi,
>
> I am using most recent FOP, Xalan and Xerces to create PDF from the
> relatively large amount of data from database.
>
> The program works like this: I first get data from database, produce
> XML and use Xalan to process xml/xsl to create FO, then I use FOP to
> create PDF file. I am able to create PDF files without any problem,
> however, I need to manually allocate a lot of memory to process the FO
> (like 80M). The vast amount of memory is needed exactly when FO is
> processed to create PDF file. My FO create from my XML data and XSL
> is as large as 1.5M. Does any one have any idea how can I avoid
> occupying too much memory.
>
> Thanks in advance for your suggestion.
>
> Sean
>
>
> ====================
> Xingjian Shangguan
> (732) 424-3980 (H)
> (732) 718-9522 (C)
> (212) 622-3098 (O)
> ====================
>
>
> _________________________________________________________________
> Get your FREE download of MSN Explorer at
> http://explorer.msn.com/intl.asp
>