Class TrueTypeFont

java.lang.Object
com.itextpdf.io.font.FontProgram
com.itextpdf.io.font.TrueTypeFont
Direct Known Subclasses:
DocTrueTypeFont

public class TrueTypeFont extends FontProgram
Font program backed by an OpenType/TrueType font or a TrueType Collection member.
  • Field Details

    • bBoxes

      protected int[][] bBoxes
      Per-glyph bounding boxes indexed by glyph ID, in normalized glyph units.
    • isVertical

      protected boolean isVertical
      Indicates that the selected CMap uses vertical writing metrics.
    • kerning

      protected com.itextpdf.io.util.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.
  • Constructor Details

    • TrueTypeFont

      protected TrueTypeFont()
      Creates an uninitialized font.
    • TrueTypeFont

      public TrueTypeFont (String path) throws IOException
      Loads a standalone OpenType or TrueType font from a path.
      Parameters:
      path - path to the font file
      Throws:
      IOException - if the file cannot be read or parsed
    • TrueTypeFont

      public TrueTypeFont (byte[] ttf) throws IOException
      Loads a standalone OpenType or TrueType font from its binary contents.
      Parameters:
      ttf - font bytes
      Throws:
      IOException - if the bytes cannot be parsed
    • TrueTypeFont

      public TrueTypeFont (byte[] ttf, boolean isLenientMode) throws IOException
      Loads a font from binary contents.
      Parameters:
      ttf - font bytes
      isLenientMode - true to enable lenient parser behavior, see OpenTypeParser(byte[], boolean)
      Throws:
      IOException - if the bytes cannot be parsed
  • Method Details

    • hasKernPairs

      public boolean hasKernPairs()
      Description copied from class: FontProgram
      Checks whether this program supplies kerning pairs.
      Overrides:
      hasKernPairs in class FontProgram
      Returns:
      true if supplies, false otherwise
    • getKerning

      public int getKerning (Glyph first, Glyph second)
      Gets the kerning between two glyphs.
      Specified by:
      getKerning in class FontProgram
      Parameters:
      first - the first glyph
      second - the second glyph
      Returns:
      the kerning to be applied
    • isCff

      public boolean isCff()
      Checks whether this OpenType font stores a CFF table.
      Returns:
      true for CFF-flavored OpenType fonts
    • getActiveCmap

      public Map<Integer,int[]> getActiveCmap()
      Gets the preferred character-to-glyph CMap selected from the font.
      Returns:
      mapping from character code to CMap data
    • getFontStreamBytes

      public byte[] getFontStreamBytes()
      Gets the bytes of the font.
      Returns:
      CFF bytes for CFF fonts or complete font bytes otherwise
      Throws:
      IOException - if the source font cannot be read
    • getPdfFontFlags

      public int getPdfFontFlags()
      Description copied from class: FontProgram
      Computes the PDF font descriptor flags for this program.
      Specified by:
      getPdfFontFlags in class FontProgram
      Returns:
      bit set defined by the PDF font descriptor specification
    • getDirectoryOffset

      public int getDirectoryOffset()
      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.
      Returns:
      directory Offset
    • getGsubTable

      public GlyphSubstitutionTableReader getGsubTable()
      Gets the GSUB table reader.
      Returns:
      substitution table reader
    • getGposTable

      public GlyphPositioningTableReader getGposTable()
      Gets the GPOS table reader.
      Returns:
      positioning table reader
    • getGdefTable

      public OpenTypeGdefTableReader getGdefTable()
      Gets the GDEF table reader.
      Returns:
      glyph definition table reader
    • getSubset

      public byte[] getSubset (Set<Integer> glyphs, boolean subsetTables)
      Gets subset based on the passed glyphs.
      Parameters:
      glyphs - the glyphs to subset the font
      subsetTables - whether subset tables (remove `name` and `post` tables) or not. It's used in case of ttc (true type collection) font where single "full" font is needed. Despite the value of that flag, only used glyphs will be left in the font
      Returns:
      the subset font
    • subset

      public Tuple2<Integer,byte[]> subset (Set<Integer> glyphs, boolean subsetTables)
      Gets subset and a number of glyphs in it based on the passed glyphs.

      The number of glyphs in a subset is not just glyphs.size() here. It's the biggest glyph id + 1 (for glyph 0). It also may include possible composite glyphs.

      Parameters:
      glyphs - the glyphs to subset the font
      subsetTables - whether subset tables (remove `name` and `post` tables) or not. It's used in case of ttc (true type collection) font where single "full" font is needed. Despite the value of that flag, only used glyphs will be left in the font
      Returns:
      the subset of the font and the number of glyphs in it
    • merge

      @Deprecated public static byte[] merge (Map<TrueTypeFont,Set<Integer>> toMerge, String fontName)
      Deprecated.
      Merges the passed font into one. Used glyphs per each font are applied to subset the merged font.
      Parameters:
      toMerge - the fonts to merge with used glyphs per each font
      fontName - the name of fonts to merge
      Returns:
      the raw data of merged font
    • merge

      public static byte[] merge (Map<TrueTypeFont,Set<Integer>> toMerge, String fontName, boolean isCmapCheckRequired)
      Merges the passed font into one. Used glyphs per each font are applied to subset the merged font.
      Parameters:
      toMerge - the fonts to merge with used glyphs per each font
      fontName - the name of fonts to merge
      isCmapCheckRequired - the flag which specifies whether 'cmap' table should be checked while merging or not
      Returns:
      the raw data of merged font
    • mapGlyphsCidsToGids

      public Set<Integer> mapGlyphsCidsToGids (Set<Integer> glyphs)
      Maps a set of glyph CIDs (as used in PDF file) to corresponding GID values (as a glyph primary identifier in the font file). This call is only meaningful for fonts that return true for isCff(). For other types of fonts, GID and CID are always the same, so that call would essentially return a set of the same values.
      Parameters:
      glyphs - a set of glyph CIDs
      Returns:
      a set of glyph ids corresponding to the passed glyph CIDs
    • isCmapPresent

      public boolean isCmapPresent (int platformID, int encodingID)
      Checks whether current TrueTypeFont program contains the “cmap” subtable with provided platform ID and encoding ID.
      Parameters:
      platformID - platform ID
      encodingID - encoding ID
      Returns:
      true if “cmap” subtable with provided platform ID and encoding ID is present in the font program, false otherwise
    • getNumberOfCmaps

      public int getNumberOfCmaps()
      Gets the number of the “cmap” subtables for the current TrueTypeFont program.
      Returns:
      the number of the “cmap” subtables
    • extractFeatures

      public String extractFeatures (Collection<String> otfScriptTags, Map<String,List<OpenTableLookup>> extractedFeatures)
      Extracts features from GSUB and GPOS tables based on the passed script tags. The features are put in the passed extractedFeatures map
      Parameters:
      otfScriptTags - the script tags to extract the features for
      extractedFeatures - the features will be added to this map
      Returns:
      the script tag which was used to extract features. It may be null if no features were extracted or default script tag was used.
    • readGdefTable

      protected void readGdefTable() throws IOException
      Reads the GDEF table.
      Throws:
      IOException - if the table cannot be read
    • readGsubTable

      protected void readGsubTable() throws IOException
      Creates the GSUB table reader when the font supplies a GSUB table.
      Throws:
      IOException - if the table cannot be read
    • readGposTable

      protected void readGposTable() throws IOException
      Creates the GPOS table reader.
      Throws:
      IOException - if the table cannot be read
    • getCodePagesSupported

      public String[] getCodePagesSupported()
      Gets the code pages supported by the font.
      Returns:
      the code pages supported by the font
    • isBuiltWith

      public boolean isBuiltWith (String fontProgram)
      Description copied from class: FontProgram
      Checks whether the FontProgram was built with corresponding fontName. Default value is false unless overridden.
      Overrides:
      isBuiltWith in class FontProgram
      Parameters:
      fontProgram - a font name or path to a font program
      Returns:
      true, if the FontProgram was built with the fontProgram. Otherwise false.
    • close

      public void close() throws IOException
      Closes the underlying font parser and releases its source data.
      Throws:
      IOException - if closing the source fails
    • updateUsedGlyphs

      public void updateUsedGlyphs (SortedSet<Integer> usedGlyphs, boolean subset, List subsetRanges)
      The method will update usedGlyphs with additional range or with all glyphs if there is no subset. This set of used glyphs can be used for building width array and ToUnicode CMAP.
      Parameters:
      usedGlyphs - a set of integers, which are glyph ids that denote used glyphs. This set is updated inside the method if needed.
      subset - subset status
      subsetRanges - additional subset ranges
    • updateUsedGlyphs

      public void updateUsedGlyphs (Map<Integer,Glyph> usedGlyphs, boolean subset, List subsetRanges)
      The method will update usedGlyphs with additional range or with all glyphs if there is no subset. This map of used glyphs can be used for building width array and ToUnicode CMAP.
      Parameters:
      usedGlyphs - a map of glyph ids to glyphs. This map is updated inside the method if needed
      subset - subset status
      subsetRanges - additional subset ranges