## com.lowagie.text.pdf
Class TrueTypeFont

    java.lang.Object
      com.lowagie.text.pdf.BaseFont
          com.lowagie.text.pdf.TrueTypeFont

Direct Known Subclasses:
  EnumerateTTC, TrueTypeFontUnicode

     class TrueTypeFont

extends BaseFont

Reads a Truetype font

Author:
  Paulo Soares (psoares@consiste.pt)

Nested Class Summary
`protected static class` `TrueTypeFont.FontHeader` The components of table 'head'.
`protected static class` `TrueTypeFont.HorizontalHeader` The components of table 'hhea'.
`protected static class` `TrueTypeFont.WindowsMetrics` The components of table 'OS/2'.

Nested classes/interfaces inherited from class com.lowagie.text.pdf.BaseFont
`BaseFont.StreamFont`

Field Summary
`protected java.lang.String[][]` `allNameEntries` All the names of the Names-Table
`protected int[][]` `bboxes`
`protected boolean` `cff`
`protected int` `cffLength`
`protected int` `cffOffset`
`protected java.util.HashMap` `cmap10` The map containing the code information for the table 'cmap', encoding 1.0.
`protected java.util.HashMap` `cmap31` The map containing the code information for the table 'cmap', encoding 3.1 in Unicode.
`protected java.util.HashMap` `cmapExt`
`(package private) static java.lang.String[]` `codePages` The code pages possible for a True Type font.
`protected int` `directoryOffset` The offset from the start of the file to the table directory.
`protected java.lang.String[][]` `familyName` The family name of the font
`protected java.lang.String` `fileName` The file name.
`protected java.lang.String` `fontName` The font name.
`protected java.lang.String[][]` `fullName` The full name of the font
`protected int[]` `GlyphWidths` The width of the glyphs.
`protected TrueTypeFont.FontHeader` `head` The content of table 'head'.
`protected TrueTypeFont.HorizontalHeader` `hhea` The content of table 'hhea'.
`protected boolean` `isFixedPitch` `true` if all the glyphs have the same width.
`protected double` `italicAngle` The italic angle.
`protected boolean` `justNames`
`protected IntHashtable` `kerning` The map containing the kerning information.
`protected TrueTypeFont.WindowsMetrics` `os_2` The content of table 'OS/2'.
`protected RandomAccessFileOrArray` `rf` The file in use.
`protected java.lang.String` `style` The style modifier
`protected java.util.HashMap` `tables` Contains the location of the several tables.
`protected java.lang.String` `ttcIndex` The index for the TTC font.
`protected int` `underlinePosition`
`protected int` `underlineThickness`

Fields inherited from class com.lowagie.text.pdf.BaseFont

`ASCENT, AWT_ASCENT, AWT_DESCENT, AWT_LEADING, AWT_MAXADVANCE, BBOXLLX, BBOXLLY, BBOXURX, BBOXURY, BuiltinFonts14, CACHED, CAPHEIGHT, CHAR_RANGE_ARABIC, CHAR_RANGE_CYRILLIC, CHAR_RANGE_HEBREW, CHAR_RANGE_LATIN, charBBoxes, CID_NEWLINE, compressionLevel, COURIER, COURIER_BOLD, COURIER_BOLDOBLIQUE, COURIER_OBLIQUE, CP1250, CP1252, CP1257, DESCENT, differences, directTextToByte, embedded, EMBEDDED, encoding, fastWinansi, FONT_TYPE_CJK, FONT_TYPE_DOCUMENT, FONT_TYPE_T1, FONT_TYPE_T3, FONT_TYPE_TT, FONT_TYPE_TTUNI, fontCache, fontSpecific, fontType, forceWidthsOutput, HELVETICA, HELVETICA_BOLD, HELVETICA_BOLDOBLIQUE, HELVETICA_OBLIQUE, IDENTITY_H, IDENTITY_V, ITALICANGLE, MACROMAN, NOT_CACHED, NOT_EMBEDDED, notdef, RESOURCE_PATH, specialMap, STRIKETHROUGH_POSITION, STRIKETHROUGH_THICKNESS, SUBSCRIPT_OFFSET, SUBSCRIPT_SIZE, subset, subsetRanges, SUPERSCRIPT_OFFSET, SUPERSCRIPT_SIZE, SYMBOL, TIMES_BOLD, TIMES_BOLDITALIC, TIMES_ITALIC, TIMES_ROMAN, UNDERLINE_POSITION, UNDERLINE_THICKNESS, unicodeDifferences, widths, WINANSI, ZAPFDINGBATS`

