Author: tilman
Date: Wed Aug 28 10:25:35 2024
New Revision: 1920244

URL: http://svn.apache.org/viewvc?rev=1920244&view=rev
Log:
PDFBOX-5873: avoid NPE, support appearance subdictionaries

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

Modified: 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java?rev=1920244&r1=1920243&r2=1920244&view=diff
==============================================================================
--- 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
 (original)
+++ 
pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
 Wed Aug 28 10:25:35 2024
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.pdfbox.Loader;
@@ -162,12 +163,17 @@ public final class ExtractTTFFonts
                             if (appearance != null)
                             {
                                 PDAppearanceEntry nae = 
appearance.getNormalAppearance();
-                                if (nae != null)
+                                if (nae != null && nae.isStream())
                                 {
                                     nas = nae.getAppearanceStream();
-                                    if (nas != null)
+                                    processResources(nas.getResources(), 
prefix, addKey);
+                                }
+                                else if (nae != null && nae.isSubDictionary())
+                                {
+                                    Map<COSName, PDAppearanceStream> subDic = 
nae.getSubDictionary();
+                                    for (PDAppearanceStream as : 
subDic.values())
                                     {
-                                        processResources(nas.getResources(), 
prefix, addKey);
+                                        processResources(as.getResources(), 
prefix, addKey);
                                     }
                                 }
                             }
@@ -188,7 +194,8 @@ public final class ExtractTTFFonts
         for (COSName key : resources.getFontNames())
         {
             PDFont font = resources.getFont(key);
-            System.out.println(font.getName() + " on page " + currentPage);
+            System.out.println((font == null || font.getName() == null ? 
"(null)" : font.getName()) +
+                    " on page " + currentPage);
             if (fontSet.contains(font.getCOSObject()))
             {
                 continue;


Reply via email to