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