Constructor Summary
`protected` `TrueTypeFont()` This constructor is present to allow extending the class.
`(package private)` `TrueTypeFont(java.lang.String ttFile, java.lang.String enc, boolean emb, byte[] ttfAfm, boolean justNames, boolean forceRead)` Creates a new TrueType font.

Method Summary
`protected void` `addRangeUni(java.util.HashMap longTag, boolean includeMetrics, boolean subsetp)`
`(package private) void` `checkCff()`
`protected static int[]` `compactRanges(java.util.ArrayList ranges)`
`(package private) void` `fillTables()` Reads the tables 'head', 'hhea', 'OS/2' and 'post' filling several variables.
`java.lang.String[][]` `getAllNameEntries()` Gets all the entries of the Names-Table.
`(package private) java.lang.String[][]` `getAllNames()` Extracts all the names of the names-Table
`(package private) java.lang.String` `getBaseFont()` Gets the Postscript font name.
`java.lang.String[]` `getCodePagesSupported()` Gets the code pages supported by the font.
`java.lang.String[][]` `getFamilyFontName()` Gets the family name of the font.
`protected PdfDictionary` `getFontBaseType(PdfIndirectReference fontDescriptor, java.lang.String subsetPrefix, int firstChar, int lastChar, byte[] shortTag)` Generates the font dictionary for this font.
`float` `getFontDescriptor(int key, float fontSize)` Gets the font parameter identified by `key`.
`protected PdfDictionary` `getFontDescriptor(PdfIndirectReference fontStream, java.lang.String subsetPrefix, PdfIndirectReference cidset)` Generates the font descriptor for this font.
`protected byte[]` `getFullFont()`
`java.lang.String[][]` `getFullFontName()` Gets the full name of the font.
`PdfStream` `getFullFontStream()` Returns a PdfStream object with the full font program.
`protected int` `getGlyphWidth(int glyph)` Gets a glyph width.
`int` `getKerning(int char1, int char2)` Gets the kerning between two Unicode chars.
`int[]` `getMetricsTT(int c)` Gets the glyph index and metrics for a character.
`(package private) java.lang.String[][]` `getNames(int id)` Extracts the names of the font in all the languages available.
`java.lang.String` `getPostscriptFontName()` Gets the postscript font name.
`protected int[]` `getRawCharBBox(int c, java.lang.String name)`
`(package private) int` `getRawWidth(int c, java.lang.String name)` Gets the width from the font according to the unicode char `c`.
`protected static java.lang.String` `getTTCName(java.lang.String name)` Gets the name from a composed TTC file name.
`boolean` `hasKernPairs()` Checks if the font has any kerning pairs.
`(package private) void` `process(byte[] ttfAfm, boolean preload)` Reads the font data.
`private void` `readBbox()`
`protected byte[]` `readCffFont()` If this font file is using the Compact Font File Format, then this method will return the raw bytes needed for the font stream.
`(package private) void` `readCMaps()` Reads the several maps from the table 'cmap'.
`(package private) java.util.HashMap` `readFormat0()` The information in the maps of the table 'cmap' is coded in several formats.
`(package private) java.util.HashMap` `readFormat12()`
`(package private) java.util.HashMap` `readFormat4()` The information in the maps of the table 'cmap' is coded in several formats.
`(package private) java.util.HashMap` `readFormat6()` The information in the maps of the table 'cmap' is coded in several formats.
`protected void` `readGlyphWidths()` Reads the glyphs widths.
`(package private) void` `readKerning()` Reads the kerning information from the 'kern' table.
`protected java.lang.String` `readStandardString(int length)` Reads a `String` from the font file as bytes using the Cp1252 encoding.
`protected java.lang.String` `readUnicodeString(int length)` Reads a Unicode `String` from the font file.
`boolean` `setKerning(int char1, int char2, int kern)` Sets the kerning between two Unicode chars.
`void` `setPostscriptFontName(java.lang.String name)` Sets the font name that will appear in the pdf font dictionary.
`(package private) void` `writeFont(PdfWriter writer, PdfIndirectReference ref, java.lang.Object[] params)` Outputs to the writer the font dictionaries and streams.

