You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by le...@apache.org on 2023/02/05 12:35:31 UTC

svn commit: r1907418 - in /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel: PDResources.java interactive/form/PDAcroForm.java

Author: lehmi
Date: Sun Feb  5 12:35:30 2023
New Revision: 1907418

URL: http://svn.apache.org/viewvc?rev=1907418&view=rev
Log:
PDFBOX-5564: re-use font cache for direct fonts when calling getDefaultResources as proposed by Kostiantyn Nazarenkov 

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java?rev=1907418&r1=1907417&r2=1907418&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/PDResources.java Sun Feb  5 12:35:30 2023
@@ -54,8 +54,7 @@ public final class PDResources implement
     
     // PDFBOX-3442 cache fonts that are not indirect objects, as these aren't cached in ResourceCache
     // and this would result in huge memory footprint in text extraction
-    private final Map <COSName,SoftReference<PDFont>> directFontCache = 
-            new HashMap<COSName, SoftReference<PDFont>>();
+    private final Map<COSName, SoftReference<PDFont>> directFontCache;
 
     /**
      * Constructor for embedding.
@@ -64,6 +63,7 @@ public final class PDResources implement
     {
         resources = new COSDictionary();
         cache = null;
+        directFontCache = new HashMap<COSName, SoftReference<PDFont>>();
     }
 
     /**
@@ -79,6 +79,7 @@ public final class PDResources implement
         }
         resources = resourceDictionary;
         cache = null;
+        directFontCache = new HashMap<COSName, SoftReference<PDFont>>();
     }
     
     /**
@@ -95,6 +96,30 @@ public final class PDResources implement
         }
         resources = resourceDictionary;
         cache = resourceCache;
+        directFontCache = new HashMap<COSName, SoftReference<PDFont>>();
+    }
+
+    /**
+     * Constructor for reading.
+     *
+     * @param resourceDictionary The cos dictionary for this resource.
+     * @param resourceCache The document's resource cache, may be null.
+     * @param directFontCache The document's direct font cache. Must be mutable
+     */
+    public PDResources(COSDictionary resourceDictionary, ResourceCache resourceCache,
+            Map<COSName, SoftReference<PDFont>> directFontCache)
+    {
+        if (resourceDictionary == null)
+        {
+            throw new IllegalArgumentException("resourceDictionary is null");
+        }
+        if (directFontCache == null)
+        {
+            throw new IllegalArgumentException("directFontCache is null");
+        }
+        resources = resourceDictionary;
+        cache = resourceCache;
+        this.directFontCache = directFontCache;
     }
 
     /**

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java?rev=1907418&r1=1907417&r2=1907418&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/interactive/form/PDAcroForm.java Sun Feb  5 12:35:30 2023
@@ -20,6 +20,7 @@ import java.awt.geom.GeneralPath;
 import java.awt.geom.Rectangle2D;
 
 import java.io.IOException;
+import java.lang.ref.SoftReference;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -49,6 +50,7 @@ import org.apache.pdfbox.pdmodel.fdf.FDF
 import org.apache.pdfbox.pdmodel.fdf.FDFDictionary;
 import org.apache.pdfbox.pdmodel.fdf.FDFDocument;
 import org.apache.pdfbox.pdmodel.fdf.FDFField;
+import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
 import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
@@ -74,6 +76,8 @@ public final class PDAcroForm implements
 
     private ScriptingHandler scriptingHandler;
 
+    private final Map<COSName, SoftReference<PDFont>> directFontCache = new HashMap<COSName, SoftReference<PDFont>>();
+
     /**
      * Constructor.
      *
@@ -536,7 +540,8 @@ public final class PDAcroForm implements
         COSBase base = dictionary.getDictionaryObject(COSName.DR);
         if (base instanceof COSDictionary)
         {
-            retval = new PDResources((COSDictionary) base, document.getResourceCache());
+            retval = new PDResources((COSDictionary) base, document.getResourceCache(),
+                    directFontCache);
         }
         return retval;
     }