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 2022/05/22 11:45:04 UTC

svn commit: r1901121 - in /pdfbox/trunk: examples/src/main/java/org/apache/pdfbox/examples/pdmodel/ fontbox/src/main/java/org/apache/fontbox/ttf/ fontbox/src/test/java/org/apache/fontbox/cmap/ fontbox/src/test/java/org/apache/fontbox/ttf/ pdfbox/src/ma...

Author: lehmi
Date: Sun May 22 11:45:04 2022
New Revision: 1901121

URL: http://svn.apache.org/viewvc?rev=1901121&view=rev
Log:
PDFBOX-5435: move the handling of the source away from the TTFParser to the caller

Modified:
    pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java
    pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java
    pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java
    pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java
    pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestCMapSubtable.java
    pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java

Modified: pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java (original)
+++ pdfbox/trunk/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/EmbeddedVerticalFonts.java Sun May 22 11:45:04 2022
@@ -19,6 +19,7 @@ import java.io.File;
 import java.io.IOException;
 import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.ttf.TrueTypeFont;
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDPageContentStream;
@@ -57,7 +58,7 @@ public class EmbeddedVerticalFonts
 
         // Load as vertical, but disable vertical glyph substitution
         // (You will usually not want this because it doesn't look good!)
-        TrueTypeFont ttf = new TTFParser().parse(ipafont);
+        TrueTypeFont ttf = new TTFParser().parse(new RandomAccessReadBufferedFile(ipafont));
         PDType0Font vfont2 = PDType0Font.loadVertical(document, ttf, true);
         ttf.disableGsubFeature("vrt2");
         ttf.disableGsubFeature("vert");

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/OTFParser.java Sun May 22 11:45:04 2022
@@ -17,9 +17,7 @@
 
 package org.apache.fontbox.ttf;
 
-import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 
 import org.apache.pdfbox.io.RandomAccessRead;
 
@@ -58,18 +56,6 @@ public final class OTFParser extends TTF
     }
 
     @Override