Methods inherited from class com.lowagie.text.pdf.BaseFont

`addSubsetRange, charExists, convertToBytes, convertToBytes, correctArabicAdvance, createEncoding, createFont, createFont, createFont, createFont, createFont, createFont, createFont, createSubsetPrefix, enumerateTTCNames, enumerateTTCNames, getAllFontNames, getAllNameEntries, getAscent, getAscentPoint, getBaseName, getCharBBox, getCidCode, getCompressionLevel, getDescent, getDescentPoint, getDifferences, getDocumentFonts, getDocumentFonts, getEncoding, getFontType, getFullFontName, getResourceStream, getResourceStream, getUnicodeDifferences, getUnicodeDifferences, getUnicodeEquivalent, getWidth, getWidth, getWidthPoint, getWidthPoint, getWidthPointKerned, getWidths, isDirectTextToByte, isEmbedded, isFontSpecific, isForceWidthsOutput, isSubset, normalizeEncoding, setCharAdvance, setCompressionLevel, setDirectTextToByte, setForceWidthsOutput, setSubset`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### codePages

    static final java.lang.String[] codePages

  The code pages possible for a True Type font.

### justNames

    protected boolean justNames

### tables

    protected java.util.HashMap tables

  Contains the location of the several tables. The key is the name of the table and the value is an `int[2]` where position 0 is the offset from the start of the file and position 1 is the length of the table.

### rf

    protected RandomAccessFileOrArray rf

  The file in use.

### fileName

    protected java.lang.String fileName

  The file name.

### cff

    protected boolean cff

### cffOffset

    protected int cffOffset

### cffLength

    protected int cffLength

### directoryOffset

    protected int directoryOffset

  The offset from the start of the file to the table directory. It is 0 for TTF and may vary for TTC depending on the chosen font.

### ttcIndex

    protected java.lang.String ttcIndex

  The index for the TTC font. It is an empty `String` for a TTF file.

### style

    protected java.lang.String style

  The style modifier

### head

    protected TrueTypeFont.FontHeader head

  The content of table 'head'.

### hhea

    protected TrueTypeFont.HorizontalHeader hhea

  The content of table 'hhea'.

### os_2

    protected TrueTypeFont.WindowsMetrics os_2

  The content of table 'OS/2'.

### GlyphWidths

    protected int[] GlyphWidths

  The width of the glyphs. This is essentially the content of table 'hmtx' normalized to 1000 units.

### bboxes

    protected int[][] bboxes

### cmap10

    protected java.util.HashMap cmap10

  The map containing the code information for the table 'cmap', encoding 1.0. The key is the code and the value is an `int[2]` where position 0 is the glyph number and position 1 is the glyph width normalized to 1000 units.

### cmap31

    protected java.util.HashMap cmap31

  The map containing the code information for the table 'cmap', encoding 3.1 in Unicode.

  The key is the code and the value is an `int`[2] where position 0 is the glyph number and position 1 is the glyph width normalized to 1000 units.

### cmapExt

    protected java.util.HashMap cmapExt

### kerning

    protected IntHashtable kerning

  The map containing the kerning information. It represents the content of table 'kern'. The key is an `Integer` where the top 16 bits are the glyph number for the first character and the lower 16 bits are the glyph number for the second character. The value is the amount of kerning in normalized 1000 units as an `Integer`. This value is usually negative.

### fontName

    protected java.lang.String fontName

  The font name. This name is usually extracted from the table 'name' with the 'Name ID' 6.

### fullName

    protected java.lang.String[][] fullName

  The full name of the font

### allNameEntries

    protected java.lang.String[][] allNameEntries

  All the names of the Names-Table

### familyName

    protected java.lang.String[][] familyName

  The family name of the font

