I'm trying to get large PDF reports streaming to the browser so that: 1. not too much memory is used (we can support multiple users doing reports) 2. we can support arbitrarily large reports 3. the user sees data dribbling onto their screen rather than being left to wonder if anything is happening
(Please don't ask if anybody can really do anything useful with such big reports). We'd like to get: a) SQLTransformer to perform a query, b) XSLT to produce fo, c) fop to produce pdf and d) the browser to all stream properly, but at the moment it looks like there are problems at b), c) and d). Evidence follows. I believe we should be able to get XSLT and fop streaming. Has anybody managed to? I'm using cocoon-2.0 with updates as described below. Does cocoon-2.0.1 have some other updates that are required to make this stream? Test conditions are described at the end, here are the results: a)query b)fo c)fop before start of o/p 0:00:10 0:02:40 0:11:21 duration of o/p 0:02:20 0:00:40 0:01:38 size of o/p 43179378 22849290 33346282 The first column, a) shows the production of xml by SQLTransformer calling a SQL Server stored procedure that returns 93000 rows. The file started growing after 10 secs and was complete after another 2 minutes 20 secs. So SQLTransformer by itself streams OK. The 2nd column, b) shows the same thing as a) but with XSLT added. The style sheet is almost as simple as possible to produce xsl-fo. It produces a page (<fo:page-sequence><fo:flow><fo:block>) containing only the word "details" for each <sql:row>. There are no fancy XPath expressions that could be responsable for stopping it streaming. It takes longer to start producing output than a) took to complete. Apparently it doesn't stream. I've updated to xalan-2.2.0.jar and set "incremental-processing" to "true" in cocoon.xconf in an effort to make it stream. The last column, c) shows the same thing as b) but with fop pdf serialization added. It takes 11 minutes to start outputting then only another 1 1/2 minutes to complete writing 32Mb of pdf. The mail archives suggest that fop can only do output when it gets to a </fo:page-sequence>. That's why I produced a separate <fo:page-sequence> for each row in b), but it still doesn't stream. See: http://marc.theaimsgroup.com/?l=fop-user&m=101405590416285&w=2 As for d) displaying the data in the browser as it arrives, it seems there is a problem here too. fop produces "non-optimized" pdf. For acrobat reader to start rendering before all the data has arrived the pdf has to be "optimized". I believe this is on the fop "to do" list but not yet done. See: http://marc.theaimsgroup.com/?l=fop-dev&m=99556319518135&w=2 Test conditions: - 384M physical memory - jdk 1.3.1-02 server JVM with: -server -Xmx356M cocoon-2.0 mods: - patched SQLTransformer.java for ResultSets returned from SQL Server stored procedures See: http://marc.theaimsgroup.com/?t=101316904300002&r=1&w=2 - xalan-2.2.0.jar, fop-0.20.3rc.jar (instead of xalan-2.2.0-D13.jar, fop-0.20.1-dev.jar) - xerces config: incremental-processing="true" in cocoon.xconf (originally false) - janitor store config: freememory="20000000", heapsize="240000000" in cocoon.xconf I'm using a java programme instead of a browser so that I know when the data starts arriving. --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faqs.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>