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 2015/09/05 16:53:08 UTC

svn commit: r1701396 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java

Author: tilman
Date: Sat Sep  5 14:53:08 2015
New Revision: 1701396

URL: http://svn.apache.org/r1701396
Log:
PDFBOX-2793: correct handling of PDF 1.1 /Dests entries, these can be an array defining the destination or a dictionary with a D entry whose value is such an array, as pointed out by Andrea Vacondio

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java?rev=1701396&r1=1701395&r2=1701396&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDDocumentNameDestinationDictionary.java Sat Sep  5 14:53:08 2015
@@ -16,8 +16,10 @@
 package org.apache.pdfbox.pdmodel;
 
 import java.io.IOException;
+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.pdmodel.common.COSObjectable;
 import org.apache.pdfbox.pdmodel.interactive.documentnavigation.destination.PDDestination;
 
@@ -63,7 +65,23 @@ public class PDDocumentNameDestinationDi
     public PDDestination getDestination(String name) throws IOException
     {
         COSBase item = nameDictionary.getDictionaryObject(name);
-        return PDDestination.create(item);
-    }    
+
+        // "The value of this entry shall be a dictionary in which each key is a destination name
+        // and the corresponding value is either an array defining the destination (...) 
+        // or a dictionary with a D entry whose value is such an array."                
+        if (item instanceof COSArray)
+        {
+            return PDDestination.create(item);
+        }
+        else if (item instanceof COSDictionary)
+        {
+            COSDictionary dict = (COSDictionary) item;
+            if (dict.containsKey(COSName.D))
+            {
+                return PDDestination.create(dict.getDictionaryObject(COSName.D));
+            }
+        }
+        return null;
+    }
 
 }