### italicAngle

    protected double italicAngle

  The italic angle. It is usually extracted from the 'post' table or in it's absence with the code:

       -Math.atan2(hhea.caretSlopeRun, hhea.caretSlopeRise) * 180 / Math.PI

### isFixedPitch

    protected boolean isFixedPitch

  `true` if all the glyphs have the same width.

### underlinePosition

    protected int underlinePosition

### underlineThickness

    protected int underlineThickness

Constructor Detail

### TrueTypeFont

    protected TrueTypeFont()

  This constructor is present to allow extending the class.

### TrueTypeFont

    TrueTypeFont(java.lang.String ttFile,
                 java.lang.String enc,
                 boolean emb,
                 byte[] ttfAfm,
                 boolean justNames,
                 boolean forceRead)
           throws DocumentException,
                  java.io.IOException

  Creates a new TrueType font.

  Parameters:
    `ttFile` - the location of the font on file. The file must end in '.ttf' or '.ttc' but can have modifiers after the name
    `enc` - the encoding to be applied to this font
    `emb` - true if the font is to be embedded in the PDF
    `ttfAfm` - the font as a `byte` array
  Throws:
    `DocumentException` - the font is invalid
    `java.io.IOException` - the font file could not be read
  Since:
    2.1.5

Method Detail

### getTTCName

    protected static java.lang.String getTTCName(java.lang.String name)

  Gets the name from a composed TTC file name. If I have for input "myfont.ttc,2" the return will be "myfont.ttc".

  Parameters:
    `name` - the full name
  Returns:
    the simple file name

### fillTables

    void fillTables()
              throws DocumentException,
                     java.io.IOException

  Reads the tables 'head', 'hhea', 'OS/2' and 'post' filling several variables.

  Throws:
    `DocumentException` - the font is invalid
    `java.io.IOException` - the font file could not be read

### getBaseFont

    java.lang.String getBaseFont()
                           throws DocumentException,
                                  java.io.IOException

  Gets the Postscript font name.

  Returns:
    the Postscript font name
  Throws:
    `DocumentException` - the font is invalid
    `java.io.IOException` - the font file could not be read

### getNames

    java.lang.String[][] getNames(int id)
                            throws DocumentException,
                                   java.io.IOException

  Extracts the names of the font in all the languages available.

  Parameters:
    `id` - the name id to retrieve
  Throws:
    `DocumentException` - on error
    `java.io.IOException` - on error

### getAllNames

    java.lang.String[][] getAllNames()
                               throws DocumentException,
                                      java.io.IOException

  Extracts all the names of the names-Table

  Throws:
    `DocumentException` - on error
    `java.io.IOException` - on error

### checkCff

    void checkCff()

### process

    void process(byte[] ttfAfm,
                 boolean preload)
           throws DocumentException,
                  java.io.IOException

  Reads the font data.

  Parameters:
    `ttfAfm` - the font as a `byte` array, possibly `null`
  Throws:
    `DocumentException` - the font is invalid
    `java.io.IOException` - the font file could not be read
  Since:
    2.1.5

### readStandardString

    protected java.lang.String readStandardString(int length)
                                           throws java.io.IOException

  Reads a `String` from the font file as bytes using the Cp1252 encoding.

  Parameters:
    `length` - the length of bytes to read
  Returns:
    the `String` read
  Throws:
    `java.io.IOException` - the font file could not be read

### readUnicodeString

    protected java.lang.String readUnicodeString(int length)
                                          throws java.io.IOException

  Reads a Unicode `String` from the font file. Each character is represented by two bytes.

  Parameters:
    `length` - the length of bytes to read. The `String` will have `length`/2 characters
  Returns:
    the `String` read
  Throws:
    `java.io.IOException` - the font file could not be read

### readGlyphWidths

    protected void readGlyphWidths()
                            throws DocumentException,
                                   java.io.IOException

  Reads the glyphs widths. The widths are extracted from the table 'hmtx'. The glyphs are normalized to 1000 units.

  Throws:
    `DocumentException` - the font is invalid
    `java.io.IOException` - the font file could not be read

### getGlyphWidth

    protected int getGlyphWidth(int glyph)

  Gets a glyph width.

  Parameters:
    `glyph` - the glyph to get the width of
  Returns:
    the width of the glyph in normalized 1000 units

