Class TTFSubSetFile


  • public class TTFSubSetFile
    extends TTFFile
    Reads a TrueType file and generates a subset that can be used to embed a TrueType CID font. TrueType tables needed for embedded CID fonts are: "head", "hhea", "loca", "maxp", "cvt ", "prep", "glyf", "hmtx" and "fpgm". The TrueType spec can be found at the Microsoft Typography site: http://www.microsoft.com/truetype/
    • Field Detail

      • output

        protected byte[] output
      • realSize

        protected int realSize
      • currentPos

        protected int currentPos
      • offsets

        protected java.util.Map<OFTableName,​java.lang.Integer> offsets
      • locaOffset

        protected int locaOffset
      • glyphOffsets

        protected int[] glyphOffsets
        Stores the glyph offsets so that we can end strings at glyph boundaries
      • newDirTabs

        protected java.util.Map<OFTableName,​OFDirTabEntry> newDirTabs
        The dir tab entries in the new subset font.
    • Constructor Detail

      • TTFSubSetFile

        public TTFSubSetFile()
        Default Constructor
      • TTFSubSetFile

        public TTFSubSetFile​(boolean useKerning,
                             boolean useAdvanced)
        Constructor
        Parameters:
        useKerning - true if kerning data should be loaded
        useAdvanced - true if advanced typographic tables should be loaded
    • Method Detail

      • createDirectory

        protected void createDirectory()
        Create the directory table
      • createLoca

        protected void createLoca​(int size)
                           throws java.io.IOException
        Create an empty loca table without updating checksum
        Throws:
        java.io.IOException
      • createCvt

        protected boolean createCvt​(FontFileReader in)
                             throws java.io.IOException
        Copy the cvt table as is from original font to subset font
        Throws:
        java.io.IOException
      • createFpgm

        protected boolean createFpgm​(FontFileReader in)
                              throws java.io.IOException
        Copy the fpgm table as is from original font to subset font
        Throws:
        java.io.IOException
      • createName

        protected boolean createName​(FontFileReader in)
                              throws java.io.IOException
        Copy the name table as is from the original.
        Throws:
        java.io.IOException
      • createOS2

        protected boolean createOS2​(FontFileReader in)
                             throws java.io.IOException
        Copy the OS/2 table as is from the original.
        Throws:
        java.io.IOException
      • createMaxp

        protected void createMaxp​(FontFileReader in,
                                  int size)
                           throws java.io.IOException
        Copy the maxp table as is from original font to subset font and set num glyphs to size
        Throws:
        java.io.IOException
      • createPost

        protected void createPost​(FontFileReader in)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • createPrep

        protected boolean createPrep​(FontFileReader in)
                              throws java.io.IOException
        Copy the prep table as is from original font to subset font
        Throws:
        java.io.IOException
      • createHhea

        protected void createHhea​(FontFileReader in,
                                  int size)
                           throws java.io.IOException
        Copy the hhea table as is from original font to subset font and fill in size of hmtx table
        Throws:
        java.io.IOException
      • createHead

        protected void createHead​(FontFileReader in)
                           throws java.io.IOException
        Copy the head table as is from original font to subset font and set indexToLocaFormat to long and set checkSumAdjustment to 0, store offset to checkSumAdjustment in checkSumAdjustmentOffset
        Throws:
        java.io.IOException
      • buildSubsetIndexToOrigIndexMap

        protected int[] buildSubsetIndexToOrigIndexMap​(java.util.Map<java.lang.Integer,​java.lang.Integer> glyphs)
      • createHmtx

        protected void createHmtx​(FontFileReader in,
                                  java.util.Map<java.lang.Integer,​java.lang.Integer> glyphs)
                           throws java.io.IOException
        Create the hmtx table by copying metrics from original font to subset font. The glyphs Map contains an Integer key and Integer value that maps the original metric (key) to the subset metric (value)
        Throws:
        java.io.IOException
      • readFont

        public void readFont​(FontFileReader in,
                             java.lang.String name,
                             java.lang.String header,
                             java.util.Map<java.lang.Integer,​java.lang.Integer> glyphs)
                      throws java.io.IOException
        Reads a font and creates a subset of the font.
        Parameters:
        in - FontFileReader to read from
        name - Name to be checked for in the font file
        glyphs - Map of glyphs (glyphs has old index as (Integer) key and new index as (Integer) value)
        Throws:
        java.io.IOException - in case of an I/O problem
      • getFontSubset

        public byte[] getFontSubset()
        Returns a subset of the fonts (readFont() MUST be called first in order to create the subset).
        Returns:
        byte array
      • stream

        public void stream​(TTFOutputStream ttfOut)
                    throws java.io.IOException
        Description copied from class: OpenFont
        Streams a font.
        Overrides:
        stream in class OpenFont
        Parameters:
        ttfOut - The interface for streaming TrueType tables.
        Throws:
        java.io.IOException - file write error
      • scanGlyphs

        protected void scanGlyphs​(FontFileReader in,
                                  java.util.Map<java.lang.Integer,​java.lang.Integer> subsetGlyphs)
                           throws java.io.IOException
        Throws:
        java.io.IOException
      • writeBytes

        protected void writeBytes​(byte[] b)
      • writeUShort

        protected void writeUShort​(int s)
        Appends a USHORT to the output array, updates currentPost but not realSize
      • writeUShort

        protected void writeUShort​(int pos,
                                   int s)
        Appends a USHORT to the output array, at the given position without changing currentPos
      • writeULong

        protected void writeULong​(int pos,
                                  int s)
        Appends a ULONG to the output array, at the given position without changing currentPos
      • pad4

        protected void pad4()
        Create a padding in the fontfile to align on a 4-byte boundary
      • updateCheckSum

        protected void updateCheckSum​(int tableStart,
                                      int tableSize,
                                      OFTableName tableName)
      • getCheckSum

        protected static int getCheckSum​(byte[] data,
                                         int start,
                                         int size)
      • createCheckSumAdjustment

        protected void createCheckSumAdjustment()