-    public OpenTypeFont parse(File file) throws IOException
-    {
-        return (OpenTypeFont)super.parse(file);
-    }
-
-    @Override
-    public OpenTypeFont parse(InputStream data) throws IOException
-    {
-        return (OpenTypeFont)super.parse(data);
-    }
-
-    @Override
     public OpenTypeFont parse(RandomAccessRead randomAccessRead) throws IOException
     {
         return (OpenTypeFont) super.parse(randomAccessRead);

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java (original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/TTFParser.java Sun May 22 11:45:04 2022
@@ -16,14 +16,12 @@
  */
 package org.apache.fontbox.ttf;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.pdfbox.io.RandomAccessRead;
 import org.apache.pdfbox.io.RandomAccessReadBuffer;
-import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 
 /**
  * TrueType font file parser.
@@ -68,53 +66,28 @@ public class TTFParser
     }
 
     /**
-     * Parse a file and return a TrueType font.
+     * Parse a RandomAccessRead and return a TrueType font.
      *
-     * @param ttfFile The TrueType font file.
+     * @param randomAccessRead The RandomAccessREad to be read from. It will be closed before returning.
      * @return A TrueType font.
      * @throws IOException If there is an error parsing the TrueType font.
      */
-    public TrueTypeFont parse(File ttfFile) throws IOException
+    public TrueTypeFont parse(RandomAccessRead randomAccessRead) throws IOException
     {
-        RandomAccessReadBufferedFile randomAccessReadBufferedFile = new RandomAccessReadBufferedFile(
-                ttfFile);
+        RandomAccessReadDataStream dataStream = new RandomAccessReadDataStream(randomAccessRead);
         try
         {
-            return parse(randomAccessReadBufferedFile);
+            return parse(dataStream);
         }
         catch (IOException ex)
         {
-            // close only on error (file is still being accessed later)
-            randomAccessReadBufferedFile.close();
+            // close only on error (source is still being accessed later)
+            dataStream.close();
             throw ex;
         }
     }
 
     /**
-     * Parse an input stream and return a TrueType font.
-     *
-     * @param inputStream The TTF data stream to parse from. It will be closed before returning.
-     * @return A TrueType font.
-     * @throws IOException If there is an error parsing the TrueType font.
-     */
-    public TrueTypeFont parse(InputStream inputStream) throws IOException
-    {
-        return parse(new RandomAccessReadBuffer(inputStream));
-    }
-
-    /**
-     * Parse a RandomAccessRead and return a TrueType font.
-     *
-     * @param randomAccessRead The RandomAccessREad to be read from. It will be closed before returning.
-     * @return A TrueType font.
-     * @throws IOException If there is an error parsing the TrueType font.
-     */
-    public TrueTypeFont parse(RandomAccessRead randomAccessRead) throws IOException
-    {
-        return parse(new RandomAccessReadDataStream(randomAccessRead));
-    }
-
-    /**
      * Parse an input stream and return a TrueType font that is to be embedded.
      *
      * @param inputStream The TTF data stream to parse from. It will be closed before returning.

Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/cmap/TestCMap.java Sun May 22 11:45:04 2022
@@ -24,6 +24,7 @@ import java.io.IOException;
 import org.apache.fontbox.ttf.CmapLookup;
 import org.apache.fontbox.ttf.TTFParser;
 import org.apache.fontbox.ttf.TrueTypeFont;
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -56,7 +57,7 @@ class TestCMap
     void testPDFBox3997() throws IOException
     {
         try (TrueTypeFont ttf = new TTFParser()
-                .parse(new File("target/pdfs/NotoEmoji-Regular.ttf")))
+                .parse(new RandomAccessReadBufferedFile("target/pdfs/NotoEmoji-Regular.ttf")))
         {
             CmapLookup cmap = ttf.getUnicodeCmapLookup(false);
             assertEquals(886, cmap.getGlyphId(0x1F681));

Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/GSUBTableDebugger.java Sun May 22 11:45:04 2022
@@ -49,7 +49,8 @@ public class GSUBTableDebugger
         glyphSubstitutionTable.read(null, randomAccessReadBufferDataStream);
 
         TrueTypeFont trueTypeFont = new TTFParser()
-                .parse(GSUBTableDebugger.class.getResourceAsStream(LOHIT_BENGALI_FONT_FILE));
+                .parse(new RandomAccessReadBuffer(
+                        GSUBTableDebugger.class.getResourceAsStream(LOHIT_BENGALI_FONT_FILE)));
 
         GsubData gsubData = glyphSubstitutionTable.getGsubData();
         new GSUBTablePrintUtil().printCharacterToGlyph(gsubData,

Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TTFSubsetterTest.java Sun May 22 11:45:04 2022
@@ -15,7 +15,6 @@
  */
 package org.apache.fontbox.ttf;
 
-import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
@@ -25,6 +24,9 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map.Entry;
 import org.apache.fontbox.util.autodetect.FontFileFinder;
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -48,13 +50,14 @@ class TTFSubsetterTest
     @Test
     void testEmptySubset() throws IOException
     {
-        TrueTypeFont x = new TTFParser()
-                .parse(new File("src/test/resources/ttf/LiberationSans-Regular.ttf"));
+        TrueTypeFont x = new TTFParser().parse(new RandomAccessReadBufferedFile(
+                "src/test/resources/ttf/LiberationSans-Regular.ttf"));
         TTFSubsetter ttfSubsetter = new TTFSubsetter(x);
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ttfSubsetter.writeToStream(baos);
-        try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray())))
+        try (TrueTypeFont subset = new TTFParser(true)
+                .parse(new RandomAccessReadBuffer(baos.toByteArray())))
         {
             assertEquals(1, subset.getNumberOfGlyphs());
             assertEquals(0, subset.nameToGID(".notdef"));
@@ -70,8 +73,8 @@ class TTFSubsetterTest
     @Test
     void testEmptySubset2() throws IOException
     {
-        TrueTypeFont x = new TTFParser()
-                .parse(new File("src/test/resources/ttf/LiberationSans-Regular.ttf"));
+        TrueTypeFont x = new TTFParser().parse(new RandomAccessReadBufferedFile(
+                "src/test/resources/ttf/LiberationSans-Regular.ttf"));
         // List copied from TrueTypeEmbedder.java
         List<String> tables = new ArrayList<>();
         tables.add("head");
@@ -88,7 +91,8 @@ class TTFSubsetterTest
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ttfSubsetter.writeToStream(baos);
-        try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray())))
+        try (TrueTypeFont subset = new TTFParser(true)
+                .parse(new RandomAccessReadBuffer(baos.toByteArray())))
         {
             assertEquals(1, subset.getNumberOfGlyphs());
             assertEquals(0, subset.nameToGID(".notdef"));
@@ -104,13 +108,14 @@ class TTFSubsetterTest
     @Test
     void testNonEmptySubset() throws IOException
     {
-        TrueTypeFont full = new TTFParser()
-                .parse(new File("src/test/resources/ttf/LiberationSans-Regular.ttf"));
+        TrueTypeFont full = new TTFParser().parse(new RandomAccessReadBufferedFile(
+                "src/test/resources/ttf/LiberationSans-Regular.ttf"));
         TTFSubsetter ttfSubsetter = new TTFSubsetter(full);
         ttfSubsetter.add('a');
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ttfSubsetter.writeToStream(baos);
-        try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray())))
+        try (TrueTypeFont subset = new TTFParser(true)
+                .parse(new RandomAccessReadBuffer(baos.toByteArray())))
         {
             assertEquals(2, subset.getNumberOfGlyphs());
             assertEquals(0, subset.nameToGID(".notdef"));
@@ -149,7 +154,7 @@ class TTFSubsetterTest
         }
         Assumptions.assumeTrue(simhei != null, "SimHei font not available on this machine, test skipped");
         System.out.println("SimHei font found!");
