Package com.itextpdf.io.font
Class CFFFontSubset
java.lang.Object
com.itextpdf.io.font.CFFFont
com.itextpdf.io.font.CFFFontSubset
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)
-
Nested Class Summary
Nested classes/interfaces inherited from class com.itextpdf.io.font.CFFFont
CFFFont.DictNumberItem, CFFFont.DictOffsetItem, CFFFont.Font, CFFFont.IndexBaseItem, CFFFont.IndexMarkerItem, CFFFont.IndexOffsetItem, CFFFont.Item, CFFFont.MarkerItem, CFFFont.OffsetItem, CFFFont.RangeItem, CFFFont.StringItem, CFFFont.SubrMarkerItem, CFFFont.UInt16Item, CFFFont.UInt24Item, CFFFont.UInt32Item, CFFFont.UInt8Item
-
Field Summary
Fields inherited from class com.itextpdf.io.font.CFFFont
arg_count, args, buf, fonts, gsubrIndexOffset, gsubrOffsets, key, nameIndexOffset, nameOffsets, stringIndexOffset, stringOffsets, topdictIndexOffset, topdictOffsets
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected byte[]
AssembleIndex
(int[] NewOffsets, byte[] NewObjects) Function creates the new index, inserting the count,offsetsize,offset array and object array.protected void
BuildFDArrayUsed
(int Font) Function reads the FDSelect and builds the FDArrayUsed Map According to the glyphs usedprotected void
BuildFDSubrsOffsets
(int Font, int FD) The function finds for the FD array processed the local subr offset and its offset array.protected void
BuildGSubrsUsed
(int Font) Function scans the Glsubr used list to find recursive calls to Gsubrs and adds to Map and listprotected void
BuildIndexHeader
(int Count, int Offsize, int First) Function Build the header of an indexprotected void
BuildNewCharString
(int FontIndex) Function uses BuildNewIndex to create the new index of the subset charstrings.protected byte[]
BuildNewFile
(int Font) The function builds the new output stream according to the subset processprotected byte[]
BuildNewIndex
(int[] Offsets, Set<Integer> Used, byte OperatorForUnusedEntries) Function builds the new offset array, object array and assembles the index.protected byte[]
BuildNewIndexAndCopyAllGSubrs
(int[] Offsets, byte OperatorForUnusedEntries) Function builds the new offset array, object array and assembles the index.protected void
BuildNewLGSubrs
(int Font) Function builds the new local and global subsrs indices.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.protected int
CalcBias
(int Offset, int Font) Function calcs bias according to the CharString type and the count of the subrsprotected 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.protected void
Function Copies the header from the original fileto the output listprotected int
countEntireIndexRange
(int indexOffset) Function computes the size of an indexprotected void
CreateCharset
(CFFFont.OffsetItem charsetRef, int nglyphs) Function creates new CharSet for non-CID fonts.protected void
CreateFDArray
(CFFFont.OffsetItem fdarrayRef, CFFFont.OffsetItem privateRef, int Font) Function creates new FDArray for non-CID fonts.protected void
CreateFDSelect
(CFFFont.OffsetItem fdselectRef, int nglyphs) Function creates new FDSelect for non-CID fonts.protected void
CreateKeys
(CFFFont.OffsetItem fdarrayRef, CFFFont.OffsetItem fdselectRef, CFFFont.OffsetItem charsetRef, CFFFont.OffsetItem charstringsRef) Function adds the keys into the TopDictprotected void
CreateNewStringIndex
(int Font) Function takes the original string item and adds the new strings to accommodate the CID rulesprotected void
Empty the Type2 Stackprotected void
Function Checks how the current operator effects the run time stack after being run An operator may increase or decrease the stack sizeprotected void
PopStack()
Pop one element from the stackbyte[]
Process()
The Process function extracts one font out of the CFF file and returns a subset version of the original with the first name.byte[]
The Process function extracts one font out of the CFF file and returns a subset version of the original.protected void
Add an item to the stackprotected 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.protected void
The function reads the next command after the file pointer is setprotected void
ReadFDArray
(int Font) Read the FDArray count, offsize and Offset arrayprotected void
readFDSelect
(int Font) Read the FDSelect of the font and compute the array and its lengthprotected int
StackOpp()
Function checks the key and return the change to the stack after the operatorMethods inherited from class com.itextpdf.io.font.CFFFont
exists, getCID, getDictItem, getEntireIndexRange, getNames, getString, isCID, isCID
-
Constructor Details
-
CFFFontSubset
-
-
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
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
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
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
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
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
-