Quoting [EMAIL PROTECTED]:

> Quoting Victor Mote <[EMAIL PROTECTED]>:
> 
> > [EMAIL PROTECTED] wrote:
> > 
> > > We have an api that generates a sort of "barcode" image that 
> > > needs to be put on the bottom of each page.  However, each 
> > > image is unique and needs to be generated with some 
> > > information from the xml document.  I know I can do this by 
> > > using a REST api call and putting a URL in the fo:graphic 
> > > that dynamically generates the image.  However, I'd rather do 
> > > it right in the Java code that sets up the Driver.  So, is 
> > > this possible?  Some thoughts I have, but don't know if they exist:
> > 
> > My guess is that markers with a URL would be the easiest and most standard
> > way to do this. But I'll take your word for it that you want the callback.
> > 
> > > 1. Can I get a callback that calls my Java code when a 
> > > certain fo:graphic element is hit and let me dynamically put 
> > > the XSL:FO content in there?  This would allow me to 
> > > dynamically generate the images on the fly and put the 
> > > appropriate image content in .
> > 
> > I think you can do this, but again, it seems like a pain. IIRC correctly,
> > the FONode class has a getParent() method which can be used to recursively
> > go up the tree until you get to the Root (keep in mind that this is XML/FO
> > inheritance, not Java inheritance). I would cache the object that will
> > generate the image in Root, and, if it does not exist already, write an
> > FONode method called getRoot() which will recursively go up the tree to
> Root
> > and return Root. Then, you'll need to modify the code that creates the
> image
> > in the AreaTree, and then use your (presumably) ExternalGraphic node to do
> > something like the following:
> >     YourGraphicMaker ygm =
> > externalGraphic.getRoot().getYourGraphicMaker();
> >     Image image = ygm.makeGraphic(externalGraphic);
> >     // pass the image instance where it needs to go.
> > 
> > I have used the above technique successfully to handle global items like
> > loggers and subsystem servers.
> > 
> > > 2. Can I put custom xsl:fo elements in the document and then 
> > > register my own "renderers" for dealing with those types?
> > 
> > The renderers are more oriented toward a given output medium, so you are
> > more likely going to be modifying or extending one to handle your custom
> > elements, but yes, this general technique could work as well. My guess is
> > that this is probably even more of a pain than option 1 above. Some
> > information is here:
> > http://xml.apache.org/fop/dev/extensions.html
> > 
> > Victor Mote
> > 
> 
> You are correct that doing a custom servlet REST style api for generating
> the
> images would be the cleanest.  However, we have some serious performance
> needs,
> and I am reluctant to throw another piece in this that introduces http with
> something that could be a local method call.
> 
> Looking through the source code, it seems like the
> org.apache.fop.image.analyser
> .ImageReaderFactory class might be something I could use.  It looks like if
> I
> write my own custom URL, and register my class as a reader, I will get
> called
> through the verifySignature method of ImageReader.  As long as I am the only
> one that can deal with the image, I should be all set.
> 
> The other thought I had with looking at the code is regsitering my own
> custom
> URL through the JDK mechanisms.
> 
> Irv
> 

One more question:

While looking into this code, it looks like the FopImageFactory opens up a
stream to the image using the URL class, then the specific ImageReader
implementation reopens the stream again.  So, if I did a REST style interface
to generate my images, it looks like it would be called twice.  Am I missing
something here?  It looks like this is a little inefficient.

Irv


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to