Author: tilman
Date: Wed Sep  2 15:21:24 2026
New Revision: 1937777

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

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

Modified: 
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
 Wed Sep  2 15:18:36 2026        (r1937776)
+++ 
pdfbox/branches/3.0/pdfbox-layout-awt/src/main/java/org/apache/pdfbox/glyphlayout/awt/GlyphLayoutFontLoaderAwt.java
 Wed Sep  2 15:21:24 2026        (r1937777)
@@ -30,6 +30,7 @@ import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.pdfbox.io.IOUtils;
 
+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;
@@ -115,13 +116,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(IOUtils.toByteArray(inputStream)))
+        byte[] fontBytes = IOUtils.toByteArray(inputStream);
+        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/branches/3.0/pdfbox-layout-fop/src/main/java/org/apache/pdfbox/glyphlayout/fop/GlyphLayoutFontLoaderFop.java
==============================================================================
--- 
pdfbox/branches/3.0/pdfbox-layout-fop/src/main/java/org/apache/pdfbox/glyphlayout/fop/GlyphLayoutFontLoaderFop.java
 Wed Sep  2 15:18:36 2026        (r1937776)
+++ 
pdfbox/branches/3.0/pdfbox-layout-fop/src/main/java/org/apache/pdfbox/glyphlayout/fop/GlyphLayoutFontLoaderFop.java
 Wed Sep  2 15:21:24 2026        (r1937777)
@@ -35,6 +35,7 @@ import org.apache.fop.fonts.FontUris;
 import org.apache.fop.fonts.MultiByteFont;
 import org.apache.pdfbox.io.IOUtils;
 
+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;
@@ -73,12 +74,9 @@ public class GlyphLayoutFontLoaderFop
         PDType0Font pdType0Font;
 
         // Copy font stream into memory to read it twice for creation of 
PDType0Font and aww.Font
-        try (ByteArrayInputStream bais = new 
ByteArrayInputStream(IOUtils.toByteArray(inputStream)))
-        {
-            pdType0Font = PDType0Font.load(pdDocument, bais, embedSubset);
-            bais.reset();
-            loadFopFont(pdType0Font, bais);
-        }
+        byte[] bytes = IOUtils.toByteArray(inputStream);
+        pdType0Font = PDType0Font.load(pdDocument, new 
RandomAccessReadBuffer(bytes), embedSubset, false);
+        loadFopFont(pdType0Font, new ByteArrayInputStream(bytes));
         return pdType0Font;
     }
 

Reply via email to