Package org.apache.fop.fonts.truetype
Class OpenFont
java.lang.Object
org.apache.fop.fonts.truetype.OpenFont
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
Version of the PostScript table (post) contained in this font. -
Field Summary
Modifier and TypeFieldDescriptionprotected OTFAdvancedTypographicTableReader
protected boolean
protected Map<OFTableName,
OFDirTabEntry> Table directoryprotected String
protected FontFileReader
The FontFileReader used to read this TrueType font.protected String
protected long
Offset to last locaprotected int
protected org.apache.commons.logging.Log
logging instanceprotected OFMtxEntry[]
Contains glyph dataprotected int
protected String
protected int
protected String
protected String
protected Map<Integer,
SVGGlyphData> static final boolean
Set to true to get even more debug output than with level DEBUGprotected List<org.apache.fop.fonts.truetype.OpenFont.UnicodeMapping>
protected boolean
protected boolean
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected final boolean
Check if this is a TrueType collection and that the given name exists in the collection.int
convertTTFUnit2PDFUnit
(int n) Convert from truetype unit to pdf unit based on the unitsPerEm field in the "head" tableprotected void
protected void
Determines the right source for the ascender and descender values.Returns the ANSI kerning table.int[]
getBBox
(int glyphIndex) Returns an array (xMin, yMin, xMax, yMax) for a glyph.int[]
Returns the original bounding box values from the HEAD tableint
Returns the CapHeight attribute of the font.Returns the name of the character set used.int
getCharWidth
(int idx) Returns the width of a given character.int
getCharWidthRaw
(int idx) Returns the width of a given character in raw unitsgetCMaps()
Returns this font's character to glyph mapping.getDirectoryEntry
(OFTableName name) Obtain directory table entry.Returns the font family names of the font.short
Returns the index of the first character.int
getFlags()
Returns the Flags attribute of the font.int[]
Returns the full name of the font.getGDEF()
Returns the GDEF table or null if none present.getGPOS()
Returns the GPOS table or null if none present.getGSUB()
Returns the GSUB table or null if none present.Returns the ItalicAngle attribute of the font.Returns the kerning table.short
Returns the index of the last character, but this is for WinAnsiEncoding only, so the last char is < 256.int
Returns the LowerCaseAscent attribute of the font.int
Returns the LowerCaseDescent attribute of the font.getMtx()
protected void
Read the number of glyphs from the "maxp" tableprotected int
getPadSize
(int currentPosition) Returns the number of bytes necessary to pad the currentPosition so that a table begins on a 4-byte boundary.Returns the PostScript name of the font.getStemV()
Returns the StemV attribute of the font.int
int
Returns the font sub family name of the font.Return TTC font namesint
int
int
Returns the weight class of this font.int[]
Returns an array of character widths.int
Returns the XHeight attribute of the font.protected void
protected void
boolean
Determine if advanced (typographic) table is present.protected void
initialize the ansiWidths array (for winAnsiEncoding) and fill with the missingwidthprotected abstract void
boolean
isCFF()
Indicates whether or not the font is an OpenType CFF font (rather than a TrueType font).boolean
Indicates if the font may be embedded.static void
Static main method to get info about a TrueType font.void
Dumps a few informational values to System.out.protected boolean
readCMAP()
Read the cmap table, return false if the table is not present or only unsupported tables are present.protected void
Read Table Directory from the current position in the FontFileReader and fill the global HashMap dirTabs with the table name (String) as key and a TTFDirTabEntry as value.void
readFont
(FontFileReader in, String header) Reads the font using a FontFileReader.boolean
readFont
(FontFileReader in, String header, String name) Read the font data.void
readFont
(FontFileReader in, String header, MultiByteFont mbfont) Reads a font.protected void
Read the "head" table, this reads the bounding box and sets the upem (unitsPerEM) variableprotected void
Read the "hhea" table to find the ascender and descender and size of "hmtx" table, as a fixed size font might have only one width.protected void
Read "hmtx" table and put the horizontal metrics in the mtxTab array.protected void
Read the kerning table, create a table for both CIDs and winAnsiEncoding.protected abstract void
readName()
protected void
readOS2()
Read the "OS/2" tableprotected boolean
readPCLT()
Read the "PCLT" table to find xHeight and capHeight.protected void
Read the "post" table containing the PostScript names of the glyphs.boolean
seekTab
(FontFileReader in, OFTableName tableName, long offset) Position inputstream to position indicated in the dirtab offset + offsetvoid
stream
(TTFOutputStream ttfOut) Streams a font.protected abstract void
-
Field Details
-
fontFile
The FontFileReader used to read this TrueType font. -
TRACE_ENABLED
public static final boolean TRACE_ENABLEDSet to true to get even more debug output than with level DEBUG- See Also:
-
useKerning
protected boolean useKerning -
dirTabs
Table directory -
unicodeMappings
-
nhmtx
protected int nhmtx -
locaFormat
protected int locaFormat -
lastLoca
protected long lastLocaOffset to last loca -
numberOfGlyphs
protected int numberOfGlyphs -
mtxTab
Contains glyph data -
postScriptName
-
fullName
-
embedFontName
-
notice
-
familyNames
-
subFamilyName
-
cid
protected boolean cid -
svgs
-
useAdvanced
protected boolean useAdvanced -
advancedTableReader
-
log
protected org.apache.commons.logging.Log loglogging instance
-
-
Constructor Details
-
OpenFont
public OpenFont() -
OpenFont
public OpenFont(boolean useKerning, boolean useAdvanced) Constructor- Parameters:
useKerning
- true if kerning data should be loadeduseAdvanced
- true if advanced typographic tables should be loaded
-
-
Method Details
-
getDirectoryEntry
Obtain directory table entry.- Parameters:
name
- (tag) of entry- Returns:
- a directory table entry or null if none found
-
seekTab
Position inputstream to position indicated in the dirtab offset + offset- Parameters:
in
- font file readertableName
- (tag) of tableoffset
- from start of table- Returns:
- true if seek succeeded
- Throws:
IOException
- if I/O exception occurs during seek
-
convertTTFUnit2PDFUnit
public int convertTTFUnit2PDFUnit(int n) Convert from truetype unit to pdf unit based on the unitsPerEm field in the "head" table- Parameters:
n
- truetype unit- Returns:
- pdf unit
-
readCMAP
Read the cmap table, return false if the table is not present or only unsupported tables are present. Currently only unicode cmaps are supported. Set the unicodeIndex in the TTFMtxEntries and fills in the cmaps vector.- Throws:
IOException
- See Also:
-
getMtx
- Returns:
- mmtx data
-
readFont
Reads the font using a FontFileReader.- Parameters:
in
- The FontFileReader to use- Throws:
IOException
- In case of an I/O problem
-
initAnsiWidths
protected void initAnsiWidths()initialize the ansiWidths array (for winAnsiEncoding) and fill with the missingwidth -
readFont
Read the font data. If the fontfile is a TrueType Collection (.ttc file) the name of the font to read data for must be supplied, else the name is ignored.- Parameters:
in
- The FontFileReader to usename
- The name of the font- Returns:
- boolean Returns true if the font is valid
- Throws:
IOException
- In case of an I/O problem
-
readFont
Reads a font.- Parameters:
in
- FontFileReader to read from- Throws:
IOException
- in case of an I/O problem
-
updateBBoxAndOffset
- Throws:
IOException
-
readName
- Throws:
IOException
-
initializeFont
- Throws:
IOException
-
handleCharacterSpacing
- Throws:
IOException
-
createCMaps
protected void createCMaps() -
getPostScriptName
Returns the PostScript name of the font.- Returns:
- String The PostScript name
-
getFamilyNames
Returns the font family names of the font.- Returns:
- Set The family names (a Set of Strings)
-
getSubFamilyName
Returns the font sub family name of the font.- Returns:
- String The sub family name
-
getFullName
Returns the full name of the font.- Returns:
- String The full name
-
getCharSetName
Returns the name of the character set used.- Returns:
- String The caracter set
-
getCapHeight
public int getCapHeight()Returns the CapHeight attribute of the font.- Returns:
- int The CapHeight
-
getXHeight
public int getXHeight()Returns the XHeight attribute of the font.- Returns:
- int The XHeight
-
getPadSize
protected int getPadSize(int currentPosition) Returns the number of bytes necessary to pad the currentPosition so that a table begins on a 4-byte boundary.- Parameters:
currentPosition
- the position to pad.- Returns:
- int the number of bytes to pad.
-
getFlags
public int getFlags()Returns the Flags attribute of the font.- Returns:
- int The Flags
-
getWeightClass
public int getWeightClass()Returns the weight class of this font. Valid values are 100, 200....,800, 900.- Returns:
- the weight class value (or 0 if there was no OS/2 table in the font)
-
getStemV
Returns the StemV attribute of the font.- Returns:
- String The StemV
-
getItalicAngle
Returns the ItalicAngle attribute of the font.- Returns:
- String The ItalicAngle
-
getFontBBox
public int[] getFontBBox()- Returns:
- int[] The font bbox
-
getBBoxRaw
public int[] getBBoxRaw()Returns the original bounding box values from the HEAD table- Returns:
- An array of bounding box values
-
getLowerCaseAscent
public int getLowerCaseAscent()Returns the LowerCaseAscent attribute of the font.- Returns:
- int The LowerCaseAscent
-
getLowerCaseDescent
public int getLowerCaseDescent()Returns the LowerCaseDescent attribute of the font.- Returns:
- int The LowerCaseDescent
-
getLastChar
public short getLastChar()Returns the index of the last character, but this is for WinAnsiEncoding only, so the last char is < 256.- Returns:
- short Index of the last character (<256)
-
getFirstChar
public short getFirstChar()Returns the index of the first character.- Returns:
- short Index of the first character
-
getWidths
public int[] getWidths()Returns an array of character widths.- Returns:
- int[] The character widths
-
getBoundingBoxes
-
getBBox
public int[] getBBox(int glyphIndex) Returns an array (xMin, yMin, xMax, yMax) for a glyph.- Parameters:
glyphIndex
- the index of the glyph- Returns:
- int[] Array defining bounding box.
-
getCharWidth
public int getCharWidth(int idx) Returns the width of a given character.- Parameters:
idx
- Index of the character- Returns:
- int Standard width
-
getCharWidthRaw
public int getCharWidthRaw(int idx) Returns the width of a given character in raw units- Parameters:
idx
- Index of the character- Returns:
- int Width in it's raw form stored in the font
-
getKerning
Returns the kerning table.- Returns:
- Map The kerning table
-
getAnsiKerning
Returns the ANSI kerning table.- Returns:
- Map The ANSI kerning table
-
getUnderlinePosition
public int getUnderlinePosition() -
getUnderlineThickness
public int getUnderlineThickness() -
getStrikeoutPosition
public int getStrikeoutPosition() -
getStrikeoutThickness
public int getStrikeoutThickness() -
isEmbeddable
public boolean isEmbeddable()Indicates if the font may be embedded.- Returns:
- boolean True if it may be embedded
-
isCFF
public boolean isCFF()Indicates whether or not the font is an OpenType CFF font (rather than a TrueType font).- Returns:
- true if the font is in OpenType CFF format.
-
readDirTabs
Read Table Directory from the current position in the FontFileReader and fill the global HashMap dirTabs with the table name (String) as key and a TTFDirTabEntry as value.- Throws:
IOException
- in case of an I/O problem
-
readFontHeader
Read the "head" table, this reads the bounding box and sets the upem (unitsPerEM) variable- Throws:
IOException
- in case of an I/O problem
-
getNumGlyphs
Read the number of glyphs from the "maxp" table- Throws:
IOException
- in case of an I/O problem
-
readHorizontalHeader
Read the "hhea" table to find the ascender and descender and size of "hmtx" table, as a fixed size font might have only one width.- Throws:
IOException
- in case of an I/O problem
-
readHorizontalMetrics
Read "hmtx" table and put the horizontal metrics in the mtxTab array. If the number of metrics is less than the number of glyphs (eg fixed size fonts), extend the mtxTab array and fill in the missing widths- Throws:
IOException
- in case of an I/O problem
-
readPostScript
Read the "post" table containing the PostScript names of the glyphs.- Throws:
IOException
-
readOS2
Read the "OS/2" table- Throws:
IOException
-
readPCLT
Read the "PCLT" table to find xHeight and capHeight.- Throws:
IOException
- In case of a I/O problem
-
determineAscDesc
protected void determineAscDesc()Determines the right source for the ascender and descender values. The problem here is that the interpretation of these values is not the same for every font. There doesn't seem to be a uniform definition of an ascender and a descender. In some fonts the hhea values are defined after the Apple interpretation, but not in every font. The same problem is in the OS/2 table. FOP needs the ascender and descender to determine the baseline so we need values which add up more or less to the "em box". However, due to accent modifiers a character can grow beyond the em box. -
guessVerticalMetricsFromGlyphBBox
protected void guessVerticalMetricsFromGlyphBBox() -
readKerning
Read the kerning table, create a table for both CIDs and winAnsiEncoding.- Throws:
IOException
- In case of a I/O problem
-
stream
Streams a font.- Parameters:
ttfOut
- The interface for streaming TrueType tables.- Throws:
IOException
- file write error
-
getCMaps
Returns this font's character to glyph mapping.- Returns:
- the font's cmap
-
checkTTC
Check if this is a TrueType collection and that the given name exists in the collection. If it does, set offset in fontfile to the beginning of the Table Directory for that font.- Parameters:
name
- The name to check- Returns:
- True if not collection or font name present, false otherwise
- Throws:
IOException
- In case of an I/O problem
-
getTTCnames
Return TTC font names- Parameters:
in
- FontFileReader to read from- Returns:
- True if not collection or font name present, false otherwise
- Throws:
IOException
- In case of an I/O problem
-
printStuff
public void printStuff()Dumps a few informational values to System.out. -
hasAdvancedTable
public boolean hasAdvancedTable()Determine if advanced (typographic) table is present.- Returns:
- true if advanced (typographic) table is present
-
getGDEF
Returns the GDEF table or null if none present.- Returns:
- the GDEF table
-
getGSUB
Returns the GSUB table or null if none present.- Returns:
- the GSUB table
-
getGPOS
Returns the GPOS table or null if none present.- Returns:
- the GPOS table
-
main
Static main method to get info about a TrueType font.- Parameters:
args
- The command line arguments
-
getEmbedFontName
-
getCopyrightNotice
-