com.lowagie.text.pdf
Class TrueTypeFont

java.lang.Object
  extended bycom.lowagie.text.pdf.BaseFont
      extended bycom.lowagie.text.pdf.TrueTypeFont
Direct Known Subclasses:
EnumerateTTC, TrueTypeFontUnicode

class TrueTypeFont
extends BaseFont

Reads a Truetype font

Author:
Paulo Soares (psoares@consiste.pt)

Nested Class Summary
protected  class TrueTypeFont.FontHeader
          The components of table 'head'.
protected  class TrueTypeFont.HorizontalHeader
          The components of table 'hhea'.
protected  class TrueTypeFont.WindowsMetrics
          The components of table 'OS/2'.
 
Nested classes inherited from class com.lowagie.text.pdf.BaseFont
BaseFont.StreamFont
 
Field Summary
protected  boolean cff
           
protected  int cffLength
           
protected  int cffOffset
           
protected  HashMap cmap10
          The map containing the code information for the table 'cmap', encoding 1.0.
protected  HashMap cmap31
          The map containing the code information for the table 'cmap', encoding 3.1 in Unicode.
(package private) static String[] codePages
          The code pages possible for a True Type font.
protected  int directoryOffset
          The offset from the start of the file to the table directory.
protected  String[][] familyName
          The family name of the font
protected  String fileName
          The file name.
protected  String fontName
          The font name.
protected  String[][] fullName
          The full name of the font
protected  int[] GlyphWidths
          The width of the glyphs.
protected  TrueTypeFont.FontHeader head
          The content of table 'head'.
protected  TrueTypeFont.HorizontalHeader hhea
          The content of table 'hhea'.
protected  boolean isFixedPitch
          true if all the glyphs have the same width.
protected  double italicAngle
          The italic angle.
protected  boolean justNames
           
protected  HashMap kerning
          The map containig the kerning information.
protected  TrueTypeFont.WindowsMetrics os_2
          The content of table 'OS/2'.
protected  RandomAccessFileOrArray rf
          The file in use.
protected  String style
          The style modifier
protected  HashMap tables
          Contains the location of the several tables.
protected  String ttcIndex
          The index for the TTC font.
 
Fields inherited from class com.lowagie.text.pdf.BaseFont
ASCENT, AWT_ASCENT, AWT_DESCENT, AWT_LEADING, AWT_MAXADVANCE, BBOXLLX, BBOXLLY, BBOXURX, BBOXURY, BuiltinFonts14, CACHED, CAPHEIGHT, CID_NEWLINE, COURIER, COURIER_BOLD, COURIER_BOLDOBLIQUE, COURIER_OBLIQUE, CP1250, CP1252, CP1257, DESCENT, differences, directTextToByte, embedded, EMBEDDED, encoding, fastWinansi, FONT_TYPE_CJK, FONT_TYPE_DOCUMENT, FONT_TYPE_T1, FONT_TYPE_TT, FONT_TYPE_TTUNI, fontCache, fontSpecific, fontType, forceWidthsOutput, HELVETICA, HELVETICA_BOLD, HELVETICA_BOLDOBLIQUE, HELVETICA_OBLIQUE, IDENTITY_H, IDENTITY_V, ITALICANGLE, MACROMAN, NOT_CACHED, NOT_EMBEDDED, notdef, RESOURCE_PATH, subset, SYMBOL, TIMES_BOLD, TIMES_BOLDITALIC, TIMES_ITALIC, TIMES_ROMAN, unicodeDifferences, widths, WINANSI, ZAPFDINGBATS
 
Constructor Summary
protected TrueTypeFont()
          This constructor is present to allow extending the class.
(package private) TrueTypeFont(String ttFile, String enc, boolean emb, byte[] ttfAfm)
           
(package private) TrueTypeFont(String ttFile, String enc, boolean emb, byte[] ttfAfm, boolean justNames)
          Creates a new TrueType font.
 
Method Summary
(package private)  void checkCff()
           
(package private)  void fillTables()
          Reads the tables 'head', 'hhea', 'OS/2' and 'post' filling several variables.
(package private)  String getBaseFont()
          Gets the Postscript font name.
 String[] getCodePagesSupported()
          Gets the code pages supported by the font.
 String[][] getFamilyFontName()
          Gets the family name of the font.
protected  PdfDictionary getFontBaseType(PdfIndirectReference fontDescriptor, String subsetPrefix, int firstChar, int lastChar, byte[] shortTag)
          Generates the font dictionary for this font.
 float getFontDescriptor(int key, float fontSize)
          Gets the font parameter identified by key.
