org.apache.fop.fonts.truetype

## Class OTFSubSetFile

- java.lang.Object
- - org.apache.fop.fonts.truetype.OpenFont
  - - org.apache.fop.fonts.truetype.OTFFile
    - - org.apache.fop.fonts.truetype.OTFSubSetWriter
      - - org.apache.fop.fonts.truetype.OTFSubSetFile

-     public class OTFSubSetFile
      extends OTFSubSetWriter

  Reads an OpenType CFF file and generates a subset The OpenType specification can be found at the Microsoft Typography site: http://www.microsoft.com/typography/otspec/

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.apache.fop.fonts.truetype.OpenFont

      `OpenFont.PostScriptVersion`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected CFFDataReader` | `cffReader` The CFF reader object used to read data and offsets from the original font file
    `protected java.lang.String` | `embeddedName` The embedded name to change in the name table
    `protected java.util.List<java.util.List<byte[]>>` | `fdSubrs` For fonts which have an FDSelect or ROS flag in Top Dict, this is used to store the local subroutine indexes for each group as opposed to the above subsetLocalIndexSubr
    `protected java.util.Map<java.lang.Integer,java.lang.Integer>` | `gidToSID` A map of the new GID to SID used to construct the charset table
    `protected CFFDataReader.CFFIndexData` | `globalIndexSubr`
    `protected java.util.List<java.lang.Integer>` | `globalUniques`
    `protected CFFDataReader.CFFIndexData` | `localIndexSubr`
    `protected java.util.List<java.lang.Integer>` | `localUniques` A list of unique subroutines from the global / local subroutine indexes
    `static int` | `NUM_STANDARD_STRINGS` The number of standard strings in CFF
    `protected java.util.List<byte[]>` | `stringIndexData` An array used to hold the string index data for the subset font
    `protected java.util.List<byte[]>` | `subsetCharStringsIndex` A list of char string data for each glyph to be stored in the subset font
    `protected java.util.List<byte[]>` | `subsetGlobalIndexSubr`
    `protected int` | `subsetGlobalSubrCount`
    `protected java.util.Map<java.lang.Integer,java.lang.Integer>` | `subsetGlyphs` A map containing each glyph to be included in the subset with their existing and new GID's
    `protected java.util.List<byte[]>` | `subsetLocalIndexSubr` List of subroutines to write to the local / global indexes in the subset font
    `protected int` | `subsetLocalSubrCount` A store of the number of subroutines each global / local subroutine will store

    - ### Fields inherited from class org.apache.fop.fonts.truetype.OTFSubSetWriter

      `currentPos, output`

    - ### Fields inherited from class org.apache.fop.fonts.truetype.OTFFile

      `fileFont`

    - ### Fields inherited from class org.apache.fop.fonts.truetype.OpenFont

      `advancedTableReader, cid, dirTabs, embedFontName, familyNames, fontFile, fullName, lastLoca, locaFormat, log, mtxTab, nhmtx, notice, numberOfGlyphs, postScriptName, subFamilyName, svgs, TRACE_ENABLED, unicodeMappings, useAdvanced, useKerning`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `OTFSubSetFile()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `createCFF()`
    `protected void` | `createCharStringDataCID()`
    `static byte[]` | `createNewRef(int newRef, int[] operatorCode, int forceLength, boolean isDict)`
    `CFFDataReader` | `getCFFReader()` Returns the parsed CFF data for the original font.
    `protected java.util.List<java.lang.Integer>` | `getUsedFDFonts()`
    `void` | `readFont(FontFileReader in, java.lang.String embeddedName, MultiByteFont mbFont)` Reads a font.
    `protected java.util.List<java.lang.Integer>` | `storeFDStrings(java.util.List<java.lang.Integer> uniqueNewRefs)`
    `protected void` | `updateCIDOffsets(org.apache.fop.fonts.truetype.OTFSubSetFile.Offsets offsets)`
    `protected void` | `updateFixedOffsets(java.util.Map<java.lang.String,CFFDataReader.DICTEntry> topDICT, org.apache.fop.fonts.truetype.OTFSubSetFile.Offsets offsets)`
    `protected void` | `updateOffsets(org.apache.fop.fonts.truetype.OTFSubSetFile.Offsets offsets)`
    `protected byte[]` | `writeCIDCount(CFFDataReader.DICTEntry dictEntry)`
    `protected java.util.List<java.lang.Integer>` | `writeCIDDictsAndSubrs(java.util.List<java.lang.Integer> uniqueNewRefs)`
    `protected int` | `writeFDArray(java.util.List<java.lang.Integer> uniqueNewRefs, java.util.List<java.lang.Integer> privateDictOffsets, java.util.List<java.lang.Integer> fontNameSIDs)`
    `protected void` | `writeFDSelect()`
    `protected int` | `writeIndex(java.util.List<byte[]> dataArray)`
    `protected int` | `writeIndex(java.util.List<byte[]> dataArray, int offSize)`
    `protected void` | `writePrivateDict()`
    `protected int` | `writeTopDICT()`

    - ### Methods inherited from class org.apache.fop.fonts.truetype.OTFSubSetWriter

      `concatArray, getFontSubset, writeByte, writeBytes, writeCard16, writeThreeByteNumber, writeULong`

    - ### Methods inherited from class org.apache.fop.fonts.truetype.OTFFile

      `getCFFData, initializeFont, isType1, readName, updateBBoxAndOffset`

    - ### Methods inherited from class org.apache.fop.fonts.truetype.OpenFont

      `checkTTC, convertTTFUnit2PDFUnit, createCMaps, determineAscDesc, getAnsiKerning, getBBox, getBBoxRaw, getBoundingBoxes, getCapHeight, getCharSetName, getCharWidth, getCharWidthRaw, getCMaps, getCopyrightNotice, getDirectoryEntry, getEmbedFontName, getFamilyNames, getFirstChar, getFlags, getFontBBox, getFullName, getGDEF, getGPOS, getGSUB, getItalicAngle, getKerning, getLastChar, getLowerCaseAscent, getLowerCaseDescent, getMtx, getNumGlyphs, getPadSize, getPostScriptName, getStemV, getStrikeoutPosition, getStrikeoutThickness, getSubFamilyName, getTTCnames, getUnderlinePosition, getUnderlineThickness, getWeightClass, getWidths, getXHeight, guessVerticalMetricsFromGlyphBBox, handleCharacterSpacing, hasAdvancedTable, initAnsiWidths, isCFF, isEmbeddable, main, printStuff, readCMAP, readDirTabs, readFont, readFont, readFontHeader, readHorizontalHeader, readHorizontalMetrics, readKerning, readOS2, readPCLT, readPostScript, seekTab, stream`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### subsetGlyphs

          protected java.util.Map<java.lang.Integer,java.lang.Integer> subsetGlyphs

      A map containing each glyph to be included in the subset with their existing and new GID's

    - #### gidToSID

          protected java.util.Map<java.lang.Integer,java.lang.Integer> gidToSID

      A map of the new GID to SID used to construct the charset table

    - #### localIndexSubr

          protected CFFDataReader.CFFIndexData localIndexSubr

    - #### globalIndexSubr

          protected CFFDataReader.CFFIndexData globalIndexSubr

    - #### subsetLocalIndexSubr

          protected java.util.List<byte[]> subsetLocalIndexSubr

      List of subroutines to write to the local / global indexes in the subset font

    - #### subsetGlobalIndexSubr

          protected java.util.List<byte[]> subsetGlobalIndexSubr

    - #### fdSubrs

          protected java.util.List<java.util.List<byte[]>> fdSubrs

      For fonts which have an FDSelect or ROS flag in Top Dict, this is used to store the local subroutine indexes for each group as opposed to the above subsetLocalIndexSubr

    - #### localUniques

          protected java.util.List<java.lang.Integer> localUniques

      A list of unique subroutines from the global / local subroutine indexes

    - #### globalUniques

          protected java.util.List<java.lang.Integer> globalUniques

    - #### subsetLocalSubrCount

          protected int subsetLocalSubrCount

      A store of the number of subroutines each global / local subroutine will store

    - #### subsetGlobalSubrCount

          protected int subsetGlobalSubrCount

    - #### subsetCharStringsIndex

          protected java.util.List<byte[]> subsetCharStringsIndex

      A list of char string data for each glyph to be stored in the subset font

    - #### embeddedName

          protected java.lang.String embeddedName

      The embedded name to change in the name table

    - #### stringIndexData

          protected java.util.List<byte[]> stringIndexData

      An array used to hold the string index data for the subset font

    - #### cffReader

          protected CFFDataReader cffReader

      The CFF reader object used to read data and offsets from the original font file

    - #### NUM_STANDARD_STRINGS

          public static final int NUM_STANDARD_STRINGS

      The number of standard strings in CFF
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### OTFSubSetFile

          public OTFSubSetFile()
                        throws java.io.IOException

      Throws:
        `java.io.IOException`

  - ### Method Detail

    - #### readFont

          public void readFont(FontFileReader in,
                               java.lang.String embeddedName,
                               MultiByteFont mbFont)
                        throws java.io.IOException

      Description copied from class: `OpenFont`
      Reads a font.
      Overrides:
        `readFont` in class `OpenFont`
      Parameters:
        `in` - FontFileReader to read from
      Throws:
        `java.io.IOException` - in case of an I/O problem

    - #### createCFF

          protected void createCFF()
                            throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### storeFDStrings

          protected java.util.List<java.lang.Integer> storeFDStrings(java.util.List<java.lang.Integer> uniqueNewRefs)
                                                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### writeTopDICT

          protected int writeTopDICT()
                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### writeCIDCount

          protected byte[] writeCIDCount(CFFDataReader.DICTEntry dictEntry)
                                  throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### createCharStringDataCID

          protected void createCharStringDataCID()
                                          throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### writeFDSelect

          protected void writeFDSelect()

    - #### getUsedFDFonts

          protected java.util.List<java.lang.Integer> getUsedFDFonts()

    - #### writeCIDDictsAndSubrs

          protected java.util.List<java.lang.Integer> writeCIDDictsAndSubrs(java.util.List<java.lang.Integer> uniqueNewRefs)
                                                                     throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### writeFDArray

          protected int writeFDArray(java.util.List<java.lang.Integer> uniqueNewRefs,
                                     java.util.List<java.lang.Integer> privateDictOffsets,
                                     java.util.List<java.lang.Integer> fontNameSIDs)
                              throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### createNewRef

          public static byte[] createNewRef(int newRef,
                                            int[] operatorCode,
                                            int forceLength,
                                            boolean isDict)

    - #### writeIndex

          protected int writeIndex(java.util.List<byte[]> dataArray)

    - #### writeIndex

          protected int writeIndex(java.util.List<byte[]> dataArray,
                                   int offSize)

    - #### writePrivateDict

          protected void writePrivateDict()
                                   throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### updateOffsets

          protected void updateOffsets(org.apache.fop.fonts.truetype.OTFSubSetFile.Offsets offsets)
                                throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### updateFixedOffsets

          protected void updateFixedOffsets(java.util.Map<java.lang.String,CFFDataReader.DICTEntry> topDICT,
                                            org.apache.fop.fonts.truetype.OTFSubSetFile.Offsets offsets)
                                     throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### updateCIDOffsets

          protected void updateCIDOffsets(org.apache.fop.fonts.truetype.OTFSubSetFile.Offsets offsets)
                                   throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### getCFFReader

          public CFFDataReader getCFFReader()

      Returns the parsed CFF data for the original font.
      Returns:
        The CFFDataReader contaiing the parsed data

Copyright 1999-2022 The Apache Software Foundation. All Rights Reserved.