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;
}