From acb7fef45b8050a43e04fe80ed757007c86d3ad7 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Fri, 19 Sep 2025 15:15:34 +0300 Subject: [PATCH 1/4] Add functionality for visibility of /OCMD /P --- src/main/java/org/verapdf/as/ASAtom.java | 5 +++++ .../PDOptionalContentProperties.java | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/verapdf/as/ASAtom.java b/src/main/java/org/verapdf/as/ASAtom.java index 8fdeff61..0c69d441 100644 --- a/src/main/java/org/verapdf/as/ASAtom.java +++ b/src/main/java/org/verapdf/as/ASAtom.java @@ -60,6 +60,8 @@ public class ASAtom implements Comparable { public static final ASAtom AF_RELATIONSHIP = new ASAtom("AFRelationship"); public static final ASAtom AFTER = new ASAtom("After"); public static final ASAtom AIS = new ASAtom("AIS"); + public static final ASAtom ALL_ON = new ASAtom("AllOn"); + public static final ASAtom ALL_OFF = new ASAtom("AllOff"); public static final ASAtom ALT = new ASAtom("Alt"); public static final ASAtom ALPHA = new ASAtom("Alpha"); public static final ASAtom ALTERNATE = new ASAtom("Alternate"); @@ -67,6 +69,8 @@ public class ASAtom implements Comparable { public static final ASAtom ANNOT = new ASAtom("Annot"); public static final ASAtom ANNOTS = new ASAtom("Annots"); public static final ASAtom ANTI_ALIAS = new ASAtom("AntiAlias"); + public static final ASAtom ANY_ON = new ASAtom("AnyOn"); + public static final ASAtom ANY_OFF = new ASAtom("AnyOff"); public static final ASAtom AP = new ASAtom("AP"); public static final ASAtom AP_REF = new ASAtom("APRef"); public static final ASAtom APP = new ASAtom("App"); @@ -408,6 +412,7 @@ public class ASAtom implements Comparable { public static final ASAtom OBJR = new ASAtom("OBJR"); public static final ASAtom OBJ_STM = new ASAtom("ObjStm"); public static final ASAtom OC = new ASAtom("OC"); + public static final ASAtom OCMD = new ASAtom("OCMD"); public static final ASAtom OCG = new ASAtom("OCG"); public static final ASAtom OCGS = new ASAtom("OCGs"); public static final ASAtom OCPROPERTIES = new ASAtom("OCProperties"); diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index bcabe94e..3382b820 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -21,10 +21,7 @@ package org.verapdf.pd.optionalcontent; import org.verapdf.as.ASAtom; -import org.verapdf.cos.COSArray; -import org.verapdf.cos.COSDictionary; -import org.verapdf.cos.COSObjType; -import org.verapdf.cos.COSObject; +import org.verapdf.cos.*; import org.verapdf.pd.PDObject; import java.util.ArrayList; @@ -55,6 +52,19 @@ public List getGroupNames() { return groups; } + public String getObjectName(COSObject object) { + COSObject ocgs = getObject().getKey(ASAtom.OCGS); + if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) { + + for (COSObject obj : (COSArray) ocgs.getDirectBase()) { + if (!obj.empty() && obj.getType() == COSObjType.COS_DICT && object.equals(obj)) { + return obj.getStringKey(ASAtom.NAME); + } + } + } + return null; + } + public boolean isVisibleLayer(String name) { if (name == null) { return true; From 3dd0574acfe66589f9b50f4930af5531aa0b2159 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Fri, 19 Sep 2025 18:21:08 +0300 Subject: [PATCH 2/4] Add PDOCMDDictionary class --- .../pd/optionalcontent/PDOCMDDictionary.java | 36 +++++++++++++++++++ .../PDOptionalContentProperties.java | 13 ------- 2 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java new file mode 100644 index 00000000..974fe503 --- /dev/null +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java @@ -0,0 +1,36 @@ +package org.verapdf.pd.optionalcontent; + +import org.verapdf.as.ASAtom; +import org.verapdf.cos.COSArray; +import org.verapdf.cos.COSObject; + +import java.util.ArrayList; +import java.util.List; + +public class PDOCMDDictionary { + public static boolean isVisibleOCMDByP(ASAtom pValue, COSObject ocgProperty, PDOptionalContentProperties optProperties) { + COSArray ocgs = (COSArray) ocgProperty.getDirectBase(); + if (ocgs == null) { + return true; + } + for (COSObject obj : ocgs) { + boolean isVisible = optProperties.isVisibleLayer(obj.getStringKey(ASAtom.NAME)); + if (isVisible) { + if (pValue == null || ASAtom.ANY_ON.equals(pValue)) { + return true; + } + if (ASAtom.ALL_OFF.equals(pValue)) { + return false; + } + } else { + if (ASAtom.ALL_ON.equals(pValue)) { + return false; + } + if (ASAtom.ANY_OFF.equals(pValue)) { + return true; + } + } + } + return ASAtom.ALL_OFF.equals(pValue) || ASAtom.ALL_ON.equals(pValue); + } +} diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 3382b820..ce7ecc23 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -52,19 +52,6 @@ public List getGroupNames() { return groups; } - public String getObjectName(COSObject object) { - COSObject ocgs = getObject().getKey(ASAtom.OCGS); - if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) { - - for (COSObject obj : (COSArray) ocgs.getDirectBase()) { - if (!obj.empty() && obj.getType() == COSObjType.COS_DICT && object.equals(obj)) { - return obj.getStringKey(ASAtom.NAME); - } - } - } - return null; - } - public boolean isVisibleLayer(String name) { if (name == null) { return true; From 416d9262d50b195683fa235b35806bc67acefaa5 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Mon, 22 Sep 2025 08:26:59 +0300 Subject: [PATCH 3/4] Add isContainsName method to PDOptionalContentPropeties --- src/main/java/org/verapdf/as/ASAtom.java | 6 +++--- .../pd/optionalcontent/PDOptionalContentProperties.java | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/verapdf/as/ASAtom.java b/src/main/java/org/verapdf/as/ASAtom.java index 0c69d441..402561b4 100644 --- a/src/main/java/org/verapdf/as/ASAtom.java +++ b/src/main/java/org/verapdf/as/ASAtom.java @@ -60,17 +60,17 @@ public class ASAtom implements Comparable { public static final ASAtom AF_RELATIONSHIP = new ASAtom("AFRelationship"); public static final ASAtom AFTER = new ASAtom("After"); public static final ASAtom AIS = new ASAtom("AIS"); - public static final ASAtom ALL_ON = new ASAtom("AllOn"); public static final ASAtom ALL_OFF = new ASAtom("AllOff"); - public static final ASAtom ALT = new ASAtom("Alt"); + public static final ASAtom ALL_ON = new ASAtom("AllOn"); public static final ASAtom ALPHA = new ASAtom("Alpha"); + public static final ASAtom ALT = new ASAtom("Alt"); public static final ASAtom ALTERNATE = new ASAtom("Alternate"); public static final ASAtom ALTERNATES = new ASAtom("Alternates"); public static final ASAtom ANNOT = new ASAtom("Annot"); public static final ASAtom ANNOTS = new ASAtom("Annots"); public static final ASAtom ANTI_ALIAS = new ASAtom("AntiAlias"); - public static final ASAtom ANY_ON = new ASAtom("AnyOn"); public static final ASAtom ANY_OFF = new ASAtom("AnyOff"); + public static final ASAtom ANY_ON = new ASAtom("AnyOn"); public static final ASAtom AP = new ASAtom("AP"); public static final ASAtom AP_REF = new ASAtom("APRef"); public static final ASAtom APP = new ASAtom("App"); diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index ce7ecc23..97062ded 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -52,6 +52,10 @@ public List getGroupNames() { return groups; } + public boolean isContainsName(String name) { + return getGroupNames().contains(name); + } + public boolean isVisibleLayer(String name) { if (name == null) { return true; From 77c56fe0511fcb24d32d75265e9d11c95183eccd Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Mon, 22 Sep 2025 16:59:51 +0300 Subject: [PATCH 4/4] Update methods isContainsName and isVisibleOCMDByP --- .../pd/optionalcontent/PDOCMDDictionary.java | 13 +++++++------ .../PDOptionalContentProperties.java | 13 ++++++++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java index 974fe503..d638a243 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOCMDDictionary.java @@ -2,17 +2,18 @@ import org.verapdf.as.ASAtom; import org.verapdf.cos.COSArray; +import org.verapdf.cos.COSBase; +import org.verapdf.cos.COSObjType; import org.verapdf.cos.COSObject; -import java.util.ArrayList; -import java.util.List; - public class PDOCMDDictionary { - public static boolean isVisibleOCMDByP(ASAtom pValue, COSObject ocgProperty, PDOptionalContentProperties optProperties) { - COSArray ocgs = (COSArray) ocgProperty.getDirectBase(); - if (ocgs == null) { + public static boolean isVisibleOCMDByP(COSBase property, PDOptionalContentProperties optProperties) { + COSObject ocgProperty = property.getKey(ASAtom.OCGS); + if (ocgProperty == null || ocgProperty.getType() != COSObjType.COS_ARRAY) { return true; } + COSArray ocgs = (COSArray) ocgProperty.getDirectBase(); + ASAtom pValue = property.getNameKey(ASAtom.P); for (COSObject obj : ocgs) { boolean isVisible = optProperties.isVisibleLayer(obj.getStringKey(ASAtom.NAME)); if (isVisible) { diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 97062ded..a3068a7c 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -53,7 +53,18 @@ public List getGroupNames() { } public boolean isContainsName(String name) { - return getGroupNames().contains(name); + if (name == null) { + return false; + } + COSObject ocgs = getObject().getKey(ASAtom.OCGS); + if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) { + for (COSObject obj : (COSArray) ocgs.getDirectBase()) { + if (!obj.empty() && obj.getType() == COSObjType.COS_DICT && name.equals(obj.getStringKey(ASAtom.NAME))) { + return true; + } + } + } + return false; } public boolean isVisibleLayer(String name) {