From 74a01946b11b7d9be748a9102b45e4f58e2a7248 Mon Sep 17 00:00:00 2001 From: Kakhnovich Raman Date: Tue, 28 Apr 2026 14:22:47 +0300 Subject: [PATCH] Add getPageFromDestination method --- .../java/org/verapdf/pd/PDAnnotation.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/main/java/org/verapdf/pd/PDAnnotation.java b/src/main/java/org/verapdf/pd/PDAnnotation.java index c1499e69..82a19a2f 100644 --- a/src/main/java/org/verapdf/pd/PDAnnotation.java +++ b/src/main/java/org/verapdf/pd/PDAnnotation.java @@ -27,6 +27,7 @@ import org.verapdf.exceptions.LoopedException; import org.verapdf.pd.actions.PDAction; import org.verapdf.pd.actions.PDAnnotationAdditionalActions; +import org.verapdf.tools.StaticResources; import org.verapdf.tools.TypeConverter; import java.util.HashSet; @@ -290,4 +291,36 @@ public static Boolean isOutsideCropBox(PDPage page, PDAnnotation annotation) { } return null; } + + public static COSObject getPageFromDestination(COSObject destination, ASAtom key) { + if (destination.getType() == COSObjType.COS_STRING) { + PDNamesDictionary namesDictionary = StaticResources.getDocument().getCatalog().getNamesDictionary(); + if (namesDictionary == null) { + return null; + } + PDNameTreeNode dests = namesDictionary.getDests(); + if (dests != null) { + destination = dests.getObject(destination.getString()); + if (destination == null) { + return null; + } + } + } else if (destination.getType() == COSObjType.COS_NAME) { + COSObject dests = StaticResources.getDocument().getCatalog().getDests(); + if (dests != null) { + destination = dests.getKey(destination.getDirectBase().getName()); + if (destination == null) { + return null; + } + } + } + if (destination.getType() == COSObjType.COS_DICT) { + destination = destination.getKey(key); + } + COSObject obj = null; + if (destination.getType() == COSObjType.COS_ARRAY && destination.size() > 0) { + obj = destination.at(0); + } + return obj; + } }