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