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

      • version

        private float version
      • numberOfGlyphs

        private int numberOfGlyphs
      • unitsPerEm

        private int unitsPerEm
      • tables

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

        private java.util.Map<java.lang.String,​java.lang.Integer> postScriptNames
      • 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
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable
      • 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.
      • 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.
        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.
      • 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.
      • 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
        Throws:
        java.io.IOException
      • readPostScriptNames

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

        @Deprecated
        public CmapSubtable getUnicodeCmap()
                                    throws java.io.IOException
        Deprecated.
        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."
        Throws:
        java.io.IOException - if the font could not be read
      • getUnicodeCmap

        @Deprecated
        public CmapSubtable getUnicodeCmap​(boolean isStrict)
                                    throws java.io.IOException
        Deprecated.
        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."
        Parameters:
        isStrict - False if we allow falling back to any cmap, even if it's not Unicode.
        Throws:
        java.io.IOException - if the font could not be read, or there is no Unicode cmap
      • 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.
        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.
        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.
        Throws:
        java.io.IOException
      • 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
        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
        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
        Throws:
        java.io.IOException
      • 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
        Throws:
        java.io.IOException
      • 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
        Throws:
        java.io.IOException
      • 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