protected  PdfDictionary getFontDescriptor(PdfIndirectReference fontStream, String subsetPrefix)
          Generates the font descriptor for this font.
private  byte[] getFullFont()
           
 String[][] getFullFontName()
          Gets the full name of the font.
 int getGlyphWidth(int glyph)
          Gets a glyph width.
 int getKerning(char char1, char char2)
          Gets the kerning between two Unicode chars.
 int[] getMetricsTT(int c)
          Gets the glyph index and metrics for a character.
(package private)  String[][] getNames(int id)
          Extracts the names of the font in all the languages available.
 String getPostscriptFontName()
          Gets the postscript font name.
(package private)  int getRawWidth(int c, String name)
          Gets the width from the font according to the unicode char c.
protected static String getTTCName(String name)
          Gets the name from a composed TTC file name.
 boolean hasKernPairs()
          Checks if the font has any kerning pairs.
(package private)  void process(byte[] ttfAfm)
          Reads the font data.
(package private)  void readCMaps()
          Reads the several maps from the table 'cmap'.
(package private)  HashMap readFormat0()
          The information in the maps of the table 'cmap' is coded in several formats.
(package private)  HashMap readFormat4()
          The information in the maps of the table 'cmap' is coded in several formats.
(package private)  HashMap readFormat6()
          The information in the maps of the table 'cmap' is coded in several formats.
protected  void readGlyphWidths()
          Reads the glyphs widths.
(package private)  void readKerning()
          Reads the kerning information from the 'kern' table.
protected  String readStandardString(int length)
          Reads a String from the font file as bytes using the Cp1252 encoding.
protected  String readUnicodeString(int length)
          Reads a Unicode String from the font file.
(package private)  void writeFont(PdfWriter writer, PdfIndirectReference ref, Object[] params)
          Outputs to the writer the font dictionaries and streams.
 
Methods inherited from class com.lowagie.text.pdf.BaseFont
charExists, convertToBytes, createEncoding, createFont, createFont, createSubsetPrefix, enumerateTTCNames, enumerateTTCNames, getAllFontNames, getBaseName, getCidCode, getDifferences, getEncoding, getFontType, getFullFontName, getResourceStream, getResourceStream, getUnicodeDifferences, getUnicodeDifferences, getUnicodeEquivalent, getWidth, getWidth, getWidthPoint, getWidthPoint, getWidthPointKerned, getWidths, isDirectTextToByte, isEmbedded, isFontSpecific, isForceWidthsOutput, isSubset, normalizeEncoding, setCharAdvance, setDirectTextToByte, setForceWidthsOutput, setSubset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

codePages

static final String[] codePages
The code pages possible for a True Type font.


justNames

protected boolean justNames

tables

protected HashMap tables
Contains the location of the several tables. The key is the name of the table and the value is an int[2] where position 0 is the offset from the start of the file and position 1 is the length of the table.


rf

protected RandomAccessFileOrArray rf
The file in use.


fileName

protected String fileName
The file name.


cff

protected boolean cff

cffOffset

protected int cffOffset

cffLength

protected int cffLength

directoryOffset

protected int directoryOffset
The offset from the start of the file to the table directory. It is 0 for TTF and may vary for TTC depending on the chosen font.


ttcIndex

protected String ttcIndex
The index for the TTC font. It is an empty String for a TTF file.


style

protected String style
The style modifier


head

protected TrueTypeFont.FontHeader head
The content of table 'head'.


hhea

protected TrueTypeFont.HorizontalHeader hhea
The content of table 'hhea'.


os_2

protected TrueTypeFont.WindowsMetrics os_2
The content of table 'OS/2'.


GlyphWidths

protected int[] GlyphWidths
The width of the glyphs. This is essentially the content of table 'hmtx' normalized to 1000 units.


cmap10

protected HashMap cmap10
The map containing the code information for the table 'cmap', encoding 1.0. The key is the code and the value is an int[2] where position 0 is the glyph number and position 1 is the glyph width normalized to 1000 units.


cmap31

protected HashMap cmap31
The map containing the code information for the table 'cmap', encoding 3.1 in Unicode.

The key is the code and the value is an int[2] where position 0 is the glyph number and position 1 is the glyph width normalized to 1000 units.


kerning

