- Author:
- Oren Manor & Ygal Blum
Nested classes/interfaces inherited from class com.lowagie.text.pdf.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 |
(package private) java.util.HashMap |
FDArrayUsed
A HashMap for keeping the FDArrays being used by the font |
(package private) int |
GBias
The bias for the global subroutines |
(package private) java.util.ArrayList |
glyphsInList
The GlyphsUsed keys as an ArrayList |
(package private) java.util.HashMap |
GlyphsUsed
A HashMap containing the glyphs used in the text after being converted
to glyph number by the CMap |
(package private) java.util.HashMap |
hGSubrsUsed
A HashMap for keeping the Global subroutines used in the font |
(package private) java.util.HashMap[] |
hSubrsUsed
A HashMaps array for keeping the subroutines used in each FontDict |
(package private) java.util.HashMap |
hSubrsUsedNonCID
A HashMap for keeping the subroutines used in a non-cid font |
(package private) java.util.ArrayList |
lGSubrsUsed
The Global SubroutinesUsed HashMaps as ArrayLists |
(package private) java.util.ArrayList[] |
lSubrsUsed
The SubroutinesUsed HashMaps as ArrayLists |
(package private) java.util.ArrayList |
lSubrsUsedNonCID
The SubroutinesUsed HashMap as ArrayList |
(package private) byte[] |
NewCharStringsIndex
The new CharString of the font |
(package private) byte[] |
NewGSubrsIndex
The new global subroutines index of the font |
(package private) byte[][] |
NewLSubrsIndex
An array of the new Indexs for the local Subr. |
(package private) byte[] |
NewSubrsIndexNonCID
The new subroutines index for a non-cid font |
(package private) int |
NumOfHints
Number of arguments to the stem operators in a subroutine calculated recursivly |
(package private) java.util.LinkedList |
OutputList
The linked list for generating the new font stream |
(package private) static java.lang.String[] |
SubrsEscapeFuncs
The Strings in this array represent Type1/Type2 escape operator names |
(package private) static java.lang.String[] |
SubrsFunctions
The Strings in this array represent Type1/Type2 operator names |
Fields inherited from class com.lowagie.text.pdf.CFFFont |
arg_count, args, buf, fonts, gsubrIndexOffset, gsubrOffsets, key, nameIndexOffset, nameOffsets, nextIndexOffset, operatorNames, standardStrings, stringIndexOffset, stringOffsets, topdictIndexOffset, topdictOffsets |
Method Summary |
protected 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 HashMap According to the glyphs used |
protected 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 ArrayList to find recursive calls
to Gsubrs and adds to Hashmap & ArrayList |
protected void |
BuildIndexHeader(int Count,
int Offsize,
int First)
Function Build the header of an index |
protected 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 process |
protected byte[] |
BuildNewIndex(int[] Offsets,
java.util.HashMap Used)
Function builds the new offset array, object array and assembles the index. |
protected void |
BuildNewLGSubrs(int Font)
Function builds the new local & global subsrs indices. |
protected void |
BuildSubrUsed(int Font,
int FD,
int SubrOffset,
int[] SubrsOffsets,
java.util.HashMap hSubr,
java.util.ArrayList lSubr)
Function uses ReadAsubr on the glyph used to build the LSubr & Gsubr HashMap. |
protected int |
CalcBias(int Offset,
int Font)
Function calcs bias according to the CharString type and the count
of the subrs |
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. |
(package private) int |
CalcSubrOffsetSize(int Offset,
int Size)
Calculates how many byte it took to write the offset for the subrs in a specific
private dict. |
protected void |
CopyHeader()
Function Copies the header from the original fileto the output list |
(package private) int |
CountCharset(int Offset,
int NumofGlyphs)
Calculates the length of the charset according to its format |
protected int |
countEntireIndexRange(int indexOffset)
Function computes the size of an index |
(package private) int |
CountRange(int NumofGlyphs,
int Type)
Function calculates the number of ranges in the Charset |
protected 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 TopDict |
protected void |
CreateNewStringIndex(int Font)
Function takes the original string item and adds the new strings
to accomodate the CID rules |
(package private) void |
CreateNonCIDPrivate(int Font,
CFFFont.OffsetItem Subr)
The function creates a private dict for a font that was not CID
All the keys are copied as is except for the subrs key |
(package private) void |
CreateNonCIDSubrs(int Font,
CFFFont.IndexBaseItem PrivateBase,
CFFFont.OffsetItem Subrs)
the function marks the beginning of the subrs index and adds the subsetted subrs
index to the output list. |
protected void |
EmptyStack()
Empty the Type2 Stack |
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 |
protected void |
PopStack()
Pop one element from the stack |
byte[] |
Process(java.lang.String fontName)
The Process function extracts one font out of the CFF file and returns a
subset version of the original. |
protected void |
PushStack()
Add an item to the stack |
protected void |
ReadASubr(int begin,
int end,
int GBias,
int LBias,
java.util.HashMap hSubr,
java.util.ArrayList lSubr,
int[] LSubrsOffsets)
The function reads a subrs (glyph info) between begin and end. |
protected void |
ReadCommand()
The function reads the next command after the file pointer is set |
protected void |
ReadFDArray(int Font)
Read the FDArray count, offsize and Offset array |
protected void |
readFDSelect(int Font)
Read the FDSelect of the font and compute the array and its length |
(package private) void |
Reconstruct(int Font)
Function reconstructs the FDArray, PrivateDict and LSubr for CID fonts |
(package private) void |
ReconstructFDArray(int Font,
CFFFont.OffsetItem[] fdPrivate)
Function subsets the FDArray and builds the new one with new offsets |
(package private) void |
ReconstructPrivateDict(int Font,
CFFFont.OffsetItem[] fdPrivate,
CFFFont.IndexBaseItem[] fdPrivateBase,
CFFFont.OffsetItem[] fdSubrs)
Function Adds the new private dicts (only for the FDs used) to the list |
(package private) void |
ReconstructPrivateSubrs(int Font,
CFFFont.IndexBaseItem[] fdPrivateBase,
CFFFont.OffsetItem[] fdSubrs)
Function Adds the new LSubrs dicts (only for the FDs used) to the list |
protected int |
StackOpp()
Function checks the key and return the change to the stack after the operator |
Methods inherited from class com.lowagie.text.pdf.CFFFont |
exists, getCard16, getCard8, getCID, getDictItem, getEntireIndexRange, getIndex, getInt, getNames, getOffset, getPosition, getShort, getString, isCID, ReadEncoding, seek |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
SubrsFunctions
static final java.lang.String[] SubrsFunctions
- The Strings in this array represent Type1/Type2 operator names
SubrsEscapeFuncs
static final java.lang.String[] SubrsEscapeFuncs
- The Strings in this array represent Type1/Type2 escape operator names
GlyphsUsed
java.util.HashMap GlyphsUsed
- A HashMap containing the glyphs used in the text after being converted
to glyph number by the CMap
glyphsInList
java.util.ArrayList glyphsInList
- The GlyphsUsed keys as an ArrayList
FDArrayUsed
java.util.HashMap FDArrayUsed
- A HashMap for keeping the FDArrays being used by the font
hSubrsUsed
java.util.HashMap[] hSubrsUsed
- A HashMaps array for keeping the subroutines used in each FontDict
lSubrsUsed
java.util.ArrayList[] lSubrsUsed
- The SubroutinesUsed HashMaps as ArrayLists
hGSubrsUsed
java.util.HashMap hGSubrsUsed
- A HashMap for keeping the Global subroutines used in the font
lGSubrsUsed
java.util.ArrayList lGSubrsUsed
- The Global SubroutinesUsed HashMaps as ArrayLists
hSubrsUsedNonCID
java.util.HashMap hSubrsUsedNonCID
- A HashMap for keeping the subroutines used in a non-cid font
lSubrsUsedNonCID
java.util.ArrayList lSubrsUsedNonCID
- The SubroutinesUsed HashMap as ArrayList
NewLSubrsIndex
byte[][] NewLSubrsIndex
- An array of the new Indexs for the local Subr. One index for each FontDict
NewSubrsIndexNonCID
byte[] NewSubrsIndexNonCID
- The new subroutines index for a non-cid font
NewGSubrsIndex
byte[] NewGSubrsIndex
- The new global subroutines index of the font
NewCharStringsIndex
byte[] NewCharStringsIndex
- The new CharString of the font
GBias
int GBias
- The bias for the global subroutines
OutputList
java.util.LinkedList OutputList
- The linked list for generating the new font stream
NumOfHints
int NumOfHints
- Number of arguments to the stem operators in a subroutine calculated recursivly
CFFFontSubset
public CFFFontSubset(RandomAccessFileOrArray rf,
java.util.HashMap GlyphsUsed)
- C'tor for CFFFontSubset
- Parameters:
rf
- - The font fileGlyphsUsed
- - a HashMap that contains the glyph used in the subset
CountCharset
int CountCharset(int Offset,
int NumofGlyphs)
- Calculates the length of the charset according to its format
- Parameters:
Offset
- The Charset OffsetNumofGlyphs
- Number of glyphs in the font
- Returns:
- the length of the Charset
CountRange
int CountRange(int NumofGlyphs,
int Type)
- Function calculates the number of ranges in the Charset
- Parameters:
NumofGlyphs
- The number of glyphs in the fontType
- The format of the Charset
- Returns:
- The number of ranges in the Charset data structure
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 HashMap 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
-
Process
public byte[] Process(java.lang.String fontName)
throws java.io.IOException
- 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
- Throws:
java.io.IOException
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 relevent subrs indexFont
- the font
- Returns:
- The calculated Bias
BuildNewCharString
protected void BuildNewCharString(int FontIndex)
throws java.io.IOException
- Function uses BuildNewIndex to create the new index of the subset charstrings
- Parameters:
FontIndex
- the font
- Throws:
java.io.IOException
BuildNewLGSubrs
protected void BuildNewLGSubrs(int Font)
throws java.io.IOException
- Function builds the new local & global subsrs indices. IF CID then All of
the FD Array lsubrs will be subsetted.
- Parameters:
Font
- the font
- Throws:
java.io.IOException
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 fontFD
- The FDARRAY processed
BuildSubrUsed
protected void BuildSubrUsed(int Font,
int FD,
int SubrOffset,
int[] SubrsOffsets,
java.util.HashMap hSubr,
java.util.ArrayList lSubr)
- Function uses ReadAsubr on the glyph used to build the LSubr & Gsubr HashMap.
The HashMap (of the lsub only) is then scaned recursivly for Lsubr & Gsubrs
calls.
- Parameters:
Font
- the fontFD
- FD array processed. 0 indicates function was called by non CID fontSubrOffset
- the offset to the subr index to calc the biasSubrsOffsets
- the offset array of the subr indexhSubr
- HashMap of the subrs usedlSubr
- ArrayList of the subrs used
BuildGSubrsUsed
protected void BuildGSubrsUsed(int Font)
- Function scans the Glsubr used ArrayList to find recursive calls
to Gsubrs and adds to Hashmap & ArrayList
- Parameters:
Font
- the font
ReadASubr
protected void ReadASubr(int begin,
int end,
int GBias,
int LBias,
java.util.HashMap hSubr,
java.util.ArrayList 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 subrend
- the end point of the subrGBias
- the bias of the Global SubrsLBias
- the bias of the Local SubrshSubr
- the HashMap for the lSubrslSubr
- the ArrayList for the lSubrs
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 subrend
- the end point of the subrLBias
- the bias of the Local SubrsGBias
- the bias of the Global SubrsLSubrsOffsets
- The Offsets array of the subroutines
- Returns:
- The number of hints in the subroutine read.
BuildNewIndex
protected byte[] BuildNewIndex(int[] Offsets,
java.util.HashMap Used)
throws java.io.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 indexUsed
- the hashmap of the used objects
- Returns:
- the new index subset version
- Throws:
java.io.IOException
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 arrayNewObjects
- the subsetted object array
- Returns:
- the new index created
BuildNewFile
protected byte[] BuildNewFile(int Font)
throws java.io.IOException
- The function builds the new output stream according to the subset process
- Parameters:
Font
- the font
- Returns:
- the subseted font stream
- Throws:
java.io.IOException
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 indexOffsize
- the offsize field of the indexFirst
- 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 FDArrayfdselectRef
- OffsetItem for the FDSelectcharsetRef
- OffsetItem for the CharSetcharstringsRef
- OffsetItem for the CharString
CreateNewStringIndex
protected void CreateNewStringIndex(int Font)
- Function takes the original string item and adds the new strings
to accomodate 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 FDSelectnglyphs
- 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 CharSetnglyphs
- 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 FDArrayprivateRef
- OffsetItem for the Private DictFont
- the font
Reconstruct
void Reconstruct(int Font)
throws java.io.IOException
- Function reconstructs the FDArray, PrivateDict and LSubr for CID fonts
- Parameters:
Font
- the font
- Throws:
java.io.IOException
ReconstructFDArray
void ReconstructFDArray(int Font,
CFFFont.OffsetItem[] fdPrivate)
throws java.io.IOException
- Function subsets the FDArray and builds the new one with new offsets
- Parameters:
Font
- The fontfdPrivate
- OffsetItem Array (one for each FDArray)
- Throws:
java.io.IOException
ReconstructPrivateDict
void ReconstructPrivateDict(int Font,
CFFFont.OffsetItem[] fdPrivate,
CFFFont.IndexBaseItem[] fdPrivateBase,
CFFFont.OffsetItem[] fdSubrs)
throws java.io.IOException
- Function Adds the new private dicts (only for the FDs used) to the list
- Parameters:
Font
- the fontfdPrivate
- OffsetItem array one element for each privatefdPrivateBase
- IndexBaseItem array one element for each privatefdSubrs
- OffsetItem array one element for each private
- Throws:
java.io.IOException
ReconstructPrivateSubrs
void ReconstructPrivateSubrs(int Font,
CFFFont.IndexBaseItem[] fdPrivateBase,
CFFFont.OffsetItem[] fdSubrs)
throws java.io.IOException
- Function Adds the new LSubrs dicts (only for the FDs used) to the list
- Parameters:
Font
- The index of the fontfdPrivateBase
- The IndexBaseItem array for the linked listfdSubrs
- OffsetItem array for the linked list
- Throws:
java.io.IOException
CalcSubrOffsetSize
int CalcSubrOffsetSize(int Offset,
int Size)
- Calculates how many byte it took to write the offset for the subrs in a specific
private dict.
- Parameters:
Offset
- The Offset for the private dictSize
- The size of the private dict
- Returns:
- The size of the offset of the subrs in the private dict
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
CreateNonCIDPrivate
void CreateNonCIDPrivate(int Font,
CFFFont.OffsetItem Subr)
- The function creates a private dict for a font that was not CID
All the keys are copied as is except for the subrs key
- Parameters:
Font
- the fontSubr
- The OffsetItem for the subrs of the private
CreateNonCIDSubrs
void CreateNonCIDSubrs(int Font,
CFFFont.IndexBaseItem PrivateBase,
CFFFont.OffsetItem Subrs)
throws java.io.IOException
- the function marks the beginning of the subrs index and adds the subsetted subrs
index to the output list.
- Parameters:
Font
- the fontPrivateBase
- IndexBaseItem for the private that's referencing to the subrsSubrs
- OffsetItem for the subrs
- Throws:
java.io.IOException