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