protected HashMap kerning
The map containig the kerning information. It represents the content of table 'kern'. The key is an Integer where the top 16 bits are the Unicode for the first character and the lower 16 bits are the Unicode for the second character. The value is the amount of kerning in normalized 1000 units as an Integer. This value is usually negative.


fontName

protected String fontName
The font name. This name is usually extracted from the table 'name' with the 'Name ID' 6.


fullName

protected String[][] fullName
The full name of the font


familyName

protected String[][] familyName
The family name of the font


italicAngle

protected double italicAngle
The italic angle. It is usually extracted from the 'post' table or in it's absence with the code:

 -Math.atan2(hhea.caretSlopeRun, hhea.caretSlopeRise) * 180 / Math.PI
 


isFixedPitch

protected boolean isFixedPitch
true if all the glyphs have the same width.

Constructor Detail

TrueTypeFont

protected TrueTypeFont()
This constructor is present to allow extending the class.


TrueTypeFont

TrueTypeFont(String ttFile,
             String enc,
             boolean emb,
             byte[] ttfAfm)
       throws DocumentException,
              IOException

TrueTypeFont

TrueTypeFont(String ttFile,
             String enc,
             boolean emb,
             byte[] ttfAfm,
             boolean justNames)
       throws DocumentException,
              IOException
Creates a new TrueType font.

Parameters:
ttFile - the location of the font on file. The file must end in '.ttf' or '.ttc' but can have modifiers after the name
enc - the encoding to be applied to this font
emb - true if the font is to be embedded in the PDF
ttfAfm - the font as a byte array
Throws:
DocumentException - the font is invalid
IOException - the font file could not be read
Method Detail

getTTCName

protected static String getTTCName(String name)
Gets the name from a composed TTC file name. If I have for input "myfont.ttc,2" the return will be "myfont.ttc".

Parameters:
name - the full name
Returns:
the simple file name

fillTables

void fillTables()
          throws DocumentException,
                 IOException
Reads the tables 'head', 'hhea', 'OS/2' and 'post' filling several variables.

Throws:
DocumentException - the font is invalid
IOException - the font file could not be read

getBaseFont

String getBaseFont()
             throws DocumentException,
                    IOException
Gets the Postscript font name.

Returns:
the Postscript font name
Throws:
DocumentException - the font is invalid
IOException - the font file could not be read

getNames

String[][] getNames(int id)
              throws DocumentException,
                     IOException
Extracts the names of the font in all the languages available.

Parameters:
id - the name id to retrieve
Throws:
DocumentException - on error
IOException - on error

checkCff

void checkCff()
        throws DocumentException,
               IOException
Throws:
DocumentException
IOException

process

void process(byte[] ttfAfm)
       throws DocumentException,
              IOException
Reads the font data.

Parameters:
ttfAfm - the font as a byte array, possibly null
Throws:
DocumentException - the font is invalid
IOException - the font file could not be read

readStandardString

protected String readStandardString(int length)
                             throws IOException
Reads a String from the font file as bytes using the Cp1252 encoding.

Parameters:
length - the length of bytes to read
Returns:
the String read
Throws:
IOException - the font file could not be read

readUnicodeString

protected String readUnicodeString(int length)
                            throws IOException
Reads a Unicode String from the font file. Each character is represented by two bytes.

Parameters:
length - the length of bytes to read. The String will have length/2 characters
Returns:
the String read
Throws:
IOException - the font file could not be read

readGlyphWidths

protected void readGlyphWidths()
                        throws DocumentException,
                               IOException
Reads the glyphs widths. The widths are extracted from the table 'hmtx'. The glyphs are normalized to 1000 units.

Throws:
DocumentException - the font is invalid
IOException - the font file could not be read

getGlyphWidth

public int getGlyphWidth(int glyph)
Gets a glyph width.

Parameters:
glyph - the glyph to get the width of
Returns:
the width of the glyph in normalized 1000 units

readCMaps

void readCMaps()
         throws DocumentException,
                IOException
Reads the several maps from the table 'cmap'. The maps of interest are 1.0 for symbolic fonts and 3.1 for all others. A symbolic font is defined as having the map 3.0.

Throws:
DocumentException - the font is invalid
IOException - the font file could not be read

readFormat0

HashMap readFormat0()
              throws IOException
The information in the maps of the table 'cmap' is coded in several formats. Format 0 is the Apple standard character to glyph index mapping table.

Returns:
a HashMap representing this map
Throws:
IOException - the font file could not be read

readFormat4

HashMap readFormat4()
              throws IOException