### readBbox

    private void readBbox()
                   throws DocumentException,
                          java.io.IOException

  Throws:
    `DocumentException`
    `java.io.IOException`

### readCMaps

    void readCMaps()
             throws DocumentException,
                    java.io.IOException

  Reads the several maps from the table 'cmap'. The maps of interest are 1.0 for symbolic fonts and 3.1 for all others. A symbolic font is defined as having the map 3.0.

  Throws:
    `DocumentException` - the font is invalid
    `java.io.IOException` - the font file could not be read

### readFormat12

    java.util.HashMap readFormat12()
                             throws java.io.IOException

  Throws:
    `java.io.IOException`

### readFormat0

    java.util.HashMap readFormat0()
                            throws java.io.IOException

  The information in the maps of the table 'cmap' is coded in several formats. Format 0 is the Apple standard character to glyph index mapping table.

  Returns:
    a `HashMap` representing this map
  Throws:
    `java.io.IOException` - the font file could not be read

### readFormat4

    java.util.HashMap readFormat4()
                            throws java.io.IOException

  The information in the maps of the table 'cmap' is coded in several formats. Format 4 is the Microsoft standard character to glyph index mapping table.

  Returns:
    a `HashMap` representing this map
  Throws:
    `java.io.IOException` - the font file could not be read

### readFormat6

    java.util.HashMap readFormat6()
                            throws java.io.IOException

  The information in the maps of the table 'cmap' is coded in several formats. Format 6 is a trimmed table mapping. It is similar to format 0 but can have less than 256 entries.

  Returns:
    a `HashMap` representing this map
  Throws:
    `java.io.IOException` - the font file could not be read

### readKerning

    void readKerning()
               throws java.io.IOException

  Reads the kerning information from the 'kern' table.

  Throws:
    `java.io.IOException` - the font file could not be read

### getKerning

    public int getKerning(int char1,
                          int char2)

  Gets the kerning between two Unicode chars.

  Specified by:
    `getKerning` in class `BaseFont`
  Parameters:
    `char1` - the first char
    `char2` - the second char
  Returns:
    the kerning to be applied

### getRawWidth

    int getRawWidth(int c,
                    java.lang.String name)

  Gets the width from the font according to the unicode char `c`. If the `name` is null it's a symbolic font.

  Specified by:
    `getRawWidth` in class `BaseFont`
  Parameters:
    `c` - the unicode char
    `name` - the glyph name
  Returns:
    the width of the char

### getFontDescriptor

    protected PdfDictionary getFontDescriptor(PdfIndirectReference fontStream,
                                              java.lang.String subsetPrefix,
                                              PdfIndirectReference cidset)

  Generates the font descriptor for this font.

  Parameters:
    `subsetPrefix` - the subset prefix
    `fontStream` - the indirect reference to a PdfStream containing the font or `null`
  Returns:
    the PdfDictionary containing the font descriptor or `null`

### getFontBaseType

    protected PdfDictionary getFontBaseType(PdfIndirectReference fontDescriptor,
                                            java.lang.String subsetPrefix,
                                            int firstChar,
                                            int lastChar,
                                            byte[] shortTag)

  Generates the font dictionary for this font.

  Parameters:
    `subsetPrefix` - the subset prefix
    `firstChar` - the first valid character
    `lastChar` - the last valid character
    `shortTag` - a 256 bytes long `byte` array where each unused byte is represented by 0
    `fontDescriptor` - the indirect reference to a PdfDictionary containing the font descriptor or `null`
  Returns:
    the PdfDictionary containing the font dictionary

### getFullFont

    protected byte[] getFullFont()
                          throws java.io.IOException

  Throws:
    `java.io.IOException`

### compactRanges

    protected static int[] compactRanges(java.util.ArrayList ranges)

### addRangeUni

    protected void addRangeUni(java.util.HashMap longTag,
                               boolean includeMetrics,
                               boolean subsetp)

