Yes, CachedRenderPagesModel lies around unused but it still works.
Here's some (uncleaned) example code that shows how to use it.
public class AreaTreeTests {
private static class MyAreaTreeHandler extends AreaTreeHandler {
public MyAreaTreeHandler(FOUserAgent userAgent, String outputFormat,
OutputStream stream) throws FOPException {
super(userAgent, outputFormat, stream);
}
protected void setupModel(FOUserAgent userAgent, String outputFormat, OutputStream
stream) throws FOPException {
//super.setupModel(userAgent, outputFormat, stream);
this.model = new CachedRenderPagesModel(userAgent, outputFormat, fontInfo,
stream);
}
}
private static void doit() throws Exception {
FopFactory fopFactory = FopFactory.newInstance();
fopFactory.setUserConfig(new File("C:/Dev/FOP/main/userconfig.xml"));
final int maxRepeats = 100;
for (int repeat = 0; repeat < maxRepeats; repeat++) {
FOUserAgent ua = fopFactory.newFOUserAgent();
//String outputFormat = MimeConstants.MIME_FOP_AREA_TREE;
//outputFormat = MimeConstants.MIME_PDF;
String outputFormat = MimeConstants.MIME_POSTSCRIPT;
//File foFile = new File("C:/Dev/FOP/main/xml-fop-temp/examples/fo/basic/readme.fo");
File foFile = new File("C:/Dev/FOP/temp/tree-model-check.fo");
//File outFile = new File("D:/out.at.xml");
File outFile = new File("D:/out.ps");
OutputStream out = new FileOutputStream(outFile);
out = new BufferedOutputStream(out);
try {
Fop fop = fopFactory.newFop(outputFormat, ua, out);
AreaTreeHandler atHandler = new MyAreaTreeHandler(ua, outputFormat, out);
ua.setFOEventHandlerOverride(atHandler);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
Source src = new StreamSource(foFile);
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
} finally {
IOUtils.closeQuietly(out);
}
}
}
public static void main(String[] args) {
try {
doit();
} catch (Exception e) {
e.printStackTrace();
}
}
}
This should allow you to do a few experiments.
At any rate, this approach may help in certain situations (such as many
small page-sequences). But in situation with large page-sequences, it
won't help as the layout engine can't process the FO tree while it is
built and because finished FOs are not released before the page-sequence
is finished. Have fun.
On 17.09.2008 18:16:15 Dario Laera wrote:
> Hi all,
>
> in fop documentation site there are at least two page that talk about
> memory caching on disk for page that contains unresolved forward
> references: http://xmlgraphics.apache.org/fop/dev/design/layout.html#issue-area-recycle
> and http://xmlgraphics.apache.org/fop/dev/design/
> areas.html#caching . I was thinking that this was just a nice idea not
> implemented yet: my tests with hundreds of single page page-sequences
> was often ending in OutOfMemory due to the "Page X of Y" block in the
> footer. But looking at the code in FOP trunk I found the class
> CachedRenderPagesModel that seems to do that caching; unfortunately
> this class is never instantiated.
> Was this class intended for unresolved forward reference issue? What
> is missing for having this kind of caching working? Is someone working
> on it?
>
> Thanks in advances
> Dario
Jeremias Maerki
|