You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlgraphics.apache.org by jg...@apache.org on 2026/03/06 20:52:46 UTC
(xmlgraphics-fop) branch main updated: FOP-3290 Add conf to allow basic links to use URIs instead
This is an automated email from the ASF dual-hosted git repository.
jgoncalves pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/xmlgraphics-fop.git
The following commit(s) were added to refs/heads/main by this push:
new 3d6e7c5d6 FOP-3290 Add conf to allow basic links to use URIs instead
3d6e7c5d6 is described below
commit 3d6e7c5d631117987cdc82b92c4544b114c77021
Author: Joao Goncalves <an...@gmail.com>
AuthorDate: Wed Mar 4 16:07:03 2026 -0600
FOP-3290 Add conf to allow basic links to use URIs instead
---
.../main/java/org/apache/fop/pdf/PDFDocument.java | 10 +++++
.../main/java/org/apache/fop/pdf/PDFFactory.java | 2 +-
.../apache/fop/render/pdf/PDFRendererConfig.java | 2 +
.../apache/fop/render/pdf/PDFRendererOption.java | 6 +++
.../fop/render/pdf/PDFRendererOptionsConfig.java | 6 +++
.../apache/fop/render/pdf/PDFRenderingUtil.java | 1 +
.../org/apache/fop/pdf/PDFFactoryTestCase.java | 44 ++++++++++++++++++++--
7 files changed, 67 insertions(+), 4 deletions(-)
diff --git a/fop-core/src/main/java/org/apache/fop/pdf/PDFDocument.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFDocument.java
index fcdcbfd37..2fac86989 100644
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFDocument.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFDocument.java
@@ -191,6 +191,8 @@ public class PDFDocument {
private boolean objectStreamsEnabled;
+ private boolean forceUriBasicLink;
+
/**
* Creates an empty PDF document.
*
@@ -1335,4 +1337,12 @@ public class PDFDocument {
public int getObjectCount() {
return objectcount;
}
+
+ public boolean isForceUriBasicLink() {
+ return forceUriBasicLink;
+ }
+
+ public void setForceUriBasicLink(boolean forceUriBasicLink) {
+ this.forceUriBasicLink = forceUriBasicLink;
+ }
}
diff --git a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
index 1fbe066c9..13404bb7b 100644
--- a/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
+++ b/fop-core/src/main/java/org/apache/fop/pdf/PDFFactory.java
@@ -593,7 +593,7 @@ public class PDFFactory {
if (filename == null) {
filename = uri.getSchemeSpecificPart();
}
- if (scheme == null && filename.toLowerCase().endsWith(".pdf")) {
+ if (scheme == null && filename.toLowerCase().endsWith(".pdf") && !document.isForceUriBasicLink()) {
scheme = "file";
}
if (scheme == null) {
diff --git a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java
index d27114fa3..12b1b3593 100644
--- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java
+++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererConfig.java
@@ -58,6 +58,7 @@ import static org.apache.fop.render.pdf.PDFEncryptionOption.OWNER_PASSWORD;
import static org.apache.fop.render.pdf.PDFEncryptionOption.USER_PASSWORD;
import static org.apache.fop.render.pdf.PDFRendererOption.DISABLE_SRGB_COLORSPACE;
import static org.apache.fop.render.pdf.PDFRendererOption.FILTER_LIST;
+import static org.apache.fop.render.pdf.PDFRendererOption.FORCE_URI_BASIC_LINK;
import static org.apache.fop.render.pdf.PDFRendererOption.FORM_XOBJECT;
import static org.apache.fop.render.pdf.PDFRendererOption.LINEARIZATION;
import static org.apache.fop.render.pdf.PDFRendererOption.MERGE_FONTS;
@@ -157,6 +158,7 @@ public final class PDFRendererConfig implements RendererConfig {
parseAndPut(LINEARIZATION, cfg);
parseAndPut(FORM_XOBJECT, cfg);
parseAndPut(OBJECT_STREAMS, cfg);
+ parseAndPut(FORCE_URI_BASIC_LINK, cfg);
parseAndPut(VERSION, cfg);
configureSignParams(cfg);
} catch (ConfigurationException e) {
diff --git a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOption.java b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOption.java
index 88fab954a..466ffcb88 100644
--- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOption.java
+++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOption.java
@@ -127,6 +127,12 @@ public enum PDFRendererOption implements RendererConfigOption {
Object deserialize(String value) {
throw new UnsupportedOperationException();
}
+ },
+ FORCE_URI_BASIC_LINK("force-uri-basic-link", false) {
+ @Override
+ Boolean deserialize(String value) {
+ return Boolean.valueOf(value);
+ }
};
private final String name;
diff --git a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java
index 95fd6d932..6c451c2f9 100644
--- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java
+++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRendererOptionsConfig.java
@@ -34,6 +34,7 @@ import org.apache.fop.pdf.PDFXMode;
import org.apache.fop.pdf.Version;
import static org.apache.fop.render.pdf.PDFRendererOption.DISABLE_SRGB_COLORSPACE;
import static org.apache.fop.render.pdf.PDFRendererOption.FILTER_LIST;
+import static org.apache.fop.render.pdf.PDFRendererOption.FORCE_URI_BASIC_LINK;
import static org.apache.fop.render.pdf.PDFRendererOption.FORM_XOBJECT;
import static org.apache.fop.render.pdf.PDFRendererOption.LINEARIZATION;
import static org.apache.fop.render.pdf.PDFRendererOption.MERGE_FONTS;
@@ -162,4 +163,9 @@ public final class PDFRendererOptionsConfig {
public Boolean getObjectStreamsEnabled() {
return (Boolean)properties.get(OBJECT_STREAMS);
}
+
+ public Boolean getForceUriBasicLinkEnabled() {
+ return (Boolean)properties.get(FORCE_URI_BASIC_LINK);
+ }
+
}
diff --git a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java
index e212a7b3a..3f3e18870 100644
--- a/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java
+++ b/fop-core/src/main/java/org/apache/fop/render/pdf/PDFRenderingUtil.java
@@ -636,6 +636,7 @@ class PDFRenderingUtil {
pdfDoc.setLinearizationEnabled(rendererConfig.getLinearizationEnabled());
pdfDoc.setFormXObjectEnabled(rendererConfig.getFormXObjectEnabled());
pdfDoc.setObjectStreamsEnabled(rendererConfig.getObjectStreamsEnabled());
+ pdfDoc.setForceUriBasicLink(rendererConfig.getForceUriBasicLinkEnabled());
return this.pdfDoc;
}
diff --git a/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java b/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java
index baa39d830..14c9585b8 100644
--- a/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java
+++ b/fop-core/src/test/java/org/apache/fop/pdf/PDFFactoryTestCase.java
@@ -331,9 +331,7 @@ public class PDFFactoryTestCase {
}
PDFFactory pdfFactory = new PDFFactory(doc);
- PDFAction action = pdfFactory.getExternalAction("a", false, originalAltText);
- action.setObjectNumber(1);
- action.setDocument(doc);
+ PDFAction action = createPDFAction(pdfFactory, doc, "a", originalAltText);
PDFLink link = pdfFactory.makeLink(new Rectangle(), "a", 0, 0);
link.setAction(action);
@@ -350,4 +348,44 @@ public class PDFFactoryTestCase {
return originalAltText;
}
}
+
+ @Test
+ public void testExternalActionDefaultBehaviour() throws IOException {
+ ByteArrayOutputStream bos = getOutputFromPdfAction("a.pdf", false);
+ assertTrue("Must use GoToRemote when flag is false", bos.toString().contains("/S /GoToR"));
+ }
+
+ @Test
+ public void testExternalActionForceUriBasicLinkBehaviour() throws IOException {
+ ByteArrayOutputStream bos = getOutputFromPdfAction("a.pdf", true);
+ assertTrue("Must use URI when flag is true", bos.toString().contains("/URI (a.pdf)"));
+ }
+
+ @Test
+ public void testExternalActionNonPdf() throws IOException {
+ ByteArrayOutputStream legacyBos = getOutputFromPdfAction("a.png", true);
+ ByteArrayOutputStream defaultBos = getOutputFromPdfAction("a.png", false);
+
+ assertEquals("Both legacy and default behaviour should use URI for non-PDF files",
+ legacyBos.toString(), defaultBos.toString());
+ }
+
+ private ByteArrayOutputStream getOutputFromPdfAction(String fileName, boolean forceUriBasicLink)
+ throws IOException {
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ PDFDocument doc = new PDFDocument("");
+ doc.setForceUriBasicLink(forceUriBasicLink);
+
+ createPDFAction(new PDFFactory(doc), doc, fileName, "").output(bos);
+
+ return bos;
+ }
+
+ private PDFAction createPDFAction(PDFFactory pdfFactory, PDFDocument doc, String fileName, String originalAltText) {
+ PDFAction action = pdfFactory.getExternalAction(fileName, false, originalAltText);
+ action.setObjectNumber(1);
+ action.setDocument(doc);
+
+ return action;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org