Package com.itextpdf.io.font
Class TrueTypeFontSubset
- java.lang.Object
-
- com.itextpdf.io.font.TrueTypeFontSubset
-
class TrueTypeFontSubset extends java.lang.ObjectSubsets a True Type font by removing the unneeded glyphs from the font.
-
-
Field Summary
Fields Modifier and Type Field Description private static intARG_1_AND_2_ARE_WORDSprivate intdirectoryOffsetprivate static int[]entrySelectorsprivate java.lang.StringfileNameThe file name.private intfontPtrprivate intglyfTableRealSizeprivate java.util.List<java.lang.Integer>glyphsInListprivate java.util.Set<java.lang.Integer>glyphsUsedprivate static intHEAD_LOCA_FORMAT_OFFSETprivate booleanlocaShortTableprivate int[]locaTableprivate intlocaTableRealSizeprivate static intMORE_COMPONENTSprivate byte[]newGlyfTableprivate int[]newLocaTableprivate byte[]newLocaTableOutprivate byte[]outFontprotected RandomAccessFileOrArrayrfThe file in use.private static intTABLE_CHECKSUMprivate static intTABLE_LENGTHprivate static java.lang.String[]TABLE_NAMESprivate static java.lang.String[]TABLE_NAMES_SUBSETprivate static intTABLE_OFFSETprivate java.util.Map<java.lang.String,int[]>tableDirectoryContains the location of the several tables.private inttableGlyphOffsetprivate java.lang.String[]tableNamesprivate static intWE_HAVE_A_SCALEprivate static intWE_HAVE_A_TWO_BY_TWOprivate static intWE_HAVE_AN_X_AND_Y_SCALE
-
Constructor Summary
Constructors Constructor Description TrueTypeFontSubset(java.lang.String fileName, RandomAccessFileOrArray rf, java.util.Set<java.lang.Integer> glyphsUsed, int directoryOffset, boolean subset)Creates a new TrueTypeFontSubSet
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidassembleFont()private intcalculateChecksum(byte[] b)private voidcheckGlyphComposite(int glyph)private voidcreateNewGlyphTables()private voidcreateTableDirectory()private voidflatGlyphs()private voidlocaToBytes()(package private) byte[]process()Does the actual work of subsetting the font.private voidreadLoca()private java.lang.StringreadStandardString(int length)Reads aStringfrom the font file as bytes using the Cp1252 encoding.private voidwriteFontInt(int n)private voidwriteFontShort(int n)private voidwriteFontString(java.lang.String s)
-
-
-
Field Detail
-
TABLE_NAMES_SUBSET
private static final java.lang.String[] TABLE_NAMES_SUBSET
-
TABLE_NAMES
private static final java.lang.String[] TABLE_NAMES
-
entrySelectors
private static final int[] entrySelectors
-
TABLE_CHECKSUM
private static final int TABLE_CHECKSUM
- See Also:
- Constant Field Values
-
TABLE_OFFSET
private static final int TABLE_OFFSET
- See Also:
- Constant Field Values
-
TABLE_LENGTH
private static final int TABLE_LENGTH
- See Also:
- Constant Field Values
-
HEAD_LOCA_FORMAT_OFFSET
private static final int HEAD_LOCA_FORMAT_OFFSET
- See Also:
- Constant Field Values
-
ARG_1_AND_2_ARE_WORDS
private static final int ARG_1_AND_2_ARE_WORDS
- See Also:
- Constant Field Values
-
WE_HAVE_A_SCALE
private static final int WE_HAVE_A_SCALE
- See Also:
- Constant Field Values
-
MORE_COMPONENTS
private static final int MORE_COMPONENTS
- See Also:
- Constant Field Values
-
WE_HAVE_AN_X_AND_Y_SCALE
private static final int WE_HAVE_AN_X_AND_Y_SCALE
- See Also:
- Constant Field Values
-
WE_HAVE_A_TWO_BY_TWO
private static final int WE_HAVE_A_TWO_BY_TWO
- See Also:
- Constant Field Values
-
tableDirectory
private java.util.Map<java.lang.String,int[]> tableDirectory
Contains the location of the several tables. The key is the name of the table and the value is anint[3]where position 0 is the checksum, position 1 is the offset from the start of the file and position 2 is the length of the table.
-
rf
protected RandomAccessFileOrArray rf
The file in use.
-
fileName
private java.lang.String fileName
The file name.
-
locaShortTable
private boolean locaShortTable
-
locaTable
private int[] locaTable
-
glyphsUsed
private java.util.Set<java.lang.Integer> glyphsUsed
-
glyphsInList
private java.util.List<java.lang.Integer> glyphsInList
-
tableGlyphOffset
private int tableGlyphOffset
-
newLocaTable
private int[] newLocaTable
-
newLocaTableOut
private byte[] newLocaTableOut
-
newGlyfTable
private byte[] newGlyfTable
-
glyfTableRealSize
private int glyfTableRealSize
-
locaTableRealSize
private int locaTableRealSize
-
outFont
private byte[] outFont
-
fontPtr
private int fontPtr
-
directoryOffset
private int directoryOffset
-
tableNames
private final java.lang.String[] tableNames
-
-
Constructor Detail
-
TrueTypeFontSubset
TrueTypeFontSubset(java.lang.String fileName, RandomAccessFileOrArray rf, java.util.Set<java.lang.Integer> glyphsUsed, int directoryOffset, boolean subset)Creates a new TrueTypeFontSubSet- Parameters:
directoryOffset- The offset from the start of the file to the table directoryfileName- the file name of the fontglyphsUsed- the glyphs used
-
-
Method Detail
-
process
byte[] process() throws java.io.IOExceptionDoes the actual work of subsetting the font.- Returns:
- the subset font
- Throws:
java.io.IOException- on error
-
assembleFont
private void assembleFont() throws java.io.IOException- Throws:
java.io.IOException
-
createTableDirectory
private void createTableDirectory() throws java.io.IOException- Throws:
java.io.IOException
-
readLoca
private void readLoca() throws java.io.IOException- Throws:
java.io.IOException
-
createNewGlyphTables
private void createNewGlyphTables() throws java.io.IOException- Throws:
java.io.IOException
-
locaToBytes
private void locaToBytes()
-
flatGlyphs
private void flatGlyphs() throws java.io.IOException- Throws:
java.io.IOException
-
checkGlyphComposite
private void checkGlyphComposite(int glyph) throws java.io.IOException- Throws:
java.io.IOException
-
readStandardString
private java.lang.String readStandardString(int length) throws java.io.IOExceptionReads aStringfrom the font file as bytes using the Cp1252 encoding.- Parameters:
length- the length of bytes to read- Returns:
- the
Stringread - Throws:
java.io.IOException- the font file could not be read
-
writeFontShort
private void writeFontShort(int n)
-
writeFontInt
private void writeFontInt(int n)
-
writeFontString
private void writeFontString(java.lang.String s)
-
calculateChecksum
private int calculateChecksum(byte[] b)
-
-