com.lowagie.text.pdf
Class Type3Font

java.lang.Object
  extended bycom.lowagie.text.pdf.BaseFont
      extended bycom.lowagie.text.pdf.Type3Font

public class Type3Font
extends BaseFont

A class to support Type3 fonts.


Nested Class Summary
 
Nested classes inherited from class com.lowagie.text.pdf.BaseFont
BaseFont.StreamFont
 
Field Summary
private  IntHashtable char2byte
           
private  HashMap char2glyph
           
private  boolean colorized
           
private  float llx
           
private  float lly
           
private  PageResources pageResources
           
private  float urx
           
private  float ury
           
private  IntHashtable widths3
           
private  PdfWriter writer
           
 
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, 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, subset, subsetRanges, SYMBOL, TIMES_BOLD, TIMES_BOLDITALIC, TIMES_ITALIC, TIMES_ROMAN, unicodeDifferences, widths, WINANSI, ZAPFDINGBATS
 
Constructor Summary
Type3Font(PdfWriter writer, char[] chars, boolean colorized)
          Creates a Type3 font.
 
Method Summary
 boolean charExists(char c)
          Checks if a character exists in this font.
(package private)  byte[] convertToBytes(String text)
          Converts a String to a byte array according to the font's encoding.
 PdfContentByte defineGlyph(char c, float wx, float llx, float lly, float urx, float ury)
          Defines a glyph.
 int[] getCharBBox(char c)
          Gets the smallest box enclosing the character contours.
 String[][] getFamilyFontName()
          Gets the family name of the font.
 float getFontDescriptor(int key, float fontSize)
          Gets the font parameter identified by key.
 String[][] getFullFontName()
          Gets the full name of the font.
 int getKerning(char char1, char char2)
          Gets the kerning between two Unicode chars.
 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 or the name.
 int getWidth(char char1)
          Gets the width of a char in normalized 1000 units.
 int getWidth(String text)
          Gets the width of a String in normalized 1000 units.
 boolean hasKernPairs()
          Checks if the font has any kerning pairs.
 boolean setCharAdvance(char c, int advance)
          Sets the character advance.
 boolean setKerning(char char1, char 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, correctArabicAdvance, createEncoding, createFont, createFont, createFont, createSubsetPrefix, enumerateTTCNames, enumerateTTCNames, getAllFontNames, getAscent, getAscentPoint, getBaseName, getCidCode, getCodePagesSupported, getDescent, getDescentPoint, getDifferences, getDocumentFonts, getDocumentFonts, getEncoding, getFontType, getFullFontName, getResourceStream, getResourceStream, getUnicodeDifferences, getUnicodeDifferences, getUnicodeEquivalent, getWidthPoint, getWidthPoint, getWidthPointKerned, getWidths, isDirectTextToByte, isEmbedded, isFontSpecific, isForceWidthsOutput, isSubset, normalizeEncoding, setDirectTextToByte, setForceWidthsOutput, setSubset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

char2byte

private IntHashtable char2byte

widths3

private IntHashtable widths3

char2glyph

private HashMap char2glyph

writer

private PdfWriter writer

llx

private float llx

lly

private float lly

urx

private float urx

ury

private float ury

pageResources

private PageResources pageResources

colorized

private boolean colorized
Constructor Detail

Type3Font

public Type3Font(PdfWriter writer,
                 char[] chars,
                 boolean colorized)
Creates a Type3 font. This implementation assumes that the /FontMatrix is [0.001 0 0 0.001 0 0] or a 1000-unit glyph coordinate system.

An example:

 Document document = new Document(PageSize.A4);
 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("type3.pdf"));
 document.open();
 Type3Font t3 = new Type3Font(writer, new char[]{'a', 'b'}, false);
 PdfContentByte g = t3.defineGlyph('a', 1000, 0, 0, 750, 750);
 g.rectangle(0, 0, 750, 750);
 g.fill();
 g = t3.defineGlyph('b', 1000, 0, 0, 750, 750);
 g.moveTo(0, 0);
 g.lineTo(375, 750);
 g.lineTo(750, 0);
 g.fill();
 Font f = new Font(t3, 12);
 document.add(new Paragraph("ababab", f));
 document.close();
 

