Class TrueTypeFont

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, FontBoxFont
    Direct Known Subclasses:
    OpenTypeFont

    public class TrueTypeFont
    extends java.lang.Object
    implements FontBoxFont, java.io.Closeable
    A TrueType font file.
    • Field Detail

      • LOG

        private static final org.apache.commons.logging.Log LOG
      • version

        private float version
      • numberOfGlyphs

        private int numberOfGlyphs
      • unitsPerEm

        private int unitsPerEm
      • enableGsub

        private boolean enableGsub
      • tables

        protected final java.util.Map<java.lang.String,​TTFTable> tables
      • postScriptNames

        private volatile java.util.Map<java.lang.String,​java.lang.Integer> postScriptNames
      • lockReadtable

        private final java.lang.Object lockReadtable
      • lockPSNames

        private final java.lang.Object lockPSNames
      • enabledGsubFeatures

        private final java.util.List<java.lang.String> enabledGsubFeatures
    • Constructor Detail

      • TrueTypeFont

        TrueTypeFont​(TTFDataStream fontData)
        Constructor. Clients should use the TTFParser to create a new TrueTypeFont object.
        Parameters:
        fontData - The font data.
    • Method Detail

      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • getVersion

        public float getVersion()
        Returns:
        Returns the version.
      • setVersion

        void setVersion​(float versionValue)
        Set the version. Package-private, used by TTFParser only.
        Parameters:
        versionValue - The version to set.
      • isEnableGsub

        public boolean isEnableGsub()
        Returns:
        Returns true if the GSUB table can be used for this font
      • setEnableGsub

        public void setEnableGsub​(boolean enableGsub)
        Enable or disable the GSUB table for this font. GSUB table is enabled by default.
      • addTable

        void addTable​(TTFTable table)
        Add a table definition. Package-private, used by TTFParser only.
        Parameters:
        table - The table to add.
      • getTables

        public java.util.Collection<TTFTable> getTables()
        Get all of the tables.
        Returns:
        All of the tables.
      • getTableMap

        public java.util.Map<java.lang.String,​TTFTable> getTableMap()
        Get all of the tables.
        Returns:
        All of the tables.
      • getTableBytes

        public byte[] getTableBytes​(TTFTable table)
                             throws java.io.IOException
        Returns the raw bytes of the given table.
        Parameters:
        table - the table to read.
        Returns:
        the raw bytes of the given table
        Throws:
        java.io.IOException - if there was an error accessing the table.
      • getTable

        protected TTFTable getTable​(java.lang.String tag)
                             throws java.io.IOException
        This will get the table for the given tag.
        Parameters:
        tag - the name of the table to be returned
        Returns:
        The table with the given tag.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getTableNBytes

        public byte[] getTableNBytes​(TTFTable table,
                                     int limit)
                              throws java.io.IOException
        Returns the raw bytes of the given table, no more than limit bytes.
        Parameters:
        table - the table to read.
        limit - maximum length of array to return
        Returns:
        the raw bytes of the given table
        Throws:
        java.io.IOException - if there was an error accessing the table.
      • getNaming

        public NamingTable getNaming()
                              throws java.io.IOException
        This will get the naming table for the true type font.
        Returns:
        The naming table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getPostScript

        public PostScriptTable getPostScript()
                                      throws java.io.IOException
        Get the postscript table for this TTF.
        Returns:
        The postscript table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getOS2Windows

        public OS2WindowsMetricsTable getOS2Windows()
                                             throws java.io.IOException
        Get the OS/2 table for this TTF.
        Returns:
        The OS/2 table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getMaximumProfile

        public MaximumProfileTable getMaximumProfile()
                                              throws java.io.IOException
        Get the maxp table for this TTF.
        Returns:
        The maxp table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getHeader

        public HeaderTable getHeader()
                              throws java.io.IOException
        Get the head table for this TTF.
        Returns:
        The head table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getHorizontalHeader

        public HorizontalHeaderTable getHorizontalHeader()
                                                  throws java.io.IOException
        Get the hhea table for this TTF.
        Returns:
        The hhea table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getHorizontalMetrics

        public HorizontalMetricsTable getHorizontalMetrics()
                                                    throws java.io.IOException
        Get the hmtx table for this TTF.
        Returns:
        The hmtx table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getIndexToLocation

        public IndexToLocationTable getIndexToLocation()
                                                throws java.io.IOException
        Get the loca table for this TTF.
        Returns:
        The loca table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getGlyph

        public GlyphTable getGlyph()
                            throws java.io.IOException
        Get the glyf table for this TTF.
        Returns:
        The glyf table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getCmap

        public CmapTable getCmap()
                          throws java.io.IOException
        Get the "cmap" table for this TTF.
        Returns:
        The "cmap" table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getVerticalHeader

        public VerticalHeaderTable getVerticalHeader()
                                              throws java.io.IOException
        Get the vhea table for this TTF.
        Returns:
        The vhea table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getVerticalMetrics

        public VerticalMetricsTable getVerticalMetrics()
                                                throws java.io.IOException
        Get the vmtx table for this TTF.
        Returns:
        The vmtx table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getVerticalOrigin

        public VerticalOriginTable getVerticalOrigin()
                                              throws java.io.IOException
        Get the VORG table for this TTF.
        Returns:
        The VORG table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getKerning

        public KerningTable getKerning()
                                throws java.io.IOException
        Get the "kern" table for this TTF.
        Returns:
        The "kern" table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getGsub

        public GlyphSubstitutionTable getGsub()
                                       throws java.io.IOException
        Get the "gsub" table for this TTF.
        Returns:
        The "gsub" table or null if it doesn't exist.
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getOriginalData

        public java.io.InputStream getOriginalData()
                                            throws java.io.IOException
        Get the data of the TrueType Font program representing the stream used to build this object (normally from the TTFParser object).
        Returns:
        COSStream TrueType font program stream
        Throws:
        java.io.IOException - If there is an error getting the font data.
      • getOriginalDataSize

        public long getOriginalDataSize()
        Get the data size of the TrueType Font program representing the stream used to build this object (normally from the TTFParser object).
        Returns:
        the size.
      • readTable

        void readTable​(TTFTable table)
                throws java.io.IOException
        Read the given table if necessary. Package-private, used by TTFParser only.
        Parameters:
        table - the table to be initialized
        Throws:
        java.io.IOException - if there was an error reading the table.
      • readTableHeaders

        void readTableHeaders​(java.lang.String tag,
                              FontHeaders outHeaders)
                       throws java.io.IOException
        Read the given table headers. Package-private, used by TTFParser only.
        Parameters:
        tag - the name of the table to be read
        outHeaders - consumes headers
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getNumberOfGlyphs

        public int getNumberOfGlyphs()
                              throws java.io.IOException
        Returns the number of glyphs (MaximumProfile.numGlyphs).
        Returns:
        the number of glyphs
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getUnitsPerEm

        public int getUnitsPerEm()
                          throws java.io.IOException
        Returns the units per EM (Header.unitsPerEm).
        Returns:
        units per EM
        Throws:
        java.io.IOException - if there was an error reading the table.
      • getAdvanceWidth

        public int getAdvanceWidth​(int gid)
                            throws java.io.IOException
        Returns the width for the given GID.
        Parameters:
        gid - the GID
        Returns:
        the width
        Throws:
        java.io.IOException - if there was an error reading the metrics table.
      • getAdvanceHeight

        public int getAdvanceHeight​(int gid)
                             throws java.io.IOException
        Returns the height for the given GID.
        Parameters:
        gid - the GID
        Returns:
        the height
        Throws:
        java.io.IOException - if there was an error reading the metrics table.
      • getName

        public java.lang.String getName()
                                 throws java.io.IOException
        Description copied from interface: FontBoxFont
        The PostScript name of the font.
        Specified by:
        getName in interface FontBoxFont
        Returns:
        the postscript of the font or null
        Throws:
        java.io.IOException - if something went wrong when accessing the font data
      • readPostScriptNames

        private void readPostScriptNames()
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • getUnicodeCmapLookup

        public CmapLookup getUnicodeCmapLookup()
                                        throws java.io.IOException
        Returns the best Unicode from the font (the most general). The PDF spec says that "The means by which this is accomplished are implementation-dependent." The returned cmap will perform glyph substitution.
        Returns:
        cmap to perform glyph substitution
        Throws:
        java.io.IOException - if the font could not be read
      • getUnicodeCmapLookup

        public CmapLookup getUnicodeCmapLookup​(boolean isStrict)
                                        throws java.io.IOException
        Returns the best Unicode from the font (the most general). The PDF spec says that "The means by which this is accomplished are implementation-dependent." The returned cmap will perform glyph substitution.
        Parameters:
        isStrict - False if we allow falling back to any cmap, even if it's not Unicode.
        Returns:
        cmap to perform glyph substitution
        Throws:
        java.io.IOException - if the font could not be read, or there is no Unicode cmap
      • getUnicodeCmapImpl

        private CmapSubtable getUnicodeCmapImpl​(boolean isStrict)
                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • nameToGID

        public int nameToGID​(java.lang.String name)
                      throws java.io.IOException
        Returns the GID for the given PostScript name, if the "post" table is present.
        Parameters:
        name - the PostScript name.
        Returns:
        the GID for the given PostScript name
        Throws:
        java.io.IOException - if the font data could not be read
      • getGsubData

        public GsubData getGsubData()
                             throws java.io.IOException
        Returns the GSubData of the GlyphSubstitutionTable if present.
        Returns:
        the GSubData of the GlyphSubstitutionTable or GsubData.NO_DATA_FOUND if no GSUB data is available, its scripts are not supported or it was disabled for that font
        Throws:
        java.io.IOException - if the font data could not be read
      • parseUniName

        private int parseUniName​(java.lang.String name)
        Parses a Unicode PostScript name in the format uniXXXX.
      • getPath

        public java.awt.geom.GeneralPath getPath​(java.lang.String name)
                                          throws java.io.IOException
        Description copied from interface: FontBoxFont
        Returns the path for the character with the given name.
        Specified by:
        getPath in interface FontBoxFont
        Parameters:
        name - PostScript glyph name
        Returns:
        glyph path
        Throws:
        java.io.IOException - if the path could not be read
      • getWidth

        public float getWidth​(java.lang.String name)
                       throws java.io.IOException
        Description copied from interface: FontBoxFont
        Returns the advance width for the character with the given name.
        Specified by:
        getWidth in interface FontBoxFont
        Parameters:
        name - PostScript glyph name
        Returns:
        glyph advance width
        Throws:
        java.io.IOException - if the path could not be read
      • hasGlyph

        public boolean hasGlyph​(java.lang.String name)
                         throws java.io.IOException
        Description copied from interface: FontBoxFont
        Returns true if the font contains the given glyph.
        Specified by:
        hasGlyph in interface FontBoxFont
        Parameters:
        name - PostScript glyph name
        Returns:
        true if the font contains a glyph with the given name, otherwise false
        Throws:
        java.io.IOException - if something went wrong when accessing the font data
      • getFontBBox

        public BoundingBox getFontBBox()
                                throws java.io.IOException
        Description copied from interface: FontBoxFont
        Returns the font's bounding box in PostScript units.
        Specified by:
        getFontBBox in interface FontBoxFont
        Returns:
        the bounding box of the font
        Throws:
        java.io.IOException - if something went wrong when accessing the font data
      • getFontMatrix

        public java.util.List<java.lang.Number> getFontMatrix()
                                                       throws java.io.IOException
        Description copied from interface: FontBoxFont
        Returns the FontMatrix in PostScript units.
        Specified by:
        getFontMatrix in interface FontBoxFont
        Returns:
        the font matrix
        Throws:
        java.io.IOException - if something went wrong when accessing the font data
      • enableGsubFeature

        public void enableGsubFeature​(java.lang.String featureTag)
        Enable a particular glyph substitution feature. This feature might not be supported by the font, or might not be implemented in PDFBox yet.
        Parameters:
        featureTag - The GSUB feature to enable
      • disableGsubFeature

        public void disableGsubFeature​(java.lang.String featureTag)
        Disable a particular glyph substitution feature.
        Parameters:
        featureTag - The GSUB feature to disable
      • enableVerticalSubstitutions

        public void enableVerticalSubstitutions()
        Enable glyph substitutions for vertical writing.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object