Class TrueTypeFont

java.lang.Object
com.gitlab.pdftk_java.com.lowagie.text.pdf.BaseFont
com.gitlab.pdftk_java.com.lowagie.text.pdf.TrueTypeFont
Direct Known Subclasses:
EnumerateTTC, TrueTypeFontUnicode

class TrueTypeFont extends BaseFont
Reads a Truetype font
  • Field Details

    • codePages

      static final String[] codePages
      The code pages possible for a True Type font.
    • justNames

      protected boolean justNames
    • tables

      protected 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

      The file in use.
    • fileName

      protected 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 String ttcIndex
      The index for the TTC font. It is an empty String for a TTF file.
    • style

      protected String style
      The style modifier
    • hhea

      The content of table 'hhea'.
    • 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 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 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.

    • 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 String fontName
      The font name. This name is usually extracted from the table 'name' with the 'Name ID' 6.
    • fullName

      protected String[][] fullName
      The full name of the font
    • familyName

      protected 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.
  • Constructor Details

    • TrueTypeFont

      protected TrueTypeFont()
      This constructor is present to allow extending the class.
    • TrueTypeFont

      TrueTypeFont(String ttFile, String enc, boolean emb, byte[] ttfAfm) throws DocumentException, IOException
      Throws:
      DocumentException
      IOException
    • TrueTypeFont

      TrueTypeFont(String ttFile, String enc, boolean emb, byte[] ttfAfm, boolean justNames) throws DocumentException, 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
      IOException - the font file could not be read
  • Method Details

    • getTTCName

      protected static String getTTCName(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, IOException
      Reads the tables 'head', 'hhea', 'OS/2' and 'post' filling several variables.
      Throws:
      DocumentException - the font is invalid
      IOException - the font file could not be read
    • getBaseFont

      String getBaseFont() throws DocumentException, IOException
      Gets the Postscript font name.
      Returns:
      the Postscript font name
      Throws:
      DocumentException - the font is invalid
      IOException - the font file could not be read
    • getNames

      String[][] getNames(int id) throws DocumentException, IOException
      Extracts the names of the font in all the languages available.
      Parameters:
      id - the name id to retrieve
      Throws:
      DocumentException - on error
      IOException - on error
    • checkCff

      void checkCff() throws DocumentException, IOException
      Throws:
      DocumentException
      IOException
    • process

      void process(byte[] ttfAfm) throws DocumentException, IOException
      Reads the font data.
      Parameters:
      ttfAfm - the font as a byte array, possibly null
      Throws:
      DocumentException - the font is invalid
      IOException - the font file could not be read
    • readStandardString

      protected String readStandardString(int length) throws 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:
      IOException - the font file could not be read
    • readUnicodeString

      protected String readUnicodeString(int length) throws 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:
      IOException - the font file could not be read
    • readGlyphWidths

      protected void readGlyphWidths() throws DocumentException, 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
      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, IOException
      Throws:
      DocumentException
      IOException
    • readCMaps

      void readCMaps() throws DocumentException, 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
      IOException - the font file could not be read
    • readFormat0

      HashMap readFormat0() throws 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:
      IOException - the font file could not be read
    • readFormat4

      HashMap readFormat4() throws 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:
      IOException - the font file could not be read
    • readFormat6

      HashMap readFormat6() throws 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:
      IOException - the font file could not be read
    • readKerning

      void readKerning() throws IOException
      Reads the kerning information from the 'kern' table.
      Throws:
      IOException - the font file could not be read
    • getKerning

      public int getKerning(char char1, char 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, 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, String subsetPrefix) throws DocumentException
      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
      Throws:
      DocumentException - if there is an error
    • getFontBaseType

      protected PdfDictionary getFontBaseType(PdfIndirectReference fontDescriptor, String subsetPrefix, int firstChar, int lastChar, byte[] shortTag) throws DocumentException
      Generates the font dictionary for this font.
      Parameters:
      subsetPrefix - the subset prefx
      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
      Throws:
      DocumentException - if there is an error
    • writeFont

      void writeFont(PdfWriter writer, PdfIndirectReference ref, Object[] params) throws DocumentException, 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:
      IOException - on error
      DocumentException - error in generating the object
    • 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 String getPostscriptFontName()
      Gets the postscript font name.
      Specified by:
      getPostscriptFontName in class BaseFont
      Returns:
      the postscript font name
    • getCodePagesSupported

      public 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 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
    • getFamilyFontName

      public 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(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(char char1, char 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, String name)
      Specified by:
      getRawCharBBox in class BaseFont