Parameters:
writer - the writer
chars - an array of chars corresponding to the glyphs used
colorized - if true the font may specify color, if false no color commands are allowed and only images as masks can be used
Method Detail

defineGlyph

public PdfContentByte defineGlyph(char c,
                                  float wx,
                                  float llx,
                                  float lly,
                                  float urx,
                                  float ury)
Defines a glyph.

Parameters:
c - the character to match this glyph. It must be one of those defined in the constructor
wx - the advance this character will have
llx - the X lower left corner of the glyph bounding box. If the colorize option is true the value is ignored
lly - the Y lower left corner of the glyph bounding box. If the colorize option is true the value is ignored
urx - the X upper right corner of the glyph bounding box. If the colorize option is true the value is ignored
ury - the Y upper right corner of the glyph bounding box. If the colorize option is true the value is ignored
Returns:
a content where the glyph can be defined

getFamilyFontName

public String[][] getFamilyFontName()
Description copied from class: BaseFont
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

getFontDescriptor

public float getFontDescriptor(int key,
                               float fontSize)
Description copied from class: BaseFont
Gets the font parameter identified by key. Valid values for key are ASCENT, AWT_ASCENT, CAPHEIGHT, DESCENT, AWT_DESCENT, ITALICANGLE, BBOXLLX, BBOXLLY, BBOXURX and BBOXURY.

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

getFullFontName

public String[][] getFullFontName()
Description copied from class: BaseFont
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

getKerning

public int getKerning(char char1,
                      char char2)
Description copied from class: BaseFont
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 in normalized 1000 units

getPostscriptFontName

public String getPostscriptFontName()
Description copied from class: BaseFont
Gets the postscript font name.

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

getRawCharBBox

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

getRawWidth

int getRawWidth(int c,
                String name)
Description copied from class: BaseFont
Gets the width from the font according to the Unicode char c or the name. 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

hasKernPairs

public boolean hasKernPairs()
Description copied from class: BaseFont
Checks if the font has any kerning pairs.

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

setKerning

public boolean setKerning(char char1,
                          char char2,
                          int kern)
Description copied from class: BaseFont
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

setPostscriptFontName

public void setPostscriptFontName(String name)
Description copied from class: BaseFont
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

writeFont

void writeFont(PdfWriter writer,
               PdfIndirectReference ref,
               Object[] params)
         throws DocumentException,
                IOException
Description copied from class: BaseFont
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

convertToBytes

byte[] convertToBytes(String text)
Description copied from class: BaseFont
Converts a String to a byte array according to the font's encoding.

Overrides:
convertToBytes in class BaseFont
Parameters:
text - the String to be converted
Returns:
an array of byte representing the conversion according to the font's encoding

getWidth

public int getWidth(char char1)
Description copied from class: BaseFont
Gets the width of a char in normalized 1000 units.

Overrides:
getWidth in class BaseFont
Parameters:
char1 - the unicode char to get the width of
Returns:
the width in normalized 1000 units

getWidth

public int getWidth(String text)
Description copied from class: BaseFont
Gets the width of a String in normalized 1000 units.

Overrides:
getWidth in class BaseFont
Parameters:
text - the String to get the witdth of
Returns:
the width in normalized 1000 units

getCharBBox

public int[] getCharBBox(char c)
Description copied from class: BaseFont
Gets the smallest box enclosing the character contours. It will return null if the font has not the information or the character has no contours, as in the case of the space, for example. Characters with no contours may also return [0,0,0,0].

Overrides:
getCharBBox in class BaseFont
Parameters:
c - the character to get the contour bounding box from
Returns:
an array of four floats with the bounding box in the format [llx,lly,urx,ury] or null

charExists

public boolean charExists(char c)
Description copied from class: BaseFont
Checks if a character exists in this font.

Overrides:
charExists in class BaseFont
Parameters:
c - the character to check
Returns:
true if the character has a glyph, false otherwise

setCharAdvance

public boolean setCharAdvance(char c,
                              int advance)
Description copied from class: BaseFont
Sets the character advance.

Overrides:
setCharAdvance in class BaseFont
Parameters:
c - the character
advance - the character advance normalized to 1000 units
Returns:
true if the advance was set, false otherwise