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

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `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

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `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

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `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

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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`