From 6e4f547b0a24490e432f78ca631c1576d1f7c32d Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Wed, 17 Sep 2025 15:24:02 +0300 Subject: [PATCH 1/7] Add isVisibleLayer method to PDOptionalContentProperties --- .../PDOptionalContentProperties.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 345e4883..7e31ef4e 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -58,4 +58,50 @@ public String[] getGroupNames() { } } + public boolean isVisibleLayer(String name) { + COSObject d = getObject().getKey(ASAtom.D); + if (d != null && d.getType() == COSObjType.COS_DICT) { + COSDictionary dict = (COSDictionary) d.getDirectBase(); + COSObject on = dict.getKey(ASAtom.ON); + if (on != null && on.getType() == COSObjType.COS_ARRAY) { + COSArray onBase = (COSArray) on.getDirectBase(); + int size = onBase.size(); + + for (int i = 0; i < size; ++i) { + COSObject obj = onBase.at(i); + if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { + COSDictionary ocgDict = (COSDictionary) obj.getDirectBase(); + String ocgName = ocgDict.getStringKey(ASAtom.NAME); + if (name.equals(ocgName)) { + return true; + } + } + } + } + + COSObject off = dict.getKey(ASAtom.OFF); + if (off != null && off.getType() == COSObjType.COS_ARRAY) { + COSArray offBase = (COSArray) off.getDirectBase(); + int size = offBase.size(); + + for (int i = 0; i < size; ++i) { + COSObject obj = offBase.at(i); + if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { + COSDictionary ocgDict = (COSDictionary) obj.getDirectBase(); + String ocgName = ocgDict.getStringKey(ASAtom.NAME); + if (name.equals(ocgName)) { + return false; + } + } + } + } + + ASAtom baseState = dict.getNameKey(ASAtom.BASE_STATE); + if (baseState != null) { + return baseState.getValue().equals("ON"); + } + } + return true; + } + } From b19d9b208e7d58f64760dbfeb909636e56a6ebf5 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Wed, 17 Sep 2025 20:50:18 +0300 Subject: [PATCH 2/7] Update PDOptionalContentProperties.java --- .../PDOptionalContentProperties.java | 54 +++++++++---------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 7e31ef4e..9e32654a 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -59,49 +59,43 @@ public String[] getGroupNames() { } public boolean isVisibleLayer(String name) { + if (name == null) { + return true; + } COSObject d = getObject().getKey(ASAtom.D); if (d != null && d.getType() == COSObjType.COS_DICT) { COSDictionary dict = (COSDictionary) d.getDirectBase(); - COSObject on = dict.getKey(ASAtom.ON); - if (on != null && on.getType() == COSObjType.COS_ARRAY) { - COSArray onBase = (COSArray) on.getDirectBase(); - int size = onBase.size(); - for (int i = 0; i < size; ++i) { - COSObject obj = onBase.at(i); - if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { - COSDictionary ocgDict = (COSDictionary) obj.getDirectBase(); - String ocgName = ocgDict.getStringKey(ASAtom.NAME); - if (name.equals(ocgName)) { - return true; - } - } - } + Boolean checkOnState = checkDProperties(dict, ASAtom.ON, name); + if (checkOnState != null) { + return checkOnState; } - COSObject off = dict.getKey(ASAtom.OFF); - if (off != null && off.getType() == COSObjType.COS_ARRAY) { - COSArray offBase = (COSArray) off.getDirectBase(); - int size = offBase.size(); - - for (int i = 0; i < size; ++i) { - COSObject obj = offBase.at(i); - if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { - COSDictionary ocgDict = (COSDictionary) obj.getDirectBase(); - String ocgName = ocgDict.getStringKey(ASAtom.NAME); - if (name.equals(ocgName)) { - return false; - } - } - } + Boolean checkOffState = checkDProperties(dict, ASAtom.OFF, name); + if (checkOffState != null) { + return checkOffState; } ASAtom baseState = dict.getNameKey(ASAtom.BASE_STATE); if (baseState != null) { - return baseState.getValue().equals("ON"); + return baseState.equals(ASAtom.ON); } } return true; } + public Boolean checkDProperties(COSDictionary dict, ASAtom state, String name) { + COSObject cosObject = dict.getKey(state); + if (cosObject != null && cosObject.getType() == COSObjType.COS_ARRAY) { + for (COSObject obj : (COSArray) cosObject.getDirectBase()) { + if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { + String ocgName = obj.getDirectBase().getStringKey(ASAtom.NAME); + if (name.equals(ocgName)) { + return state.equals(ASAtom.ON); + } + } + } + } + return null; + } } From 5017098df2d1e78d5ebed0f125642580ff6d1345 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Wed, 17 Sep 2025 21:19:47 +0300 Subject: [PATCH 3/7] Update PDOptionalContentProperties.java --- .../PDOptionalContentProperties.java | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 9e32654a..276d40e6 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -27,6 +27,9 @@ import org.verapdf.cos.COSObject; import org.verapdf.pd.PDObject; +import java.util.ArrayList; +import java.util.List; + /** * @author Timur Kamalov */ @@ -36,19 +39,14 @@ public PDOptionalContentProperties(COSObject obj) { super(obj); } - public String[] getGroupNames() { + public ArrayList getGroupNames() { COSObject ocgs = getObject().getKey(ASAtom.OCGS); if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) { - COSArray ocgsArray = (COSArray) ocgs.getDirectBase(); - int size = ocgsArray.size(); - String[] groups = new String[size]; - - for (int i = 0; i < size; ++i) { - COSObject obj = ocgs.at(i); + ArrayList groups = new ArrayList<>(); + for (COSObject obj: (COSArray) ocgs.getDirectBase()) { if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { - COSDictionary ocgDict = (COSDictionary) obj.getDirectBase(); - String ocgName = ocgDict.getStringKey(ASAtom.NAME); - groups[i] = ocgName == null ? "" : ocgName; + String ocgName = obj.getStringKey(ASAtom.NAME); + groups.add(ocgName == null ? "" : ocgName); } } @@ -65,15 +63,11 @@ public boolean isVisibleLayer(String name) { COSObject d = getObject().getKey(ASAtom.D); if (d != null && d.getType() == COSObjType.COS_DICT) { COSDictionary dict = (COSDictionary) d.getDirectBase(); - - Boolean checkOnState = checkDProperties(dict, ASAtom.ON, name); - if (checkOnState != null) { - return checkOnState; + if (isDContainsOCGWithName(dict, ASAtom.ON, name)) { + return true; } - - Boolean checkOffState = checkDProperties(dict, ASAtom.OFF, name); - if (checkOffState != null) { - return checkOffState; + if (isDContainsOCGWithName(dict, ASAtom.OFF, name)) { + return false; } ASAtom baseState = dict.getNameKey(ASAtom.BASE_STATE); @@ -84,18 +78,18 @@ public boolean isVisibleLayer(String name) { return true; } - public Boolean checkDProperties(COSDictionary dict, ASAtom state, String name) { + public Boolean isDContainsOCGWithName(COSDictionary dict, ASAtom state, String name) { COSObject cosObject = dict.getKey(state); if (cosObject != null && cosObject.getType() == COSObjType.COS_ARRAY) { for (COSObject obj : (COSArray) cosObject.getDirectBase()) { if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { - String ocgName = obj.getDirectBase().getStringKey(ASAtom.NAME); + String ocgName = obj.getStringKey(ASAtom.NAME); if (name.equals(ocgName)) { - return state.equals(ASAtom.ON); + return true; } } } } - return null; + return false; } } From 3fa34164151ed966066cae7fef5ce906e9a5935b Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Wed, 17 Sep 2025 21:22:12 +0300 Subject: [PATCH 4/7] Update PDOptionalContentProperties.java --- .../pd/optionalcontent/PDOptionalContentProperties.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 276d40e6..b9e2ede9 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -39,10 +39,10 @@ public PDOptionalContentProperties(COSObject obj) { super(obj); } - public ArrayList getGroupNames() { + public List getGroupNames() { COSObject ocgs = getObject().getKey(ASAtom.OCGS); if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) { - ArrayList groups = new ArrayList<>(); + List groups = new ArrayList<>(); for (COSObject obj: (COSArray) ocgs.getDirectBase()) { if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { String ocgName = obj.getStringKey(ASAtom.NAME); From 39e546e27f7f0c1f6bfc8990b2f05fa667fa2aed Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Wed, 17 Sep 2025 21:45:08 +0300 Subject: [PATCH 5/7] Update PDOptionalContentProperties.java --- .../PDOptionalContentProperties.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index b9e2ede9..4eee5d96 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -41,19 +41,18 @@ public PDOptionalContentProperties(COSObject obj) { public List getGroupNames() { COSObject ocgs = getObject().getKey(ASAtom.OCGS); + List groups = new ArrayList<>(); if (!ocgs.empty() && ocgs.getType() == COSObjType.COS_ARRAY) { - List groups = new ArrayList<>(); - for (COSObject obj: (COSArray) ocgs.getDirectBase()) { - if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { - String ocgName = obj.getStringKey(ASAtom.NAME); - groups.add(ocgName == null ? "" : ocgName); - } - } - return groups; - } else { - return null; - } + for (COSObject obj : (COSArray) ocgs.getDirectBase()) { + if (!obj.empty() && obj.getType() == COSObjType.COS_DICT) { + String ocgName = obj.getStringKey(ASAtom.NAME); + groups.add(ocgName == null ? "" : ocgName); + } + } + } + + return groups; } public boolean isVisibleLayer(String name) { From e86e4bf01332d196c0b3b1482d92c14d5c485bf0 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Thu, 18 Sep 2025 12:16:26 +0300 Subject: [PATCH 6/7] Update PDOptionalContentProperties.java --- .../verapdf/pd/optionalcontent/PDOptionalContentProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 4eee5d96..4b2016ba 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -77,7 +77,7 @@ public boolean isVisibleLayer(String name) { return true; } - public Boolean isDContainsOCGWithName(COSDictionary dict, ASAtom state, String name) { + public static boolean isDContainsOCGWithName(COSDictionary dict, ASAtom state, String name) { COSObject cosObject = dict.getKey(state); if (cosObject != null && cosObject.getType() == COSObjType.COS_ARRAY) { for (COSObject obj : (COSArray) cosObject.getDirectBase()) { From 48d6c76d5bb9a3a85a26e4a97e2381dbbbb4f85e Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman <59254003+LonelyMidoriya@users.noreply.github.com> Date: Thu, 18 Sep 2025 17:47:09 +0300 Subject: [PATCH 7/7] Update PDOptionalContentProperties.java --- .../verapdf/pd/optionalcontent/PDOptionalContentProperties.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java index 4b2016ba..bcabe94e 100644 --- a/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java +++ b/src/main/java/org/verapdf/pd/optionalcontent/PDOptionalContentProperties.java @@ -77,7 +77,7 @@ public boolean isVisibleLayer(String name) { return true; } - public static boolean isDContainsOCGWithName(COSDictionary dict, ASAtom state, String name) { + private static boolean isDContainsOCGWithName(COSDictionary dict, ASAtom state, String name) { COSObject cosObject = dict.getKey(state); if (cosObject != null && cosObject.getType() == COSObjType.COS_ARRAY) { for (COSObject obj : (COSArray) cosObject.getDirectBase()) {