Class CFFFontSubset

java.lang.Object
com.itextpdf.io.font.CFFFont
com.itextpdf.io.font.CFFFontSubset

public class CFFFontSubset extends CFFFont
This Class subsets a CFF Type Font. The subset is preformed for CID fonts and NON CID fonts. The Charstring is subsetted for both types. For CID fonts only the FDArray which are used are embedded. The Lsubroutines of the FDArrays used are subsetted as well. The Subroutine subset supports both Type1 and Type2 formatting although only tested on Type2 Format. For Non CID the Lsubroutines are subsetted. On both types the Gsubroutines is subsetted. A font which was not of CID type is transformed into CID as a part of the subset process. The CID synthetic creation was written by Sivan Toledo (sivan@math.tau.ac.il)
Author:
Oren Manor (manorore@post.tau.ac.il) and Ygal Blum (blumygal@post.tau.ac.il)
  • Constructor Details

    • CFFFontSubset

      public CFFFontSubset (byte[] cff, Set<Integer> GlyphsUsed)
  • Method Details

    • readFDSelect

      protected void readFDSelect (int Font)
      Read the FDSelect of the font and compute the array and its length
      Parameters:
      Font - The index of the font being processed
    • BuildFDArrayUsed

      protected void BuildFDArrayUsed (int Font)
      Function reads the FDSelect and builds the FDArrayUsed Map According to the glyphs used
      Parameters:
      Font - the Number of font being processed
    • ReadFDArray

      protected void ReadFDArray (int Font)
      Read the FDArray count, offsize and Offset array
      Parameters:
      Font - the Number of font being processed
    • Process

      public byte[] Process (String fontName)
      The Process function extracts one font out of the CFF file and returns a subset version of the original.
      Parameters:
      fontName - - The name of the font to be taken out of the CFF
      Returns:
      The new font stream
    • Process

      public byte[] Process()
      The Process function extracts one font out of the CFF file and returns a subset version of the original with the first name.
      Returns:
      The new font stream
    • CalcBias

      protected int CalcBias (int Offset, int Font)
      Function calcs bias according to the CharString type and the count of the subrs
      Parameters:
      Offset - The offset to the relevant subrs index
      Font - the font
      Returns:
      The calculated Bias
    • BuildNewCharString

      protected void BuildNewCharString (int FontIndex) throws IOException
      Function uses BuildNewIndex to create the new index of the subset charstrings.
      Parameters:
      FontIndex - the font
      Throws:
      IOException - if an I/O error occurs
    • BuildNewLGSubrs

      protected void BuildNewLGSubrs (int Font) throws IOException
      Function builds the new local and global subsrs indices. IF CID then All of the FD Array lsubrs will be subsetted.
      Parameters:
      Font - the font
      Throws:
      IOException - if an I/O error occurs
    • BuildFDSubrsOffsets

      protected void BuildFDSubrsOffsets (int Font, int FD)
      The function finds for the FD array processed the local subr offset and its offset array.
      Parameters:
      Font - the font
      FD - The FDARRAY processed
    • BuildSubrUsed

      protected void BuildSubrUsed (int Font, int FD, int SubrOffset, int[] SubrsOffsets, Set<Integer> hSubr, List<Integer> lSubr)
      Function uses ReadAsubr on the glyph used to build the LSubr and Gsubr Map. The Map (of the lsubr only) is then scanned recursively for Lsubr and Gsubrs calls.
      Parameters:
      Font - the font
      FD - FD array processed. 0 indicates function was called by non CID font
      SubrOffset - the offset to the subr index to calc the bias
      SubrsOffsets - the offset array of the subr index
      hSubr - Map of the subrs used
      lSubr - list of the subrs used
    • BuildGSubrsUsed

      protected void BuildGSubrsUsed (int Font)
      Function scans the Glsubr used list to find recursive calls to Gsubrs and adds to Map and list
      Parameters:
      Font - the font
    • ReadASubr

      protected void ReadASubr (int begin, int end, int GBias, int LBias, Set<Integer> hSubr, List<Integer> lSubr, int[] LSubrsOffsets)
      The function reads a subrs (glyph info) between begin and end. Adds calls to a Lsubr to the hSubr and lSubrs. Adds calls to a Gsubr to the hGSubr and lGSubrs.
      Parameters:
      begin - the start point of the subr
      end - the end point of the subr
      GBias - the bias of the Global Subrs
      LBias - the bias of the Local Subrs
      hSubr - the subroutines used as set
      lSubr - the subroutines used as list
      LSubrsOffsets - the offsets array of the subroutines
    • HandelStack

      protected void HandelStack()
      Function Checks how the current operator effects the run time stack after being run An operator may increase or decrease the stack size
    • StackOpp

      protected int StackOpp()
      Function checks the key and return the change to the stack after the operator
      Returns:
      The change in the stack. 2-> flush the stack
    • EmptyStack

      protected void EmptyStack()
      Empty the Type2 Stack
    • PopStack

      protected void PopStack()
      Pop one element from the stack
    • PushStack

      protected void PushStack()
      Add an item to the stack
    • ReadCommand

      protected void ReadCommand()
      The function reads the next command after the file pointer is set
    • CalcHints

      protected int CalcHints (int begin, int end, int LBias, int GBias, int[] LSubrsOffsets)
      The function reads the subroutine and returns the number of the hint in it. If a call to another subroutine is found the function calls recursively.
      Parameters:
      begin - the start point of the subr
      end - the end point of the subr
      LBias - the bias of the Local Subrs
      GBias - the bias of the Global Subrs
      LSubrsOffsets - The Offsets array of the subroutines
      Returns:
      The number of hints in the subroutine read.
    • BuildNewIndex

      protected byte[] BuildNewIndex (int[] Offsets, Set<Integer> Used, byte OperatorForUnusedEntries) throws IOException
      Function builds the new offset array, object array and assembles the index. used for creating the glyph and subrs subsetted index
      Parameters:
      Offsets - the offset array of the original index
      Used - the Map of the used objects
      OperatorForUnusedEntries - the operator inserted into the data stream for unused entries
      Returns:
      the new index subset version
      Throws:
      IOException - if an I/O error occurs
    • BuildNewIndexAndCopyAllGSubrs

      protected byte[] BuildNewIndexAndCopyAllGSubrs (int[] Offsets, byte OperatorForUnusedEntries) throws IOException
      Function builds the new offset array, object array and assembles the index. used for creating the glyph and subrs subsetted index
      Parameters:
      Offsets - the offset array of the original index
      OperatorForUnusedEntries - the operator inserted into the data stream for unused entries
      Returns:
      the new index subset version
      Throws:
      IOException - if an I/O error occurs
    • AssembleIndex

      protected byte[] AssembleIndex (int[] NewOffsets, byte[] NewObjects)
      Function creates the new index, inserting the count,offsetsize,offset array and object array.
      Parameters:
      NewOffsets - the subsetted offset array
      NewObjects - the subsetted object array
      Returns:
      the new index created
    • BuildNewFile

      protected byte[] BuildNewFile (int Font)
      The function builds the new output stream according to the subset process
      Parameters:
      Font - the font
      Returns:
      the subsetted font stream
    • CopyHeader

      protected void CopyHeader()
      Function Copies the header from the original fileto the output list
    • BuildIndexHeader

      protected void BuildIndexHeader (int Count, int Offsize, int First)
      Function Build the header of an index
      Parameters:
      Count - the count field of the index
      Offsize - the offsize field of the index
      First - the first offset of the index
    • CreateKeys

      protected void CreateKeys (CFFFont.OffsetItem fdarrayRef, CFFFont.OffsetItem fdselectRef, CFFFont.OffsetItem charsetRef, CFFFont.OffsetItem charstringsRef)
      Function adds the keys into the TopDict
      Parameters:
      fdarrayRef - OffsetItem for the FDArray
      fdselectRef - OffsetItem for the FDSelect
      charsetRef - OffsetItem for the CharSet
      charstringsRef - OffsetItem for the CharString
    • CreateNewStringIndex

      protected void CreateNewStringIndex (int Font)
      Function takes the original string item and adds the new strings to accommodate the CID rules
      Parameters:
      Font - the font
    • CreateFDSelect

      protected void CreateFDSelect (CFFFont.OffsetItem fdselectRef, int nglyphs)
      Function creates new FDSelect for non-CID fonts. The FDSelect built uses a single range for all glyphs
      Parameters:
      fdselectRef - OffsetItem for the FDSelect
      nglyphs - the number of glyphs in the font
    • CreateCharset

      protected void CreateCharset (CFFFont.OffsetItem charsetRef, int nglyphs)
      Function creates new CharSet for non-CID fonts. The CharSet built uses a single range for all glyphs
      Parameters:
      charsetRef - OffsetItem for the CharSet
      nglyphs - the number of glyphs in the font
    • CreateFDArray

      protected void CreateFDArray (CFFFont.OffsetItem fdarrayRef, CFFFont.OffsetItem privateRef, int Font)
      Function creates new FDArray for non-CID fonts. The FDArray built has only the "Private" operator that points to the font's original private dict
      Parameters:
      fdarrayRef - OffsetItem for the FDArray
      privateRef - OffsetItem for the Private Dict
      Font - the font
    • countEntireIndexRange

      protected int countEntireIndexRange (int indexOffset)
      Function computes the size of an index
      Parameters:
      indexOffset - The offset for the computed index
      Returns:
      The size of the index