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