-        TrueTypeFont full = new TTFParser().parse(simhei);
+        TrueTypeFont full = new TTFParser().parse(new RandomAccessReadBufferedFile(simhei));
 
         // List copied from TrueTypeEmbedder.java
         // Without it, the test would fail because of missing post table in source font
@@ -177,7 +182,8 @@ class TTFSubsetterTest
 
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ttfSubsetter.writeToStream(baos);
-        try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray())))
+        try (TrueTypeFont subset = new TTFParser(true)
+                .parse(new RandomAccessReadBuffer(baos.toByteArray())))
         {
             assertEquals(6, subset.getNumberOfGlyphs());
 
@@ -200,14 +206,16 @@ class TTFSubsetterTest
     @Test
     void testPDFBox3379() throws IOException
     {
-        TrueTypeFont full = new TTFParser().parse(new File("target/pdfs/DejaVuSansMono.ttf"));
+        TrueTypeFont full = new TTFParser()
+                .parse(new RandomAccessReadBufferedFile("target/pdfs/DejaVuSansMono.ttf"));
         TTFSubsetter ttfSubsetter = new TTFSubsetter(full);
         ttfSubsetter.add('A');
         ttfSubsetter.add(' ');
         ttfSubsetter.add('B');
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ttfSubsetter.writeToStream(baos);
-        try (TrueTypeFont subset = new TTFParser().parse(new ByteArrayInputStream(baos.toByteArray())))
+        try (TrueTypeFont subset = new TTFParser()
+                .parse(new RandomAccessReadBuffer(baos.toByteArray())))
         {
             assertEquals(4, subset.getNumberOfGlyphs());
             assertEquals(0, subset.nameToGID(".notdef"));
@@ -235,13 +243,14 @@ class TTFSubsetterTest
     void testPDFBox3757() throws IOException
     {
         final File testFile = new File("src/test/resources/ttf/LiberationSans-Regular.ttf");
-        TrueTypeFont ttf = new TTFParser().parse(testFile);
+        TrueTypeFont ttf = new TTFParser().parse(new RandomAccessReadBufferedFile(testFile));
         TTFSubsetter ttfSubsetter = new TTFSubsetter(ttf);
         ttfSubsetter.add('Ö');
         ttfSubsetter.add('\u200A');
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ttfSubsetter.writeToStream(baos);
-        try (TrueTypeFont subset = new TTFParser(true).parse(new ByteArrayInputStream(baos.toByteArray())))
+        try (TrueTypeFont subset = new TTFParser(true)
+                .parse(new RandomAccessReadBuffer(baos.toByteArray())))
         {
             assertEquals(5, subset.getNumberOfGlyphs());
             

Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestCMapSubtable.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestCMapSubtable.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestCMapSubtable.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestCMapSubtable.java Sun May 22 11:45:04 2022
@@ -20,6 +20,8 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
+
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
@@ -39,7 +41,7 @@ class TestCMapSubtable
         int gid = 8712;
         File fontFile = new File("target/pdfs", "NotoSansSC-Regular.otf");
         OTFParser otfParser = new OTFParser(false);
-        OpenTypeFont otf = otfParser.parse(fontFile);
+        OpenTypeFont otf = otfParser.parse(new RandomAccessReadBufferedFile(fontFile));
 
         CmapLookup unicodeCmapLookup = otf.getUnicodeCmapLookup();
         List<Integer> charCodes = unicodeCmapLookup.getCharCodes(gid);

Modified: pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java (original)
+++ pdfbox/trunk/fontbox/src/test/java/org/apache/fontbox/ttf/TestTTFParser.java Sun May 22 11:45:04 2022
@@ -24,6 +24,8 @@ import java.io.InputStream;
 import java.util.Calendar;
 import java.util.TimeZone;
 
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -48,7 +50,7 @@ class TestTTFParser
         //Set the default to something not UTC and see if a UTC timeZone is returned
         TimeZone.setDefault(TimeZone.getTimeZone("America/Los Angeles"));
         TTFParser parser = new TTFParser();
-        TrueTypeFont ttf = parser.parse(testFile);
+        TrueTypeFont ttf = parser.parse(new RandomAccessReadBufferedFile(testFile));
         Calendar created = ttf.getHeader().getCreated();
         assertEquals(created.getTimeZone(), utc);
 
@@ -71,7 +73,7 @@ class TestTTFParser
         assertNotNull(input);
 
         TTFParser parser = new TTFParser();
-        TrueTypeFont font = parser.parse(input);
+        TrueTypeFont font = parser.parse(new RandomAccessReadBuffer(input));
 
         CmapTable cmapTable = font.getCmap();
         assertNotNull(cmapTable);

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/FileSystemFontProvider.java Sun May 22 11:45:04 2022
@@ -45,6 +45,7 @@ import org.apache.fontbox.ttf.TrueTypeCo
 import org.apache.fontbox.ttf.TrueTypeFont;
 import org.apache.fontbox.type1.Type1Font;
 import org.apache.fontbox.util.autodetect.FontFileFinder;
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 
 /**
  * A FontProvider which searches for fonts on the local filesystem.
@@ -232,7 +233,7 @@ final class FileSystemFontProvider exten
             else
             {
                 TTFParser ttfParser = new TTFParser(false, true);
-                return ttfParser.parse(file);
+                return ttfParser.parse(new RandomAccessReadBufferedFile(file));
             }
         }
 
@@ -266,7 +267,7 @@ final class FileSystemFontProvider exten
                 }
 
                 OTFParser parser = new OTFParser(false, true);
-                OpenTypeFont otf = parser.parse(file);
+                OpenTypeFont otf = parser.parse(new RandomAccessReadBufferedFile(file));
 
                 if (LOG.isDebugEnabled())
                 {
@@ -630,13 +631,13 @@ final class FileSystemFontProvider exten
             if (ttfFile.getPath().toLowerCase().endsWith(".otf"))
             {
                 OTFParser parser = new OTFParser(false, true);
-                OpenTypeFont otf = parser.parse(ttfFile);
+                OpenTypeFont otf = parser.parse(new RandomAccessReadBufferedFile(ttfFile));
                 addTrueTypeFontImpl(otf, ttfFile);
             }
             else
             {
                 TTFParser parser = new TTFParser(false, true);
-                TrueTypeFont ttf = parser.parse(ttfFile);
+                TrueTypeFont ttf = parser.parse(new RandomAccessReadBufferedFile(ttfFile));
                 addTrueTypeFontImpl(ttf, ttfFile);
             }
         }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java Sun May 22 11:45:04 2022
@@ -35,6 +35,9 @@ import org.apache.fontbox.ttf.TrueTypeFo
 import org.apache.fontbox.util.BoundingBox;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.io.RandomAccessRead;
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.common.PDRectangle;
 import org.apache.pdfbox.pdmodel.common.PDStream;
@@ -171,7 +174,7 @@ public class PDTrueTypeFont extends PDSi
     public static PDTrueTypeFont load(PDDocument doc, File file, Encoding encoding)
             throws IOException
     {
-        return new PDTrueTypeFont(doc, new TTFParser().parse(file), encoding, true);
+        return load(doc, new RandomAccessReadBufferedFile(file), encoding);
     }
 
     /**
@@ -189,7 +192,7 @@ public class PDTrueTypeFont extends PDSi
     public static PDTrueTypeFont load(PDDocument doc, InputStream input, Encoding encoding)
             throws IOException
     {
-        return new PDTrueTypeFont(doc, new TTFParser().parse(input), encoding, true);
+        return load(doc, new RandomAccessReadBuffer(input), encoding);
     }
 
     /**
@@ -213,6 +216,26 @@ public class PDTrueTypeFont extends PDSi
     }
 
     /**
+     * Loads a TTF to be embedded into a document as a simple font.
+     * 
+     * <p>
+     * <b>Note:</b> Simple fonts only support 256 characters. For Unicode support, use
+     * {@link PDType0Font#load(PDDocument, File)} instead.
+     * </p>
+     *
+     * @param doc The PDF document that will hold the embedded font.
+     * @param randomAccessRead the source of the TTF.
+     * @param encoding The PostScript encoding vector to be used for embedding.
+     * @return a PDTrueTypeFont instance.
+     * @throws IOException If there is an error loading the data.
+     */
+    public static PDTrueTypeFont load(PDDocument doc, RandomAccessRead randomAccessRead,
+            Encoding encoding) throws IOException
+    {
+        return new PDTrueTypeFont(doc, new TTFParser().parse(randomAccessRead), encoding, true);
+    }
+
+    /**
      * Returns the PostScript name of the font.
      */
     public final String getBaseFont()

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDType0Font.java Sun May 22 11:45:04 2022
@@ -36,6 +36,9 @@ import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSBase;
 import org.apache.pdfbox.cos.COSDictionary;
 import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.io.RandomAccessRead;
+import org.apache.pdfbox.io.RandomAccessReadBuffer;
+import org.apache.pdfbox.io.RandomAccessReadBufferedFile;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.util.Matrix;
 import org.apache.pdfbox.util.Vector;
@@ -149,7 +152,7 @@ public class PDType0Font extends PDFont
      */
     public static PDType0Font load(PDDocument doc, File file) throws IOException
     {
-        return new PDType0Font(doc, new TTFParser().parse(file), true, true, false);
+        return load(doc, new RandomAccessReadBufferedFile(file), true, false);
     }
 
     /**
@@ -179,7 +182,24 @@ public class PDType0Font extends PDFont
     public static PDType0Font load(PDDocument doc, InputStream input, boolean embedSubset)
             throws IOException
     {
-        return new PDType0Font(doc, new TTFParser().parse(input), embedSubset, true, false);
+        return load(doc, new RandomAccessReadBuffer(input), embedSubset, false);
+    }
+
+    /**
+     * Loads a TTF to be embedded into a document as a Type 0 font.
+     *
+     * @param doc The PDF document that will hold the embedded font.
+     * @param randomAccessRead source of a TrueType font.
+     * @param embedSubset True if the font will be subset before embedding. Set this to false when creating a font for
+     * AcroForm.
+     * @return A Type0 font with a CIDFontType2 descendant.
+     * @throws IOException If there is an error reading the font stream.
+     */
+    public static PDType0Font load(PDDocument doc, RandomAccessRead randomAccessRead,
+            boolean embedSubset, boolean vertical) throws IOException
+    {
+        return new PDType0Font(doc, new TTFParser().parse(randomAccessRead), embedSubset, true,
+                vertical);
     }
 
     /**
@@ -187,8 +207,8 @@ public class PDType0Font extends PDFont
      *
      * @param doc The PDF document that will hold the embedded font.
      * @param ttf A TrueType font.
-     * @param embedSubset True if the font will be subset before embedding. Set this to false when
-     * creating a font for AcroForm.
+     * @param embedSubset True if the font will be subset before embedding. Set this to false when creating a font for
+     * AcroForm.
      * @return A Type0 font with a CIDFontType2 descendant.
      * @throws IOException If there is an error reading the font stream.
      */
@@ -208,7 +228,7 @@ public class PDType0Font extends PDFont
      */
     public static PDType0Font loadVertical(PDDocument doc, File file) throws IOException
     {
-        return new PDType0Font(doc, new TTFParser().parse(file), true, true, true);
+        return load(doc, new RandomAccessReadBufferedFile(file), true, true);
     }
 
     /**
@@ -221,7 +241,7 @@ public class PDType0Font extends PDFont
      */
     public static PDType0Font loadVertical(PDDocument doc, InputStream input) throws IOException
     {
-        return new PDType0Font(doc, new TTFParser().parse(input), true, true, true);
+        return load(doc, new RandomAccessReadBuffer(input), true, true);
     }
 
     /**
@@ -236,7 +256,7 @@ public class PDType0Font extends PDFont
     public static PDType0Font loadVertical(PDDocument doc, InputStream input, boolean embedSubset)
             throws IOException
     {
-        return new PDType0Font(doc, new TTFParser().parse(input), embedSubset, true, true);
+        return load(doc, new RandomAccessReadBuffer(input), embedSubset, true);
     }
 
     /**

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java?rev=1901121&r1=1901120&r2=1901121&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/PDFontTest.java Sun May 22 11:45:04 2022
@@ -139,7 +139,7 @@ class PDFontTest
                 "/org/apache/pdfbox/resources/ttf/LiberationSans-Regular.ttf");
         File fontFile = new File(url.toURI());
 
-        try (TrueTypeFont ttf1 = new TTFParser().parse(fontFile))
+        try (TrueTypeFont ttf1 = new TTFParser().parse(new RandomAccessReadBufferedFile(fontFile)))
         {
             testPDFBox3826checkFonts(testPDFBox3826createDoc(ttf1), fontFile);
         }