Author: cbowditch
Date: Mon May 11 15:56:59 2020
New Revision: 1877589

URL: http://svn.apache.org/viewvc?rev=1877589&view=rev
Log:
fix FOP-1648

Added:
    
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFGoToTestCase.java
Modified:
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
    xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFGoTo.java
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFANode.java
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFGraphics2D.java
    
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java?rev=1877589&r1=1877588&r2=1877589&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java 
(original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java 
Mon May 11 15:56:59 2020
@@ -519,6 +519,26 @@ public class PDFFactory {
     }
 
     /**
+     * Make an internal link.
+     *
+     * @param rect the hotspot position in absolute coordinates
+     * @param dest the position destination
+     * @param isNamedDestination set to true if dest param is a named 
destination
+     * @return the new PDF link object
+     */
+    public PDFLink makeLink(Rectangle2D rect, String dest, boolean 
isNamedDestination) {
+        PDFLink link = new PDFLink(rect);
+        getDocument().registerObject(link);
+
+        PDFAction pdfAction = new PDFGoTo(dest, isNamedDestination);
+        getDocument().registerObject(pdfAction);
+
+        link.setAction(pdfAction);
+
+        return link;
+    }
+
+    /**
      * Make a {@link PDFLink} object
      *
      * @param rect   the clickable rectangle

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFGoTo.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFGoTo.java?rev=1877589&r1=1877588&r2=1877589&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFGoTo.java 
(original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/pdf/PDFGoTo.java 
Mon May 11 15:56:59 2020
@@ -35,6 +35,19 @@ public class PDFGoTo extends PDFAction {
     private String destination;
     private float xPosition;
     private float yPosition;
+    private boolean isNamedDestination;
+
+    /**
+     * create a /GoTo object.
+     *
+     * @param destination name of the destination
+     * @param isNamedDestination set to true if the destination is a named 
destination
+     */
+    public PDFGoTo(String destination, boolean isNamedDestination) {
+        super();
+        this.destination = destination;
+        this.isNamedDestination = isNamedDestination;
+    }
 
     /**
      * create a /GoTo object.
@@ -125,6 +138,11 @@ public class PDFGoTo extends PDFAction {
                           + " " + yPosition + " null]\n";
         } else {
             dest = "/D [" + this.pageReference + " " + destination + "]\n";
+            if (this.isNamedDestination) {
+                dest = "/D (" + this.destination + ")\n";
+             } else {
+                dest = "/D [" + this.pageReference + " " + destination + "]\n";
+             }
         }
         return "<< /Type /Action\n/S /GoTo\n" + dest + ">>";
     }
@@ -172,7 +190,7 @@ public class PDFGoTo extends PDFAction {
             }
         }
 
-        return true;
+        return (isNamedDestination == gt.isNamedDestination);
     }
 }
 

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFANode.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFANode.java?rev=1877589&r1=1877588&r2=1877589&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFANode.java 
(original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFANode.java 
Mon May 11 15:56:59 2020
@@ -26,6 +26,7 @@ import java.awt.geom.Rectangle2D;
 import java.util.StringTokenizer;
 
 import org.apache.batik.gvt.CompositeGraphicsNode;
+import org.apache.fop.pdf.PDFLink;
 
 /**
  * <p>A graphics node that represents an image described as a graphics 
node.</p>
@@ -115,8 +116,11 @@ public class PDFANode extends CompositeG
 
                     destination = "" + x + " " + y + " "
                                   + (x + width) + " " + (y + height);
+                } else if (destination.startsWith("#")) {
+                    pdfg.addLink(getBounds(), transform, destination, 
PDFLink.INTERNAL);
+                } else {
+                    pdfg.addLink(getBounds(), transform, destination, type);
                 }
-                pdfg.addLink(getBounds(), transform, destination, type);
             }
         }
     }

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFGraphics2D.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFGraphics2D.java?rev=1877589&r1=1877588&r2=1877589&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFGraphics2D.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/svg/PDFGraphics2D.java
 Mon May 11 15:56:59 2020
@@ -421,9 +421,15 @@ public class PDFGraphics2D extends Abstr
             Rectangle rect = b.getBounds();
 
             if (linkType != PDFLink.EXTERNAL) {
-                String pdfdest = "/FitR " + dest;
-                resourceContext.addAnnotation(
-                    pdfDoc.getFactory().makeLink(rect, 
getPageReference().toString(), pdfdest));
+                if (dest.startsWith("#")) {
+                    String idDest = dest.substring(1);
+                    resourceContext.addAnnotation(
+                            pdfDoc.getFactory().makeLink(rect, idDest, true));
+                } else {
+                    String pdfdest = "/FitR " + dest;
+                    resourceContext.addAnnotation(
+                            pdfDoc.getFactory().makeLink(rect, 
getPageReference().toString(), pdfdest));
+                }
             } else {
                 resourceContext.addAnnotation(
                     pdfDoc.getFactory().makeLink(rect, dest, linkType, 0));

Modified: 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java?rev=1877589&r1=1877588&r2=1877589&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java
 Mon May 11 15:56:59 2020
@@ -20,6 +20,7 @@
 package org.apache.fop.pdf;
 
 import java.awt.Rectangle;
+import java.awt.geom.Rectangle2D;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -211,4 +212,19 @@ public class PDFFactoryTestCase {
 
         assertEquals(expectedString, pdfAction.toPDFString());
     }
+
+    @Test
+    public void testMakeLink() {
+        PDFDocument doc = new PDFDocument("");
+        PDFFactory pdfFactory = new PDFFactory(doc);
+        Rectangle2D rect = new Rectangle(10,20);
+        PDFLink link = pdfFactory.makeLink(rect, "dest", true);
+
+        String expectedString = "<< /Type /Annot\n" + "/Subtype /Link\n" + 
"/Rect [ "
+                + "0.0 0.0 10.0 20.0 ]\n/C [ 0 0 0 ]\n"
+                + "/Border [ 0 0 0 ]\n" + "/A 1 0 R"
+                + "\n/H /I\n\n>>";
+
+        assertEquals(expectedString, link.toPDFString());
+    }
 }

Added: 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFGoToTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFGoToTestCase.java?rev=1877589&view=auto
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFGoToTestCase.java
 (added)
+++ 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/pdf/PDFGoToTestCase.java
 Mon May 11 15:56:59 2020
@@ -0,0 +1,17 @@
+package org.apache.fop.pdf;
+
+import org.junit.Test;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class PDFGoToTestCase {
+
+    @Test
+    public void test() {
+        PDFGoTo pdfGoTo = new PDFGoTo("destination", true);
+        String expected = "<< /Type /Action\n"
+                + "/S /GoTo\n/D (destination)\n"
+                + ">>";
+        assertEquals(expected, pdfGoTo.toPDFString());
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscr...@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-h...@xmlgraphics.apache.org

Reply via email to