com.lowagie.text.pdf
Class TrueTypeFont

java.lang.Object
  extended by com.lowagie.text.pdf.BaseFont
      extended by com.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 static class TrueTypeFont.FontHeader
          The components of table 'head'.
protected static class TrueTypeFont.HorizontalHeader
          The components of table 'hhea'.
protected static class TrueTypeFont.WindowsMetrics
          The components of table 'OS/2'.
 
Nested classes/interfaces inherited from class com.lowagie.text.pdf.BaseFont
BaseFont.StreamFont
 
Field Summary
protected  String[][] allNameEntries
          All the names of the Names-Table
protected  int[][] bboxes
           
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.
protected  HashMap cmapExt
           
(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  IntHashtable kerning
          The map containing 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.
protected  int underlinePosition
           
protected  int underlineThickness
           
 
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, CHAR_RANGE_ARABIC, CHAR_RANGE_CYRILLIC, CHAR_RANGE_HEBREW, CHAR_RANGE_LATIN, charBBoxes, CID_NEWLINE, compressionLevel, 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_T3, 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, specialMap, STRIKETHROUGH_POSITION, STRIKETHROUGH_THICKNESS, SUBSCRIPT_OFFSET, SUBSCRIPT_SIZE, subset, subsetRanges, SUPERSCRIPT_OFFSET, SUPERSCRIPT_SIZE, SYMBOL, TIMES_BOLD, TIMES_BOLDITALIC, TIMES_ITALIC, TIMES_ROMAN, UNDERLINE_POSITION, UNDERLINE_THICKNESS, 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, boolean justNames, boolean forceRead)
          Creates a new TrueType font.
 
Method Summary
protected  void addRangeUni(HashMap longTag, boolean includeMetrics, boolean subsetp)
           
(package private)  void checkCff()
           
protected static int[] compactRanges(ArrayList ranges)
           
(package private)  void fillTables()
          Reads the tables 'head', 'hhea', 'OS/2' and 'post' filling several variables.
 String[][] getAllNameEntries()
          Gets all the entries of the Names-Table.
(package private)  String[][] getAllNames()
          Extracts all the names of the names-Table
(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, PdfIndirectReference cidset)
          Generates the font descriptor for this font.
protected  byte[] getFullFont()
           
 String[][] getFullFontName()
          Gets the full name of the font.
 PdfStream getFullFontStream()
          Returns a PdfStream object with the full font program.
protected  int getGlyphWidth(int glyph)
          Gets a glyph width.
 int getKerning(int char1, int 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.
protected  int[] getRawCharBBox(int c, String 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, boolean preload)
          Reads the font data.
private  void readBbox()
           
protected  byte[] readCffFont()
          If this font file is using the Compact Font File Format, then this method will return the raw bytes needed for the font stream.
(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 readFormat12()
           
(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.
 boolean setKerning(int char1, int char2, int kern)
          Sets the kerning between two Unicode chars.
 void setPostscriptFontName(String name)
          Sets the font name that will appear in the pdf font dictionary.
(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
addSubsetRange, charExists, convertToBytes, convertToBytes, correctArabicAdvance, createEncoding, createFont, createFont, createFont, createFont, createFont, createFont, createFont, createSubsetPrefix, enumerateTTCNames, enumerateTTCNames, getAllFontNames, getAllNameEntries, getAscent, getAscentPoint, getBaseName, getCharBBox, getCidCode, getCompressionLevel, getDescent, getDescentPoint, getDifferences, getDocumentFonts, getDocumentFonts, getEncoding, getFontType, getFullFontName, getResourceStream, getResourceStream, getUnicodeDifferences, getUnicodeDifferences, getUnicodeEquivalent, getWidth, getWidth, getWidthPoint, getWidthPoint, getWidthPointKerned, getWidths, isDirectTextToByte, isEmbedded, isFontSpecific, isForceWidthsOutput, isSubset, normalizeEncoding, setCharAdvance, setCompressionLevel, 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.


bboxes

protected int[][] bboxes

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.


cmapExt

protected HashMap cmapExt

kerning

protected IntHashtable kerning
The map containing the kerning information. It represents the content of table 'kern'. The key is an Integer where the top 16 bits are the glyph number for the first character and the lower 16 bits are the glyph number 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


allNameEntries

protected String[][] allNameEntries
All the names of the Names-Table


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.


underlinePosition

protected int underlinePosition

underlineThickness

protected int underlineThickness
Constructor Detail

TrueTypeFont

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


TrueTypeFont

TrueTypeFont(String ttFile,
             String enc,
             boolean emb,
             byte[] ttfAfm,
             boolean justNames,
             boolean forceRead)
       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
Since:
2.1.5
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

getAllNames

String[][] getAllNames()
                 throws DocumentException,
                        IOException
Extracts all the names of the names-Table

Throws:
DocumentException - on error
IOException - on error

checkCff

void checkCff()

process

void process(byte[] ttfAfm,
             boolean preload)
       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
Since:
2.1.5

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

protected 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

readBbox

private void readBbox()
               throws DocumentException,
                      IOException
Throws:
DocumentException
IOException

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

readFormat12

HashMap readFormat12()
               throws IOException
Throws:
IOException

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(int char1,
                      int 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,
                                          PdfIndirectReference cidset)
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

getFontBaseType

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

Parameters:
subsetPrefix - the subset prefix
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

getFullFont

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

compactRanges

protected static int[] compactRanges(ArrayList ranges)

addRangeUni

protected void addRangeUni(HashMap longTag,
                           boolean includeMetrics,
                           boolean subsetp)

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

readCffFont

protected byte[] readCffFont()
                      throws IOException
If this font file is using the Compact Font File Format, then this method will return the raw bytes needed for the font stream. If this method is ever made public: make sure to add a test if (cff == true).

Returns:
a byte array
Throws:
IOException
Since:
2.1.3

getFullFontStream

public PdfStream getFullFontStream()
                            throws IOException,
                                   DocumentException
Returns a PdfStream object with the full font program.

Specified by:
getFullFontStream in class BaseFont
Returns:
a PdfStream with the font program
Throws:
IOException
DocumentException
Since:
2.1.3

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

getAllNameEntries

public String[][] getAllNameEntries()
Gets all the entries of the Names-Table. If it is a True Type font each array element will have {Name ID, 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:
getAllNameEntries 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

setPostscriptFontName

public void setPostscriptFontName(String name)
Sets the font name that will appear in the pdf font dictionary. Use with care as it can easily make a font unreadable if not embedded.

Specified by:
setPostscriptFontName in class BaseFont
Parameters:
name - the new font name

setKerning

public boolean setKerning(int char1,
                          int char2,
                          int kern)
Sets the kerning between two Unicode chars.

Specified by:
setKerning in class BaseFont
Parameters:
char1 - the first char
char2 - the second char
kern - the kerning to apply in normalized 1000 units
Returns:
true if the kerning was applied, false otherwise

getRawCharBBox

protected int[] getRawCharBBox(int c,
                               String name)
Specified by:
getRawCharBBox in class BaseFont

Hosted by Hostbasket