Hi Ricardo,

your additions seem right to me. Yet, I would recommend not to replace the
"#dest="-syntax by the the "#nameddest"-syntax but to add simply another
option. In other words there would be the following options to specify named
destinations:

1. ".pdf#page="
2. ".pdf#dest="
3. ".pdf#nameddest="
4. ".pdf#"

The syntax used inside FOP to describe named destination must not
necessarily support only what Adobe suggests.

--Stefan


> Hi all,
> 
> I'm really glad to see that in 0.20.5 it will be possible to create
> named destinations in PDF. I have some small sugestions about this
> functionality.
> 
> I'm using Acrobat Reader 5.1 and I was surprised to find out that the
> url syntax '.pdf#dest=<NamedDest>' wasn't working for me. I've looked
> deeper into
> http://www.adobe.com/products/acrobat/pdfs/c01acrotip.pdf#page=4 and I
> found a difference between the table (.pdf#dest=<NamedDest>) and the
> examples (.pdf#namedest=<NamedDest>). Helas the syntax
> '.pdf#namedest=<NamedDest>' also didn't work. Finally I've tried the
> syntax '.pdf#nameddest=<NamedDest>' and it worked. I've also tested the
> syntax '.pdf#<NamedDest>' and it also works fine. After some googling I
> found http://www.adobe.com/support/techdocs/a17e.htm and it looks like
> that the later form is really the one supported. If you believe it to be
> safe, the changes required to contemplate the working forms in
> pdf/PDFDocument.java would be:
> 
> Change PDF urls with named destinations
> 
> Diff for src/org/apache/fop/pdf/PDFDocument.java (rev 1.30.2.8)
> 1096c1096
> <              } else if ((index = destination.indexOf(".pdf#dest=")) >
> 0) {
> ---
> >              } else if ((index =
> destination.indexOf(".pdf#nameddest=")) > 0) {
> 1098c1098,1106
> <                  String dest = destination.substring(index + 10);
> ---
> >                  String dest = destination.substring(index + 15);
> >                  PDFFileSpec fileSpec = new
> PDFFileSpec(++this.objectcount, file);
> >                  this.objects.add(fileSpec);
> >                  action = new PDFGoToRemote(++this.objectcount,
> fileSpec, dest);
> >                  this.objects.add(action);
> >                  link.setAction(action);
> >              } else if ((index = destination.indexOf(".pdf#")) > 0) {
> >                  String file = destination.substring(0, index + 4);
> >                  String dest = destination.substring(index + 5);
> 
> In my use of named destinations, I generate named destinations for every
> bookmark I have in my documents. The fact that the extension element
> fox:destination is only processed when used as a "root" element forces
> me to make and additional pass on my xml document just to generate the
> named destinations. If fox:destination was also processed whent it is
> used as a child of a fox:outline, I could avoid that additional pass.
> One way to achieve this, would be to add/change the following in
> extensions/Outline.java and render/pdf/PDFRenderer.java:
> 
> Allow fox:destination as child of fox:outline
> 
> Diff for src/org/apache/fop/extensions/Outline.java (maint rev 1.4.2.5)
> 63a64
> >     private ArrayList _destinations = new ArrayList();
> 119a121,122
> >         } else if (obj instanceof Destination) {
> >             _destinations.add(obj);
> 142a146,149
> >     }
> > 
> >     public ArrayList getDestinations() {
> >         return _destinations;
> 
> Diff for src/org/apache/fop/render/pdf/PDFRenderer.java (maint rev
> 1.91.2.15)
> 986,987c986
> <                     Destination d = (Destination)ext;
> <                     pdfDoc.addDestination(d.getDestinationName(),
> d.getInternalDestination());
> ---
> >                     renderDestination((Destination) ext);
> 1021a1021,1030
> > 
> >         // handle sub destinations
> >         List vd = outline.getDestinations();
> >         for (int i = 0; i < vd.size(); i++) {
> >             renderDestination((Destination) vd.get(i));
> >         }
> >     }
> > 
> >     private void renderDestination(Destination d) {
> >         pdfDoc.addDestination(d.getDestinationName(),
> d.getInternalDestination());
> 
> BTW, shouldn't the method getName in extensions/Outline.java return
> "fox:outline" instead of "fop:outline"? The constructor warning messages
> use "fox:outline".
> 
> This is probably not the best way to provide this kind of patches. If
> you need anything else, feel free to ask, I'll do my best. I try to
> follow the digest of this list, but it might be better to email me
> directly also. In the last few days I've also added some problems to
> Bugzilla. This is the first time I use Bugzilla and I've tried not to
> waste your time and be as effective as possible. I hope I didn't make
> anything wrong...
> 
> Congratulations to you all for the excellent job you are doing, :-))
> 
> Ricardo Amador
> 


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

Reply via email to