diff options
author | Simon Steiner <ssteiner@apache.org> | 2019-07-01 11:10:12 +0000 |
---|---|---|
committer | Simon Steiner <ssteiner@apache.org> | 2019-07-01 11:10:12 +0000 |
commit | 452d3bc7c01536d332c9cdb2bb6529ec9ce64310 (patch) | |
tree | 559bcc4819e3dcf4e56eecc4eaf8066053b78986 | |
parent | e18a41654822060c989d0c0149e8d5fc036649c3 (diff) | |
download | xmlgraphics-fop-452d3bc7c01536d332c9cdb2bb6529ec9ce64310.tar.gz xmlgraphics-fop-452d3bc7c01536d332c9cdb2bb6529ec9ce64310.zip |
FOP-2868: OBJR should be a child of each link
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1862368 13f79535-47bb-0310-9956-ffa450edef68
2 files changed, 62 insertions, 0 deletions
diff --git a/fop-core/src/main/java/org/apache/fop/render/intermediate/extensions/URIAction.java b/fop-core/src/main/java/org/apache/fop/render/intermediate/extensions/URIAction.java index a9a9e7bbc..774f27b43 100644 --- a/fop-core/src/main/java/org/apache/fop/render/intermediate/extensions/URIAction.java +++ b/fop-core/src/main/java/org/apache/fop/render/intermediate/extensions/URIAction.java @@ -79,6 +79,9 @@ public class URIAction extends AbstractAction implements DocumentNavigationExten if (isNewWindow() != otherAction.isNewWindow()) { return false; } + if (getStructureTreeElement() != null) { + return getStructureTreeElement().equals(other.getStructureTreeElement()); + } return true; } diff --git a/fop-core/src/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java b/fop-core/src/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java index 5546e5905..72aea3223 100644 --- a/fop-core/src/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java +++ b/fop-core/src/test/java/org/apache/fop/render/intermediate/IFStructureTreeBuilderTestCase.java @@ -19,6 +19,19 @@ package org.apache.fop.render.intermediate; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; + +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.sax.SAXResult; +import javax.xml.transform.stream.StreamSource; + +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentMatcher; @@ -36,6 +49,10 @@ import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.apps.Fop; +import org.apache.fop.apps.FopFactory; +import org.apache.fop.apps.MimeConstants; import org.apache.fop.fo.FOElementMapping; import org.apache.fop.fo.extensions.ExtensionElementMapping; import org.apache.fop.fo.extensions.InternalElementMapping; @@ -166,4 +183,46 @@ public class IFStructureTreeBuilderTestCase { return true; } } + + @Test + public void checkLinkStructRef() throws TransformerException, SAXException { + String fo = "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n" + + " <fo:layout-master-set>\n" + + " <fo:simple-page-master master-name=\"all\" page-width=\"8.5in\" page-height=\"11in\">\n" + + " <fo:region-body/>\n" + + " </fo:simple-page-master>\n" + + " </fo:layout-master-set>\n" + + " <fo:page-sequence format=\"1\" id=\"th_default_sequence1\" master-reference=\"all\">\n" + + " <fo:flow flow-name=\"xsl-region-body\">\n" + + " <fo:block>\n" + + " <fo:block>1 <fo:basic-link external-destination=\"http://a.net\">www.a.net</fo:basic-link>" + + "</fo:block>\n" + + " <fo:block>2 <fo:basic-link external-destination=\"http://a.net\">www.a.net</fo:basic-link>" + + "</fo:block>\n" + + " </fo:block>\n" + + " </fo:flow>\n" + + " </fo:page-sequence>\n" + + "</fo:root>"; + String ifXML = foToIF(fo); + Assert.assertTrue(ifXML, ifXML.contains("<nav:link rect=\"10008 1650 56016 11100\" foi:struct-ref=\"2\">")); + Assert.assertTrue(ifXML, ifXML.contains("<nav:link rect=\"10008 16050 56016 11100\" foi:struct-ref=\"6\">")); + } + + private String foToIF(String fo) throws SAXException, TransformerException { + FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI()); + FOUserAgent userAgent = fopFactory.newFOUserAgent(); + userAgent.setAccessibility(true); + IFSerializer serializer = new IFSerializer(new IFContext(userAgent)); + IFDocumentHandler targetHandler + = userAgent.getRendererFactory().createDocumentHandler(userAgent, MimeConstants.MIME_PDF); + serializer.mimicDocumentHandler(targetHandler); + userAgent.setDocumentHandlerOverride(serializer); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + Fop fop = fopFactory.newFop(MimeConstants.MIME_FOP_IF, userAgent, out); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + Source src = new StreamSource(new ByteArrayInputStream(fo.getBytes())); + Result res = new SAXResult(fop.getDefaultHandler()); + transformer.transform(src, res); + return out.toString(); + } } |