chrisg      2002/10/16 10:01:56

  Modified:    .        status.xml
               docs/examples/fo link.fo
               src/org/apache/fop/pdf PDFDocument.java PDFGoToRemote.java
  Log:
  Addes Linking to a specific page and a named destinations of an
  external PDF file (see www.adobe.com/products/acrobat/pdfs/c01acrotip.pdf)
  Submitted by: Bernd Brandstetter <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  1.13      +6 -0      xml-fop/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/xml-fop/status.xml,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- status.xml        13 Sep 2002 10:23:56 -0000      1.12
  +++ status.xml        16 Oct 2002 17:01:56 -0000      1.13
  @@ -123,6 +123,12 @@
   
     <changes>
      <release version="?" date="2002">
  +    <action dev="CG" type="add" context="code"
  +            due-to="Bernd Brandstetter" due-to-email="[EMAIL PROTECTED]">
  +      Linking to a specific page and a named destinations of an
  +      external PDF file.
  +      (see www.adobe.com/products/acrobat/pdfs/c01acrotip.pdf)
  +    </action>
       <action context="code" dev="KLL" type="update">
         Started table layout managers.
       </action>
  
  
  
  1.9       +10 -0     xml-fop/docs/examples/fo/link.fo
  
  Index: link.fo
  ===================================================================
  RCS file: /home/cvs/xml-fop/docs/examples/fo/link.fo,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- link.fo   11 Dec 2001 12:08:28 -0000      1.8
  +++ link.fo   16 Oct 2002 17:01:56 -0000      1.9
  @@ -114,6 +114,16 @@
                                go to <fo:basic-link 
external-destination="normal.pdf">normal.pdf</fo:basic-link>
                        </fo:block>
   
  +                     <!-- Normal text -->
  +                     <fo:block text-align="start"
  +                                                             
space-before.optimum="6pt"
  +                                                             line-height="24pt"
  +                                                             font-family="serif"
  +                                                             padding-top="3pt"
  +                                                             >
  +                             9. Linking to a specific page of an external:
  +                             <fo:basic-link 
external-destination="extensive.pdf#page=1">extensive.pdf, Page 2</fo:basic-link>.
  +                     </fo:block>
   
                        <!-- Normal text -->
   <!--      <fo:block text-align="start"
  
  
  
  1.54      +18 -1     xml-fop/src/org/apache/fop/pdf/PDFDocument.java
  
  Index: PDFDocument.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFDocument.java,v
  retrieving revision 1.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- PDFDocument.java  17 Sep 2002 09:20:57 -0000      1.53
  +++ PDFDocument.java  16 Oct 2002 17:01:56 -0000      1.54
  @@ -1233,6 +1233,7 @@
   
           PDFLink linkObject;
           PDFAction action;
  +        int index;
   
           PDFLink link = new PDFLink(++this.objectcount, rect);
           this.objects.add(link);
  @@ -1244,6 +1245,22 @@
                                                          destination);
                   this.objects.add(fileSpec);
                   action = new PDFGoToRemote(++this.objectcount, fileSpec);
  +                this.objects.add(action);
  +                link.setAction(action);
  +            } else if ((index = destination.indexOf(".pdf#page=")) > 0) {
  +                String file = destination.substring(0, index + 4);
  +                int page = Integer.parseInt(destination.substring(index + 10));
  +                PDFFileSpec fileSpec = new PDFFileSpec(++this.objectcount, file);
  +                this.objects.add(fileSpec);
  +                action = new PDFGoToRemote(++this.objectcount, fileSpec, page);
  +                this.objects.add(action);
  +                link.setAction(action);
  +            } else if ((index = destination.indexOf(".pdf#dest=")) > 0) {
  +                String file = destination.substring(0, index + 4);
  +                String dest = destination.substring(index + 10);
  +                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 {                               // URI
  
  
  
  1.4       +45 -4     xml-fop/src/org/apache/fop/pdf/PDFGoToRemote.java
  
  Index: PDFGoToRemote.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFGoToRemote.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PDFGoToRemote.java        30 Jul 2001 20:29:30 -0000      1.3
  +++ PDFGoToRemote.java        16 Oct 2002 17:01:56 -0000      1.4
  @@ -16,6 +16,8 @@
        * the file specification
        */
       protected PDFFileSpec pdfFileSpec;
  +    protected int pageReference = 0;
  +    protected String destination = null;
   
       /**
        * create an GoToR object.
  @@ -32,6 +34,38 @@
       }
   
       /**
  +     * create an GoToR object.
  +     *
  +     * @param number the object's number
  +     * @param fileSpec the fileSpec associated with the action
  +     * @param page a page reference within the remote document
  +     */
  +    public PDFGoToRemote(int number, PDFFileSpec pdfFileSpec, int page) {
  +
  +        /* generic creation of object */
  +        super(number);
  +
  +        this.pdfFileSpec = pdfFileSpec;
  +        this.pageReference = page;
  +    }
  +
  +    /**
  +     * create an GoToR object.
  +     *
  +     * @param number the object's number
  +     * @param fileSpec the fileSpec associated with the action
  +     * @param dest a named destination within the remote document
  +     */
  +    public PDFGoToRemote(int number, PDFFileSpec pdfFileSpec, String dest) {
  +
  +        /* generic creation of object */
  +        super(number);
  +
  +        this.pdfFileSpec = pdfFileSpec;
  +        this.destination = dest;
  +    }
  +
  +    /**
        * return the action string which will reference this object
        *
        * @return the action String
  @@ -48,9 +82,16 @@
       public byte[] toPDF() {
           String p = new String(this.number + " " + this.generation + " obj\n"
                                 + "<<\n/S /GoToR\n" + "/F "
  -                              + pdfFileSpec.referencePDF() + "\n"
  -                              + "/D [ 0 /XYZ null null null ]"
  -                              + " \n>>\nendobj\n");
  +                              + pdfFileSpec.referencePDF() + "\n");
  +
  +        if (destination != null) {
  +            p += "/D (" + this.destination + ")";
  +        } else {
  +            p += "/D [ " + this.pageReference + " /XYZ null null null ]";
  +        }
  +
  +        p += " \n>>\nendobj\n";
  +
           return p.getBytes();
       }
   
  
  
  

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

Reply via email to