You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2024/01/29 15:11:10 UTC
svn commit: r1915449 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java
Author: tilman
Date: Mon Jan 29 15:11:10 2024
New Revision: 1915449
URL: http://svn.apache.org/viewvc?rev=1915449&view=rev
Log:
PDFBOX-2725: add ClassMap setter and getter
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java?rev=1915449&r1=1915448&r2=1915449&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureTreeRoot.java Mon Jan 29 15:11:10 2024
@@ -17,13 +17,17 @@
package org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
+import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.cos.COSObject;
import org.apache.pdfbox.pdmodel.PDStructureElementNameTreeNode;
import org.apache.pdfbox.pdmodel.common.COSDictionaryMap;
import org.apache.pdfbox.pdmodel.common.PDNameTreeNode;
@@ -182,4 +186,74 @@ public class PDStructureTreeRoot extends
this.getCOSObject().setItem(COSName.ROLE_MAP, rmDic);
}
+ /**
+ * Sets the ClassMap.
+ *
+ * @return the ClassMap, never null. The elements are either {@link PDAttributeObject} or lists
+ * of it.
+ */
+ public Map<String, Object> getClassMap()
+ {
+ Map<String, Object> classMap = new HashMap<>();
+ COSDictionary classMapDictionary = this.getCOSObject().getCOSDictionary(COSName.CLASS_MAP);
+ if (classMapDictionary == null)
+ {
+ return classMap;
+ }
+ classMapDictionary.forEach((name, base) ->
+ {
+ if (base instanceof COSObject)
+ {
+ base = ((COSObject) base).getObject();
+ }
+ if (base instanceof COSDictionary)
+ {
+ classMap.put(name.getName(), PDAttributeObject.create((COSDictionary) base));
+ }
+ else if (base instanceof COSArray)
+ {
+ COSArray array = (COSArray) base;
+ List<PDAttributeObject> list = new ArrayList<>();
+ for (int i = 0; i < array.size(); ++i)
+ {
+ COSBase base2 = array.getObject(i);
+ if (base2 instanceof COSDictionary)
+ {
+ list.add(PDAttributeObject.create((COSDictionary) base2));
+ }
+ }
+ classMap.put(name.getName(), list);
+ }
+ });
+ return classMap;
+ }
+
+ /**
+ * Sets the ClassMap.
+ *
+ * @param classMap null, or a map whose elements are either {@link PDAttributeObject} or lists
+ * of it.
+ */
+ public void setClassMap(Map<String, Object> classMap)
+ {
+ if (classMap == null || classMap.isEmpty())
+ {
+ this.getCOSObject().removeItem(COSName.CLASS_MAP);
+ return;
+ }
+ COSDictionary classMapDictionary = new COSDictionary();
+ classMap.forEach((name, object) ->
+ {
+ if (object instanceof PDAttributeObject)
+ {
+ classMapDictionary.setItem(name, ((PDAttributeObject) object).getCOSObject());
+ }
+ else if (object instanceof List)
+ {
+ List<PDAttributeObject> list = (List<PDAttributeObject>) object;
+ classMapDictionary.setItem(name, new COSArray(list));
+ }
+ });
+ this.getCOSObject().setItem(COSName.CLASS_MAP, classMapDictionary);
+ }
}