Author: tilman
Date: Wed Sep  2 15:21:29 2026
New Revision: 1937778

Log:
PDFBOX-4951: refactor to avoid double allocation, as suggested by Valery Bokov; 
closes #514; closes #518

Modified:
   
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
   
pdfbox/trunk/pdfbox-layout-fop/src/main/java/org/apache/pdfbox/glyphlayout/fop/GlyphLayoutFontLoaderFop.java

Modified: 
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
==============================================================================
--- 
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
        Wed Sep  2 15:21:24 2026        (r1937777)
+++ 
pdfbox/trunk/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
        Wed Sep  2 15:21:29 2026        (r1937778)
@@ -29,6 +29,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.font.PDType0Font;
@@ -113,14 +114,14 @@ public class GlyphLayoutFontLoaderAwt
     {
         Objects.requireNonNull(inputStream, "InputStream must not be null");
 
-        // Copy font stream into memory to read it twice for creation of 
PDType0Font and AWT Font
-        try (ByteArrayInputStream bais = new 
ByteArrayInputStream(inputStream.readAllBytes()))
+        byte[] fontBytes = inputStream.readAllBytes();
+        PDType0Font pdType0Font = PDType0Font.load(pdDocument,
+                new RandomAccessReadBuffer(fontBytes), embedSubset, false);
+        try (ByteArrayInputStream bais = new ByteArrayInputStream(fontBytes))
         {
-            PDType0Font pdType0Font = PDType0Font.load(pdDocument, bais, 
embedSubset);
-            bais.reset();
             loadAwtFont(pdType0Font, bais, fontOptions);
-            return pdType0Font;
         }
+        return pdType0Font;
     }
 
     /**

Modified: 
pdfbox/trunk/pdfbox-layout-fop/src/main/java/org/apache/pdfbox/glyphlayout/fop/GlyphLayoutFontLoaderFop.java
==============================================================================
--- 
pdfbox/trunk/pdfbox-layout-fop/src/main/java/org/apache/pdfbox/glyphlayout/fop/GlyphLayoutFontLoaderFop.java
        Wed Sep  2 15:21:24 2026        (r1937777)
+++ 
pdfbox/trunk/pdfbox-layout-fop/src/main/java/org/apache/pdfbox/glyphlayout/fop/GlyphLayoutFontLoaderFop.java
        Wed Sep  2 15:21:29 2026        (r1937778)
@@ -34,6 +34,7 @@ import org.apache.fop.fonts.FontLoader;
 import org.apache.fop.fonts.FontUris;
 import org.apache.fop.fonts.MultiByteFont;
 
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.font.PDFont;
 import org.apache.pdfbox.pdmodel.font.PDType0Font;
@@ -71,13 +72,9 @@ public class GlyphLayoutFontLoaderFop
         Objects.requireNonNull(inputStream, "InputStream must not be null");
         PDType0Font pdType0Font;
 
-        // Copy font stream into memory to read it twice for creation of 
PDType0Font and aww.Font
-        try (ByteArrayInputStream bais = new 
ByteArrayInputStream(inputStream.readAllBytes()))
-        {
-            pdType0Font = PDType0Font.load(pdDocument, bais, embedSubset);
-            bais.reset();
-            loadFopFont(pdType0Font, bais);
-        }
+        byte[] bytes = inputStream.readAllBytes();
+        pdType0Font = PDType0Font.load(pdDocument, new 
RandomAccessReadBuffer(bytes), embedSubset, false);
+        loadFopFont(pdType0Font, new ByteArrayInputStream(bytes));
         return pdType0Font;
     }
 

Reply via email to