### writeFont

    void writeFont(PdfWriter writer,
                   PdfIndirectReference ref,
                   java.lang.Object[] params)
             throws DocumentException,
                    java.io.IOException

  Outputs to the writer the font dictionaries and streams.

  Specified by:
    `writeFont` in class `BaseFont`
  Parameters:
    `writer` - the writer for this document
    `ref` - the font indirect reference
    `params` - several parameters that depend on the font type
  Throws:
    `java.io.IOException` - on error
    `DocumentException` - error in generating the object

### readCffFont

    protected byte[] readCffFont()
                          throws java.io.IOException

  If this font file is using the Compact Font File Format, then this method will return the raw bytes needed for the font stream. If this method is ever made public: make sure to add a test if (cff == true).

  Returns:
    a byte array
  Throws:
    `java.io.IOException`
  Since:
    2.1.3

### getFullFontStream

    public PdfStream getFullFontStream()
                                throws java.io.IOException,
                                       DocumentException

  Returns a PdfStream object with the full font program.

  Specified by:
    `getFullFontStream` in class `BaseFont`
  Returns:
    a PdfStream with the font program
  Throws:
    `java.io.IOException`
    `DocumentException`
  Since:
    2.1.3

### getFontDescriptor

    public float getFontDescriptor(int key,
                                   float fontSize)

  Gets the font parameter identified by `key`. Valid values for `key` are `ASCENT`, `CAPHEIGHT`, `DESCENT` and `ITALICANGLE`.

  Specified by:
    `getFontDescriptor` in class `BaseFont`
  Parameters:
    `key` - the parameter to be extracted
    `fontSize` - the font size in points
  Returns:
    the parameter in points

### getMetricsTT

    public int[] getMetricsTT(int c)

  Gets the glyph index and metrics for a character.

  Parameters:
    `c` - the character
  Returns:
    an `int` array with {glyph index, width}

### getPostscriptFontName

    public java.lang.String getPostscriptFontName()

  Gets the postscript font name.

  Specified by:
    `getPostscriptFontName` in class `BaseFont`
  Returns:
    the postscript font name

### getCodePagesSupported

    public java.lang.String[] getCodePagesSupported()

  Gets the code pages supported by the font.

  Overrides:
    `getCodePagesSupported` in class `BaseFont`
  Returns:
    the code pages supported by the font

### getFullFontName

    public java.lang.String[][] getFullFontName()

  Gets the full name of the font. If it is a True Type font each array element will have {Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
  For the other fonts the array has a single element with {"", "", "", font name}.

  Specified by:
    `getFullFontName` in class `BaseFont`
  Returns:
    the full name of the font

### getAllNameEntries

    public java.lang.String[][] getAllNameEntries()

  Gets all the entries of the Names-Table. If it is a True Type font each array element will have {Name ID, Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
  For the other fonts the array has a single element with {"", "", "", font name}.

  Specified by:
    `getAllNameEntries` in class `BaseFont`
  Returns:
    the full name of the font

### getFamilyFontName

    public java.lang.String[][] getFamilyFontName()

  Gets the family name of the font. If it is a True Type font each array element will have {Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
  For the other fonts the array has a single element with {"", "", "", font name}.

  Specified by:
    `getFamilyFontName` in class `BaseFont`
  Returns:
    the family name of the font

### hasKernPairs

    public boolean hasKernPairs()

  Checks if the font has any kerning pairs.

  Specified by:
    `hasKernPairs` in class `BaseFont`
  Returns:
    `true` if the font has any kerning pairs

### setPostscriptFontName

    public void setPostscriptFontName(java.lang.String name)

  Sets the font name that will appear in the pdf font dictionary. Use with care as it can easily make a font unreadable if not embedded.

  Specified by:
    `setPostscriptFontName` in class `BaseFont`
  Parameters:
    `name` - the new font name

### setKerning

    public boolean setKerning(int char1,
                              int char2,
                              int kern)

  Sets the kerning between two Unicode chars.

  Specified by:
    `setKerning` in class `BaseFont`
  Parameters:
    `char1` - the first char
    `char2` - the second char
    `kern` - the kerning to apply in normalized 1000 units
  Returns:
    `true` if the kerning was applied, `false` otherwise

### getRawCharBBox

    protected int[] getRawCharBBox(int c,
                                   java.lang.String name)

  Specified by:
    `getRawCharBBox` in class `BaseFont`

Hosted by Hostbasket