Author: tilman
Date: Wed Aug 28 10:25:31 2024
New Revision: 1920243
URL: http://svn.apache.org/viewvc?rev=1920243&view=rev
Log:
PDFBOX-5873: avoid NPE, support appearance subdictionaries
Modified:
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
Modified:
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
URL:
http://svn.apache.org/viewvc/pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java?rev=1920243&r1=1920242&r2=1920243&view=diff
==============================================================================
---
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
(original)
+++
pdfbox/branches/2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ExtractTTFFonts.java
Wed Aug 28 10:25:31 2024
@@ -20,6 +20,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import org.apache.pdfbox.cos.COSDictionary;
@@ -163,12 +164,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);
}
}
}
@@ -196,7 +202,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;