Author: ssteiner
Date: Mon Nov 27 11:25:42 2017
New Revision: 1816435

URL: http://svn.apache.org/viewvc?rev=1816435&view=rev
Log:
FOP-2760: Make unique links for merged IF

Modified:
    
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
    
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/extensions/DocumentNavigationHandlerTestCase.java

Modified: 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java?rev=1816435&r1=1816434&r2=1816435&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/main/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
 Mon Nov 27 11:25:42 2017
@@ -147,7 +147,7 @@ public class PDFDocumentNavigationHandle
         if (action == null) {
             return null;
         }
-        PDFAction pdfAction = 
(PDFAction)this.completeActions.get(action.getID());
+        PDFAction pdfAction = 
(PDFAction)this.completeActions.get(getCompleteID(action));
         if (pdfAction != null) {
             return pdfAction;
         } else if (action instanceof GoToXYAction) {
@@ -175,7 +175,7 @@ public class PDFDocumentNavigationHandle
                 //Some PDF actions are pooled
                 getPDFDoc().registerObject(pdfAction);
             }
-            this.completeActions.put(action.getID(), pdfAction);
+            this.completeActions.put(getCompleteID(action), pdfAction);
             return pdfAction;
         } else {
             throw new UnsupportedOperationException("Unsupported action type: "
@@ -202,8 +202,16 @@ public class PDFDocumentNavigationHandle
 
             //Queue this object now that it's complete
             getPDFDoc().addObject(pdfGoTo);
-            this.completeActions.put(action.getID(), pdfGoTo);
+            this.completeActions.put(getCompleteID(action), pdfGoTo);
         }
     }
 
+    private String getCompleteID(AbstractAction action) {
+        if (action instanceof GoToXYAction && action.isComplete()) {
+            int extra = ((GoToXYAction) action).getPageIndex();
+            return action.getID() + "_" + extra;
+        }
+        return action.getID();
+    }
+
 }

Modified: 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/extensions/DocumentNavigationHandlerTestCase.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/extensions/DocumentNavigationHandlerTestCase.java?rev=1816435&r1=1816434&r2=1816435&view=diff
==============================================================================
--- 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/extensions/DocumentNavigationHandlerTestCase.java
 (original)
+++ 
xmlgraphics/fop/trunk/fop-core/src/test/java/org/apache/fop/render/extensions/DocumentNavigationHandlerTestCase.java
 Mon Nov 27 11:25:42 2017
@@ -22,7 +22,9 @@ import java.awt.Dimension;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 
 import javax.xml.transform.stream.StreamResult;
@@ -85,4 +87,43 @@ public class DocumentNavigationHandlerTe
         //Since user may merge IF files we want to use current page
         Assert.assertEquals(goToXYActions.get(0).getPageIndex(), currentPage);
     }
+
+    @Test
+    public void testGotoXYUniqueLinks() throws IFException, SAXException {
+        FOUserAgent ua = FopFactory.newInstance(new 
File(".").toURI()).newFOUserAgent();
+        PDFDocumentHandler documentHandler = new PDFDocumentHandler(new 
IFContext(ua));
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        documentHandler.setResult(new StreamResult(bos));
+        documentHandler.setFontInfo(new FontInfo());
+        documentHandler.startDocument();
+
+        PDFDocumentNavigationHandler pdfDocumentNavigationHandler = new 
PDFDocumentNavigationHandler(documentHandler);
+        DocumentNavigationHandler navigationHandler = new 
DocumentNavigationHandler(pdfDocumentNavigationHandler,
+                new HashMap<String, StructureTreeElement>());
+        QName xy = DocumentNavigationExtensionConstants.GOTO_XY;
+
+        Attributes attributes = mock(Attributes.class);
+        when(attributes.getValue("page-index")).thenReturn("0");
+        when(attributes.getValue("x")).thenReturn("0");
+        when(attributes.getValue("y")).thenReturn("0");
+
+        documentHandler.startPage(0, "", "", new Dimension());
+        navigationHandler.startElement(xy.getNamespaceURI(), 
xy.getLocalName(), null, attributes);
+        navigationHandler.endElement(xy.getNamespaceURI(), xy.getLocalName(), 
null);
+        documentHandler.endPage();
+        documentHandler.startPage(1, "", "", new Dimension());
+        navigationHandler.startElement(xy.getNamespaceURI(), 
xy.getLocalName(), null, attributes);
+        navigationHandler.endElement(xy.getNamespaceURI(), xy.getLocalName(), 
null);
+        documentHandler.endPage();
+
+        Iterator<String> i = 
Arrays.asList(bos.toString().split("\n")).iterator();
+        List<String> pageLink = new ArrayList<String>();
+        while (i.hasNext()) {
+            if (i.next().equals("/S /GoTo")) {
+                pageLink.add(i.next());
+            }
+        }
+        Assert.assertEquals(pageLink.size(), 2);
+        Assert.assertFalse(pageLink.get(0).equals(pageLink.get(1)));
+    }
 }



---------------------------------------------------------------------
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