Hmm, you're right. This is more complicated that I thought. Getting the actual position of a link destination on a page is easily done with information from PDFRenderer. But to know the actual page of the link destionation requires the registration of the ID as an item of interest at layout time. For basic-link this is a single INTERNAL_DESTINATION trait that is set on the area tree object, resolved by a LinkResolver. For an SVG, however, only a single area is created and you might have multiple links from the SVG into areas created from XSL-FO. This would require something slightly different from a LinkResolver, plus you'd need to scan the SVG at layout time for any links into XSL-FO so their page number is resolved during layout. That needs some additional infrastructure (both Java classes and area tree XML). This should probably be done by extending Image and ForeignObject (in the area package) from a common superclass which can take a list of link destinations. The LinkResolver probably can't be used for this, but fortunately, it's just a matter of creating another Resolvable and making sure it is used.
So in all, not trivial at all, but this could actually be used later should anyone ever plug in (X)HTML support into FOP, too. Or JEuclid could use something like that for XLinks in MathML back into XSL-FO. Maybe that helps. I hope I didn't scare you too much. On 02.09.2008 23:31:57 Stefan Bund wrote: > Replying to my own post since I have gotten a little bit further. > > Implementing internal links seems to be more complicated than I had > expected. As far as I understand, internal links are resolved within > the area tree before the tree is rendered. An (external) SVG image > resource howvever is only parsed at the render stage. > > However, I could get further if I could access the AreaTreeManager > (and thereby its IdTracker) from the PDFANode. However, I could not > find any way to get there (I have the PDFGraphics2D object and I can > get the PDFDocument or RendererContext but I could not find a > reference to the AreaTreeManager anywhere). > > I know, this is probably not the correct way to do this (I would need > to somehow create a LinkResolver for every link in the SVG file while > creating the area tree but at the moment that is way over my head). I > hope, I can resolve the id's by just querying the IdTracker. This will > possibly only work when the id is referenced from some other place, > but it would be a start. > > Any pointer how to proceed? > > And maybe I got everything completely wrong. If so, could someone > please set me right? > > stefan. > Jeremias Maerki --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