The information in the maps of the table 'cmap' is coded in several formats. Format 4 is the Microsoft standard character to glyph index mapping table.

Returns:
a HashMap representing this map
Throws:
IOException - the font file could not be read

readFormat6

HashMap readFormat6()
              throws IOException
The information in the maps of the table 'cmap' is coded in several formats. Format 6 is a trimmed table mapping. It is similar to format 0 but can have less than 256 entries.

Returns:
a HashMap representing this map
Throws:
IOException - the font file could not be read

readKerning

void readKerning()
           throws IOException
Reads the kerning information from the 'kern' table.

Throws:
IOException - the font file could not be read

getKerning

public int getKerning(char char1,
                      char char2)
Gets the kerning between two Unicode chars.

Specified by:
getKerning in class BaseFont
Parameters:
char1 - the first char
char2 - the second char
Returns:
the kerning to be applied

getRawWidth

int getRawWidth(int c,
                String name)
Gets the width from the font according to the unicode char c. If the name is null it's a symbolic font.

Specified by:
getRawWidth in class BaseFont
Parameters:
c - the unicode char
name - the glyph name
Returns:
the width of the char

getFontDescriptor

protected PdfDictionary getFontDescriptor(PdfIndirectReference fontStream,
                                          String subsetPrefix)
                                   throws DocumentException
Generates the font descriptor for this font.

Parameters:
subsetPrefix - the subset prefix
fontStream - the indirect reference to a PdfStream containing the font or null
Returns:
the PdfDictionary containing the font descriptor or null
Throws:
DocumentException - if there is an error

getFontBaseType

protected PdfDictionary getFontBaseType(PdfIndirectReference fontDescriptor,
                                        String subsetPrefix,
                                        int firstChar,
                                        int lastChar,
                                        byte[] shortTag)
                                 throws DocumentException
Generates the font dictionary for this font.

Parameters:
subsetPrefix - the subset prefx
firstChar - the first valid character
lastChar - the last valid character
shortTag - a 256 bytes long byte array where each unused byte is represented by 0
fontDescriptor - the indirect reference to a PdfDictionary containing the font descriptor or null
Returns:
the PdfDictionary containing the font dictionary
Throws:
DocumentException - if there is an error

getFullFont

private byte[] getFullFont()
                    throws IOException
Throws:
IOException

writeFont

void writeFont(PdfWriter writer,
               PdfIndirectReference ref,
               Object[] params)
         throws DocumentException,
                IOException
Outputs to the writer the font dictionaries and streams.

Specified by:
writeFont in class BaseFont
Parameters:
writer - the writer for this document
ref - the font indirect reference
params - several parameters that depend on the font type
Throws:
IOException - on error
DocumentException - error in generating the object

getFontDescriptor

public float getFontDescriptor(int key,
                               float fontSize)
Gets the font parameter identified by key. Valid values for key are ASCENT, CAPHEIGHT, DESCENT and ITALICANGLE.

Specified by:
getFontDescriptor in class BaseFont
Parameters:
key - the parameter to be extracted
fontSize - the font size in points
Returns:
the parameter in points

getMetricsTT

public int[] getMetricsTT(int c)
Gets the glyph index and metrics for a character.

Parameters:
c - the character
Returns:
an int array with {glyph index, width}

getPostscriptFontName

public String getPostscriptFontName()
Gets the postscript font name.

Specified by:
getPostscriptFontName in class BaseFont
Returns:
the postscript font name

getCodePagesSupported

public String[] getCodePagesSupported()
Gets the code pages supported by the font.

Overrides:
getCodePagesSupported in class BaseFont
Returns:
the code pages supported by the font

getFullFontName

public String[][] getFullFontName()
Gets the full name of the font. If it is a True Type font each array element will have {Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
For the other fonts the array has a single element with {"", "", "", font name}.

Specified by:
getFullFontName in class BaseFont
Returns:
the full name of the font

getFamilyFontName

public String[][] getFamilyFontName()
Gets the family name of the font. If it is a True Type font each array element will have {Platform ID, Platform Encoding ID, Language ID, font name}. The interpretation of this values can be found in the Open Type specification, chapter 2, in the 'name' table.
For the other fonts the array has a single element with {"", "", "", font name}.

Specified by:
getFamilyFontName in class BaseFont
Returns:
the family name of the font

hasKernPairs

public boolean hasKernPairs()
Checks if the font has any kerning pairs.

Specified by:
hasKernPairs in class BaseFont
Returns:
true if the font has any kerning pairs