com.lowagie.text.pdf

Class Type1Font

class Type1Font extends BaseFont

Reads a Type1 font

Author: Paulo Soares (psoares@consiste.pt)

Field Summary
intAscender
A variable.
booleanbuiltinFont
true if this font is one of the 14 built in fonts.
intCapHeight
A variable.
StringCharacterSet
The character set of the font.
HashMapCharMetrics
Represents the section CharMetrics in the AFM file.
intDescender
A variable.
StringEncodingScheme
The font's encoding name.
StringfileName
The file in use.
StringFamilyName
The family name of the font.
StringFontName
The Postscript font name.
StringFullName
The full name of the font.
booleanIsFixedPitch
true if all the characters have the same width.
floatItalicAngle
The italic angle of the font, usually 0.0 or negative.
HashMapKernPairs
Represents the section KernPairs in the AFM file.
intllx
The llx of the FontBox.
intlly
The lly of the FontBox.
protected byte[]pfb
The PFB file if the input was made with a byte array.
static int[]PFB_TYPES
Types of records in a PFB file.
static FontsResourceAnchorresourceAnchor
intStdHW
A variable.
intStdVW
A variable.
inturx
The lurx of the FontBox.
intury
The ury of the FontBox.
intUnderlinePosition
The underline position.
intUnderlineThickness
The underline thickness.
StringWeight
The weight of the font: normal, bold, etc.
intXHeight
A variable.
Constructor Summary
Type1Font(String afmFile, String enc, boolean emb, byte[] ttfAfm, byte[] pfb)
Creates a new Type1 font.
Method Summary
String[][]getFamilyFontName()
Gets the family name of the font.
PdfDictionarygetFontBaseType(PdfIndirectReference fontDescriptor, int firstChar, int lastChar, byte[] shortTag)
Generates the font dictionary for this font.
PdfDictionarygetFontDescriptor(PdfIndirectReference fontStream)
Generates the font descriptor for this font or null if it is one of the 14 built in fonts.
floatgetFontDescriptor(int key, float fontSize)
Gets the font parameter identified by key.
PdfStreamgetFontStream()
If the embedded flag is false or if the font is one of the 14 built in types, it returns null, otherwise the font is read and output in a PdfStream object.
String[][]getFullFontName()
Gets the full name of the font.
intgetKerning(char char1, char char2)
Gets the kerning between two Unicode characters.
StringgetPostscriptFontName()
Gets the postscript font name.
protected int[]getRawCharBBox(int c, String name)
intgetRawWidth(int c, String name)
Gets the width from the font according to the name or, if the name is null, meaning it is a symbolic font, the char c.
booleanhasKernPairs()
Checks if the font has any kerning pairs.
voidprocess(RandomAccessFileOrArray rf)
Reads the font metrics
booleansetKerning(char char1, char char2, int kern)
Sets the kerning between two Unicode chars.
voidsetPostscriptFontName(String name)
Sets the font name that will appear in the pdf font dictionary.
voidwriteFont(PdfWriter writer, PdfIndirectReference ref, Object[] params)
Outputs to the writer the font dictionaries and streams.

Field Detail

Ascender

private int Ascender
A variable.

builtinFont

private boolean builtinFont
true if this font is one of the 14 built in fonts.

CapHeight

private int CapHeight
A variable.

CharacterSet

private String CharacterSet
The character set of the font.

CharMetrics

private HashMap CharMetrics
Represents the section CharMetrics in the AFM file. Each value of this array contains a Object[4] with an Integer, Integer, String and int[]. This is the code, width, name and char bbox. The key is the name of the char and also an Integer with the char number.

Descender

private int Descender
A variable.

EncodingScheme

private String EncodingScheme
The font's encoding name. This encoding is 'StandardEncoding' or 'AdobeStandardEncoding' for a font that can be totally encoded according to the characters names. For all other names the font is treated as symbolic.

fileName

private String fileName
The file in use.

FamilyName

private String FamilyName
The family name of the font.

FontName

private String FontName
The Postscript font name.

FullName

private String FullName
The full name of the font.

IsFixedPitch

private boolean IsFixedPitch
true if all the characters have the same width.

ItalicAngle

private float ItalicAngle
The italic angle of the font, usually 0.0 or negative.

KernPairs

private HashMap KernPairs
Represents the section KernPairs in the AFM file. The key is the name of the first character and the value is a Object[] with 2 elements for each kern pair. Position 0 is the name of the second character and position 1 is the kerning distance. This is repeated for all the pairs.

llx

private int llx
The llx of the FontBox.

lly

private int lly
The lly of the FontBox.

pfb

protected byte[] pfb
The PFB file if the input was made with a byte array.

PFB_TYPES

private static final int[] PFB_TYPES
Types of records in a PFB file. ASCII is 1 and BINARY is 2. They have to appear in the PFB file in this sequence.

resourceAnchor

private static FontsResourceAnchor resourceAnchor

StdHW

private int StdHW
A variable.

StdVW

private int StdVW
A variable.

urx

private int urx
The lurx of the FontBox.

ury

private int ury
The ury of the FontBox.

UnderlinePosition

private int UnderlinePosition
The underline position.

UnderlineThickness

private int UnderlineThickness
The underline thickness.

Weight

private String Weight
The weight of the font: normal, bold, etc.

XHeight

private int XHeight
A variable.

Constructor Detail

Type1Font

Type1Font(String afmFile, String enc, boolean emb, byte[] ttfAfm, byte[] pfb)
Creates a new Type1 font.

Parameters: ttfAfm the AFM file if the input is made with a byte array pfb the PFB file if the input is made with a byte array afmFile the name of one of the 14 built-in fonts or the location of an AFM file. The file must end in '.afm' enc the encoding to be applied to this font emb true if the font is to be embedded in the PDF

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

Method Detail

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}.

Returns: the family name of the font

getFontBaseType

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

Parameters: 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

getFontDescriptor

private PdfDictionary getFontDescriptor(PdfIndirectReference fontStream)
Generates the font descriptor for this font or null if it is one of the 14 built in fonts.

Parameters: fontStream the indirect reference to a PdfStream containing the font or null

Returns: the PdfDictionary containing the font descriptor or null

getFontDescriptor

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

Parameters: key the parameter to be extracted fontSize the font size in points

Returns: the parameter in points

getFontStream

private PdfStream getFontStream()
If the embedded flag is false or if the font is one of the 14 built in types, it returns null, otherwise the font is read and output in a PdfStream object.

Returns: the PdfStream containing the font or null

Throws: DocumentException if there is an error reading 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}.

Returns: the full name of the font

getKerning

public int getKerning(char char1, char char2)
Gets the kerning between two Unicode characters. The characters are converted to names and this names are used to find the kerning pairs in the HashMap KernPairs.

Parameters: char1 the first char char2 the second char

Returns: the kerning to be applied

getPostscriptFontName

public String getPostscriptFontName()
Gets the postscript font name.

Returns: the postscript font name

getRawCharBBox

protected int[] getRawCharBBox(int c, String name)

getRawWidth

int getRawWidth(int c, String name)
Gets the width from the font according to the name or, if the name is null, meaning it is a symbolic font, the char c.

Parameters: c the char if the font is symbolic name the glyph name

Returns: the width of the char

hasKernPairs

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

Returns: true if the font has any kerning pairs

process

public void process(RandomAccessFileOrArray rf)
Reads the font metrics

Parameters: rf the AFM file

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

setKerning

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

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)
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.

Parameters: name the new font name

writeFont

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

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