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
  • Field Details

    • codePages

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

      protected boolean justNames
    • tables

      protected HashMap<String,int[]> 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<Integer,int[]> 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<Integer,int[]> 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 HashMap<Integer,int[]> 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 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
    • allNameEntries

      protected String[][] allNameEntries
      All the names of the Names-Table
    • 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.
    • underlinePosition

      protected int underlinePosition
    • underlineThickness

      protected int underlineThickness
  • Constructor Details

    • TrueTypeFont

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

      TrueTypeFont(String ttFile, String enc, boolean emb, byte[] ttfAfm, boolean justNames, boolean forceRead) 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
      Since:
      2.1.5
  • 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
    • compactRanges

      protected static int[] compactRanges(ArrayList ranges)
    • 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
    • getAllNames

      String[][] getAllNames() throws DocumentException, IOException
      Extracts all the names of the names-Table
      Throws:
      DocumentException - on error
      IOException - on error
    • checkCff

      void checkCff()
    • process

      void process(byte[] ttfAfm, boolean preload) 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
      Since:
      2.1.5
    • 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
    • readFormat12

      HashMap<Integer,int[]> readFormat12() throws IOException
      Throws:
      IOException
    • readFormat0

      HashMap<Integer,int[]> 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<Integer,int[]> 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<Integer,int[]> 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(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, 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, PdfIndirectReference cidset)
      Generates the font descriptor for this font.
      Parameters:
      fontStream - the indirect reference to a PdfStream containing the font or null
      subsetPrefix - the subset prefix
      Returns:
      the PdfDictionary containing the font descriptor or null
    • getFontBaseType

      protected PdfDictionary getFontBaseType(PdfIndirectReference fontDescriptor, String subsetPrefix, int firstChar, int lastChar, byte[] shortTag)
      Generates the font dictionary for this font.
      Parameters:
      fontDescriptor - the indirect reference to a PdfDictionary containing the font descriptor or null
      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
      Returns:
      the PdfDictionary containing the font dictionary
    • getFullFont

      protected byte[] getFullFont() throws IOException
      Throws:
      IOException
    • addRangeUni

      protected void addRangeUni(Map<Integer,int[]> longTag, boolean includeMetrics, boolean subsetp)
    • 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
    • readCffFont

      protected byte[] readCffFont() throws 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:
      IOException
      Since:
      2.1.3
    • getFullFontStream

      public PdfStream getFullFontStream() throws 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:
      IOException - on error
      DocumentException - on error
      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 String getPostscriptFontName()
      Gets the postscript font name.
      Specified by:
      getPostscriptFontName in class BaseFont
      Returns:
      the postscript font name
    • 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
    • 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
    • getAllNameEntries

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