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