Class TrueTypeFont

    • 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<java.lang.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.
      • 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
      • glyphWidthsByIndex

        protected int[] glyphWidthsByIndex
        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<java.lang.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 java.util.HashMap<java.lang.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 java.util.HashMap<java.lang.Integer,​int[]> cmapExt
      • glyphIdToChar

        protected int[] glyphIdToChar
      • maxGlyphId

        protected int maxGlyphId
      • 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.
      • subFamily

        protected java.lang.String[][] subFamily
        The font subfamily This subFamily name is usually extracted from the table 'name' with the 'Name ID' 2 or 'Name ID' 17.
      • fullName

        protected java.lang.String[][] fullName
        The full name of the font 'Name ID' 1 or 'Name ID' 16
      • 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', 'post' and 'maxp' 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
      • 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<java.lang.Integer,​int[]> readFormat12()
                                                               throws java.io.IOException
        Throws:
        java.io.IOException
      • readFormat0

        java.util.HashMap<java.lang.Integer,​int[]> 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<java.lang.Integer,​int[]> 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<java.lang.Integer,​int[]> 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
      • getSubSet

        protected byte[] getSubSet​(java.util.HashSet glyphs,
                                   boolean subsetp)
                            throws java.io.IOException,
                                   DocumentException
        Throws:
        java.io.IOException
        DocumentException
      • compactRanges

        protected static int[] compactRanges​(java.util.ArrayList<int[]> ranges)
      • addRangeUni

        protected void addRangeUni​(java.util.HashMap<java.lang.Integer,​int[]> longTag,
                                   boolean includeMetrics,
                                   boolean subsetp)
      • addRangeUni

        protected void addRangeUni​(java.util.HashSet<java.lang.Integer> longTag,
                                   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
      • 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
      • getSubfamily

        public java.lang.String getSubfamily()
        Gets the full subfamily name of the font. If it is a True Type font each array element will have {Platform ID, Platform Encoding ID, Language ID, subfamily}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
        Overrides:
        getSubfamily in class BaseFont
        Returns:
        the full subfamily 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
      • isWinAnsiSupported

        boolean isWinAnsiSupported()
        Checks whether this font may be used with winansi encoding.
        Returns:
        true if the font can be correctly used with winansi encodings