chrisg      2003/02/06 16:10:47

  Modified:    .        Tag: fop-0_20_2-maintain CHANGES
               examples/fo/basic Tag: fop-0_20_2-maintain link.fo
               src/codegen Tag: fop-0_20_2-maintain extproperties.xml
                        foproperties.xml
               src/org/apache/fop/datatypes Tag: fop-0_20_2-maintain
                        IDNode.java IDReferences.java
               src/org/apache/fop/extensions Tag: fop-0_20_2-maintain
                        ExtensionElementMapping.java
               src/org/apache/fop/fo/flow Tag: fop-0_20_2-maintain
                        BasicLink.java
               src/org/apache/fop/pdf Tag: fop-0_20_2-maintain
                        PDFDocument.java PDFGoTo.java PDFGoToRemote.java
                        PDFRoot.java
               src/org/apache/fop/render/pdf Tag: fop-0_20_2-maintain
                        PDFRenderer.java
  Added:       src/org/apache/fop/extensions Tag: fop-0_20_2-maintain
                        Destination.java
               src/org/apache/fop/pdf Tag: fop-0_20_2-maintain
                        PDFDestination.java
  Log:
  Added support for url()-syntax to the fo:basic-link-Element
  Submitted by: Stefan Wachter <[EMAIL PROTECTED]>
  Added new extension element for defining named destinations (PDF)
  Submitted by: Lloyd McKenzie <[EMAIL PROTECTED]> and Stefan Wachter
  Added support for linking to a specific page and a named destinations
  of an external PDF file
  Submitted by: Bernd Brandstetter <[EMAIL PROTECTED]>
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.10.2.47 +7 -0      xml-fop/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/xml-fop/CHANGES,v
  retrieving revision 1.10.2.46
  retrieving revision 1.10.2.47
  diff -u -r1.10.2.46 -r1.10.2.47
  --- CHANGES   4 Feb 2003 21:24:18 -0000       1.10.2.46
  +++ CHANGES   7 Feb 2003 00:10:44 -0000       1.10.2.47
  @@ -1,5 +1,12 @@
   ==============================================================================
   Done since 0.20.4 release
  +- Added support for url()-syntax to the fo:basic-link-Element
  +  Submitted by: Stefan Wachter <[EMAIL PROTECTED]>
  +- Added new extension element for defining named destinations (PDF)
  +  Submitted by: Lloyd McKenzie <[EMAIL PROTECTED]> and Stefan Wachter
  +- Added support for linking to a specific page and a named destinations
  +  of an external PDF file
  +  Submitted by: Bernd Brandstetter <[EMAIL PROTECTED]>
   - Added Turkish messages for AWT Viewer
     Submitted by: Togan Muftuoglu <[EMAIL PROTECTED]>
   - Fixed leader expansion and leader alignment to reference area to some
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.2   +10 -0     xml-fop/examples/fo/basic/link.fo
  
  Index: link.fo
  ===================================================================
  RCS file: /home/cvs/xml-fop/examples/fo/basic/link.fo,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- link.fo   13 Jan 2003 18:23:52 -0000      1.1.2.1
  +++ link.fo   7 Feb 2003 00:10:45 -0000       1.1.2.2
  @@ -128,6 +128,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>
   
   
                </fo:flow>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.4.1   +6 -1      xml-fop/src/codegen/Attic/extproperties.xml
  
  Index: extproperties.xml
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/codegen/Attic/extproperties.xml,v
  retrieving revision 1.1
  retrieving revision 1.1.4.1
  diff -u -r1.1 -r1.1.4.1
  --- extproperties.xml 6 Feb 2001 07:34:46 -0000       1.1
  +++ extproperties.xml 7 Feb 2003 00:10:45 -0000       1.1.4.1
  @@ -13,6 +13,11 @@
         <datatype>String</datatype>
         <default></default>
       </property>
  -    
  +    <property>
  +      <name>destination-name</name>
  +      <inherited>false</inherited>
  +      <datatype>String</datatype>
  +      <default></default>
  +    </property>
     </generic-property-list>
   </property-list>
  
  
  
  1.25.2.7  +7 -0      xml-fop/src/codegen/foproperties.xml
  
  Index: foproperties.xml
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/codegen/foproperties.xml,v
  retrieving revision 1.25.2.6
  retrieving revision 1.25.2.7
  diff -u -r1.25.2.6 -r1.25.2.7
  --- foproperties.xml  24 Nov 2002 07:23:51 -0000      1.25.2.6
  +++ foproperties.xml  7 Feb 2003 00:10:45 -0000       1.25.2.7
  @@ -1644,6 +1644,13 @@
         <default></default>
       </property>
       <property>
  +      <!-- Property of destination extension element -->
  +      <name>destination-name</name>
  +      <inherited>false</inherited>
  +      <datatype>String</datatype>
  +      <default></default>
  +    </property>
  +    <property>
         <name>show-destination</name>
         <inherited>false</inherited>
         <datatype>ToBeImplemented</datatype>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.4   +21 -1     xml-fop/src/org/apache/fop/datatypes/Attic/IDNode.java
  
  Index: IDNode.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/Attic/IDNode.java,v
  retrieving revision 1.4.2.3
  retrieving revision 1.4.2.4
  diff -u -r1.4.2.3 -r1.4.2.4
  --- IDNode.java       5 Nov 2002 07:53:47 -0000       1.4.2.3
  +++ IDNode.java       7 Feb 2003 00:10:45 -0000       1.4.2.4
  @@ -49,6 +49,26 @@
           return pageNumber;
       }
   
  +    /**
  +     * Returns the page reference.
  +     *
  +     * @return page reference of this node.
  +     */
  +    public String getPageReference() {
  +       if (null != internalLinkGoTo) {
  +         return internalLinkGoTo.getPageReference();
  +       } else {
  +         return internalLinkGoToPageReference;
  +       }
  +    }
  +
  +    public int getXPosition() {
  +       return xPosition;
  +    }
  +    
  +    public int getYPosition() {
  +       return yPosition;
  +    }
   
       /**
        * creates a new GoTo object for an internal link
  
  
  
  1.14.2.4  +21 -1     xml-fop/src/org/apache/fop/datatypes/Attic/IDReferences.java
  
  Index: IDReferences.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/Attic/IDReferences.java,v
  retrieving revision 1.14.2.3
  retrieving revision 1.14.2.4
  diff -u -r1.14.2.3 -r1.14.2.4
  --- IDReferences.java 5 Nov 2002 07:53:47 -0000       1.14.2.3
  +++ IDReferences.java 7 Feb 2003 00:10:45 -0000       1.14.2.4
  @@ -344,4 +344,24 @@
       public Iterator getInvalidElements() {
           return idValidation.keySet().iterator();
       }
  +    
  +    /**
  +     * Returns a destination reference for the node with the
  +     * specified id.  If id does not exist, returns null.
  +     * Destination format is: [ ?objectId 0 R /XYZ ?x ?y null ]
  +     *
  +     * @param id The id whose destination reference to return
  +     * @return Destination reference for this node
  +     */
  +    public String getDestinationRef(String id) {
  +        if (doesIDExist(id)) {
  +            IDNode node = (IDNode)idReferences.get(id);
  +            return "[ " + node.getPageReference() + " /XYZ " +
  +            node.getXPosition()/1000f + " " + node.getYPosition()/1000f + " null ]";
  +        } else {
  +            addToIdValidationList(id);
  +            return null;
  +        }
  +    }
  +    
   }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.5   +2 -1      
xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java
  
  Index: ExtensionElementMapping.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/org/apache/fop/extensions/ExtensionElementMapping.java,v
  retrieving revision 1.4.2.4
  retrieving revision 1.4.2.5
  diff -u -r1.4.2.4 -r1.4.2.5
  --- ExtensionElementMapping.java      24 Nov 2002 21:29:11 -0000      1.4.2.4
  +++ ExtensionElementMapping.java      7 Feb 2003 00:10:45 -0000       1.4.2.5
  @@ -26,6 +26,7 @@
               foObjs.put("outline", Outline.maker());
               foObjs.put("label", Label.maker());
               foObjs.put("continued-label", ContinuedLabel.maker());
  +            foObjs.put("destination", Destination.maker());
           }
       }
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +61 -0     xml-fop/src/org/apache/fop/extensions/Attic/Destination.java
  
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.8.2.6   +9 -1      xml-fop/src/org/apache/fop/fo/flow/BasicLink.java
  
  Index: BasicLink.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/BasicLink.java,v
  retrieving revision 1.8.2.5
  retrieving revision 1.8.2.6
  diff -u -r1.8.2.5 -r1.8.2.6
  --- BasicLink.java    22 Nov 2002 15:10:46 -0000      1.8.2.5
  +++ BasicLink.java    7 Feb 2003 00:10:45 -0000       1.8.2.6
  @@ -84,6 +84,14 @@
           } else if (!(destination =
           this.properties.get("external-destination").getString()).equals("")) {
               linkType = LinkSet.EXTERNAL;
  +            if (destination.startsWith("url(") && destination.endsWith(")")) {
  +                destination = destination.substring(4, destination.length() - 
1).trim();
  +                if (destination.startsWith("\"") && destination.endsWith("\"")) {
  +                    destination = destination.substring(1, destination.length() - 
1);
  +                } else if (destination.startsWith("'") && 
destination.endsWith("'")) {
  +                    destination = destination.substring(1, destination.length() - 
1);
  +                }
  +            }            
           } else {
               throw new FOPException("internal-destination or external-destination 
must be specified in basic-link");
           }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.30.2.6  +31 -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.30.2.5
  retrieving revision 1.30.2.6
  diff -u -r1.30.2.5 -r1.30.2.6
  --- PDFDocument.java  8 Nov 2002 10:25:26 -0000       1.30.2.5
  +++ PDFDocument.java  7 Feb 2003 00:10:46 -0000       1.30.2.6
  @@ -1000,6 +1000,7 @@
   
           PDFLink linkObject;
           PDFAction action;
  +        int index;
   
           PDFLink link = new PDFLink(++this.objectcount, rect);
           this.objects.add(link);
  @@ -1013,6 +1014,22 @@
                   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
                   PDFUri uri = new PDFUri(destination);
                   link.setAction(uri);
  @@ -1322,4 +1339,17 @@
           this.idReferences = idReferences;
       }
   
  +    /**
  +     * Make a destination object and add it
  +     * @param label the title for the new destination object
  +     * @param dest the destination name to reference
  +     */
  +    public void addDestination(String destinationName, String internalDest) {
  +       if (!idReferences.doesIDExist(internalDest)) {
  +           idReferences.addToUnvalidatedIdList(internalDest);
  +       }
  +       PDFDestination obj = new PDFDestination(idReferences, destinationName, 
internalDest);
  +       root.getDestinations().add(obj);
  +    }
  +    
   }
  
  
  
  1.6.2.2   +4 -2      xml-fop/src/org/apache/fop/pdf/PDFGoTo.java
  
  Index: PDFGoTo.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFGoTo.java,v
  retrieving revision 1.6.2.1
  retrieving revision 1.6.2.2
  diff -u -r1.6.2.1 -r1.6.2.2
  --- PDFGoTo.java      31 May 2002 00:17:16 -0000      1.6.2.1
  +++ PDFGoTo.java      7 Feb 2003 00:10:46 -0000       1.6.2.2
  @@ -48,7 +48,9 @@
           this.pageReference = pageReference;
       }
   
  -
  +    public String getPageReference() { 
  +      return pageReference;
  +    }
   
       /**
        * Sets the Y position to jump to
  
  
  
  1.3.2.2   +44 -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.2.1
  retrieving revision 1.3.2.2
  diff -u -r1.3.2.1 -r1.3.2.2
  --- PDFGoToRemote.java        31 May 2002 00:17:16 -0000      1.3.2.1
  +++ PDFGoToRemote.java        7 Feb 2003 00:10:46 -0000       1.3.2.2
  @@ -19,6 +19,8 @@
        * the file specification
        */
       protected PDFFileSpec pdfFileSpec;
  +    protected int pageReference = 0;
  +    protected String destination = null;
   
       /**
        * create an GoToR object.
  @@ -35,6 +37,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
  @@ -51,9 +85,15 @@
       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";
   
           try {
               return p.getBytes(PDFDocument.ENCODING);
  
  
  
  1.10.2.2  +22 -1     xml-fop/src/org/apache/fop/pdf/PDFRoot.java
  
  Index: PDFRoot.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/pdf/PDFRoot.java,v
  retrieving revision 1.10.2.1
  retrieving revision 1.10.2.2
  diff -u -r1.10.2.1 -r1.10.2.2
  --- PDFRoot.java      31 May 2002 00:17:16 -0000      1.10.2.1
  +++ PDFRoot.java      7 Feb 2003 00:10:46 -0000       1.10.2.2
  @@ -11,6 +11,7 @@
   import java.io.IOException;
   import java.io.UnsupportedEncodingException;
   import java.io.PrintWriter;
  +import java.util.*;
   
   /**
    * class representing a Root (/Catalog) object
  @@ -28,6 +29,11 @@
       private PDFOutline _outline;
   
       /**
  +     * Collection of destinations
  +     */
  +    private Collection _destinations;
  +
  +    /**
        * create a Root (/Catalog) object. NOTE: The PDFRoot
        * object must be created before the PDF document is
        * generated, but it is not assigned an object ID until
  @@ -76,6 +82,13 @@
           return _outline;
       }
   
  +    public Collection getDestinations() {
  +        if (_destinations == null) {
  +            _destinations = new ArrayList();
  +        }
  +        return _destinations;
  +    }
  + 
   
       /**
        * represent the object as PDF.
  @@ -95,6 +108,14 @@
               p.append(" /Outlines " + _outline.referencePDF() + "\n");
               p.append(" /PageMode /UseOutlines\n");
   
  +        }
  +        if (_destinations != null) {
  +           p.append(" /Names << /Dests << /Names [ ");
  +          for (Iterator i = _destinations.iterator(); i.hasNext(); ) {
  +              PDFDestination dest = (PDFDestination)i.next();
  +              p.append(dest.toPDF());
  +           }
  +           p.append(" ] >> >>\n");
           }
           p.append(" >>\nendobj\n");
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.1   +54 -0     xml-fop/src/org/apache/fop/pdf/Attic/PDFDestination.java
  
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.91.2.11 +4 -1      xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java
  
  Index: PDFRenderer.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/render/pdf/PDFRenderer.java,v
  retrieving revision 1.91.2.10
  retrieving revision 1.91.2.11
  diff -u -r1.91.2.10 -r1.91.2.11
  --- PDFRenderer.java  9 Jan 2003 01:25:41 -0000       1.91.2.10
  +++ PDFRenderer.java  7 Feb 2003 00:10:46 -0000       1.91.2.11
  @@ -915,6 +915,9 @@
                   ExtensionObj ext = (ExtensionObj) extensions.get(i);
                   if (ext instanceof Outline) {
                       renderOutline((Outline) ext);
  +                } else if (ext instanceof Destination) {
  +                    Destination d = (Destination)ext;
  +                    pdfDoc.addDestination(d.getDestinationName(), 
d.getInternalDestination());
                   }
               }
           }
  
  
  

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

Reply via email to