Package org.apache.pdfbox.pdmodel.font
Class PDFont
java.lang.Object
org.apache.pdfbox.pdmodel.font.PDFont
- All Implemented Interfaces:
COSObjectable
- Direct Known Subclasses:
PDSimpleFont
This is the base class for all PDF fonts.
- Author:
- Ben Litchfield
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected CMap
This is only used if this is a font object and it has an encoding and it is a type0 font with a cmap.protected COSDictionary
The cos dictionary for this font.protected PDMatrix
The font matrix.protected static final String
protected CMap
The CMap holding the ToUnicode mapping. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Calling this will release all cached information.static void
This will clear AFM resources that are stored statically.protected String
cmapEncoding
(int code, int length, boolean isCIDFont, CMap sourceCmap) Encode the given value using the CMap of the font.protected abstract void
Determines the encoding for the font.abstract void
drawString
(String string, int[] codePoints, Graphics g, float fontSize, AffineTransform at, float x, float y) This will draw a string on a canvas using the font.void
drawString
(String string, Graphics g, float fontSize, AffineTransform at, float x, float y) Deprecated.encode
(byte[] c, int offset, int length) This will perform the encoding of a character if needed.int
encodeToCID
(byte[] c, int offset, int length) boolean
protected FontMetric
getAFM()
This will get an AFM object if one exists.abstract float
This will get the average font width for all characters.protected float
This will attempt to get the average font width from an AFM file.The PostScript name of the font.int
getCodeFromArray
(byte[] data, int offset, int length) Used for multibyte encodings.Convert this standard java object to a COS object.protected COSBase
cache theCOSName.ENCODING
object from the font's dictionary since it is called so often.int
The code for the first char or -1 if there is none.abstract PDRectangle
This will get the fonts bounding box.This will get the font descriptor for this font.This will get or create the encoder.abstract float
getFontHeight
(byte[] c, int offset, int length) This will get the font height for a character.This will get the matrix that is used to transform glyph space to text space.abstract float
getFontWidth
(byte[] c, int offset, int length) This will get the font width for a character.float
getFontWidth
(int charCode) Determines the width of the given character.protected float
getFontWidthFromAFMFile
(int code) This will attempt to get the font width from an AFM file.int
The code for the last char or -1 if there is none.abstract float
Determines the width of the space character.protected static String
getStringFromArray
(byte[] c, int offset, int length) Map the given byte(s) to a string.float
getStringWidth
(String string) This will get the width of this string for this font.This will get the subtype of font, Type1, Type3, ...Returns the toUnicode mapping if present.getType()
This will always return "Font" for fonts.The widths of the characters.int
hashCode()
protected boolean
Determines if a font as a ToUnicode entry.boolean
Determines if the font is a symbolic font.protected boolean
Determines if the font is a type 0 font.protected boolean
Determines if the font is a type 1 font.boolean
Determines if the font is a type 3 font.protected CMap
parseCmap
(String cmapRoot, InputStream cmapStream) void
setBaseFont
(String baseFont) Set the PostScript name of the font.protected void
setEncoding
(COSBase encodingValue) Set the encoding object from the fonts dictionary.void
setFirstChar
(int firstChar) Set the first character this font supports.void
setFontDescriptor
(PDFontDescriptorDictionary fdDictionary) This will set the font descriptor.void
setFontEncoding
(Encoding enc) The will set the encoding for this font.protected void
setHasToUnicode
(boolean hasToUnicodeValue) Sets hasToUnicode to the given value.void
setLastChar
(int lastChar) Set the last character this font supports.void
Set the widths of the characters code.
-
Field Details
-
font
The cos dictionary for this font. -
fontMatrix
The font matrix. -
cmap
This is only used if this is a font object and it has an encoding and it is a type0 font with a cmap. -
toUnicodeCmap
The CMap holding the ToUnicode mapping. -
cmapObjects
-
resourceRootCMAP
- See Also:
-
-
Constructor Details
-
PDFont
public PDFont()Constructor. -
PDFont
Constructor.- Parameters:
fontDictionary
- The font dictionary according to the PDF specification.
-
-
Method Details
-
clearResources
public static void clearResources()This will clear AFM resources that are stored statically. This is usually not a problem unless you want to reclaim resources for a long running process. SPECIAL NOTE: The font calculations are currently in COSObject, which is where they will reside until PDFont is mature enough to take them over. PDFont is the appropriate place for them and not in COSObject but we need font calculations for text extraction. THIS METHOD WILL BE MOVED OR REMOVED TO ANOTHER LOCATION IN A FUTURE VERSION OF PDFBOX. -
getFontDescriptor
This will get the font descriptor for this font.- Returns:
- The font descriptor for this font.
-
setFontDescriptor
This will set the font descriptor.- Parameters:
fdDictionary
- The font descriptor.
-
determineEncoding
protected abstract void determineEncoding()Determines the encoding for the font. This method as to be overwritten, as there are different possibilities to define a mapping. -
getCOSObject
Convert this standard java object to a COS object.- Specified by:
getCOSObject
in interfaceCOSObjectable
- Returns:
- The cos object that matches this Java object.
-
getFontWidth
This will get the font width for a character.- Parameters:
c
- The character code to get the width for.offset
- The offset into the array.length
- The length of the data.- Returns:
- The width is in 1000 unit of text space, ie 333 or 777
- Throws:
IOException
- If an error occurs while parsing.
-
getFontHeight
This will get the font height for a character.- Parameters:
c
- The character code to get the height for.offset
- The offset into the array.length
- The length of the data.- Returns:
- The height is in 1000 unit of text space, ie 333 or 777
- Throws:
IOException
- If an error occurs while parsing.
-
getStringWidth
This will get the width of this string for this font.- Parameters:
string
- The string to get the width of.- Returns:
- The width of the string in 1000 units of text space, ie 333 567...
- Throws:
IOException
- If there is an error getting the width information.
-
getAverageFontWidth
This will get the average font width for all characters.- Returns:
- The width is in 1000 unit of text space, ie 333 or 777
- Throws:
IOException
- If an error occurs while parsing.
-
drawString
public void drawString(String string, Graphics g, float fontSize, AffineTransform at, float x, float y) throws IOException Deprecated.This will draw a string on a canvas using the font.- Parameters:
string
- The string to draw.g
- The graphics to draw onto.fontSize
- The size of the font to draw.at
- The transformation matrix with all information for scaling and shearing of the font.x
- The x coordinate to draw at.y
- The y coordinate to draw at.- Throws:
IOException
- If there is an error drawing the specific string.
-
drawString
public abstract void drawString(String string, int[] codePoints, Graphics g, float fontSize, AffineTransform at, float x, float y) throws IOException This will draw a string on a canvas using the font.- Parameters:
string
- The string to draw.codePoints
- The codePoints of the given string.g
- The graphics to draw onto.fontSize
- The size of the font to draw.at
- The transformation matrix with all information for scaling and shearing of the font.x
- The x coordinate to draw at.y
- The y coordinate to draw at.- Throws:
IOException
- If there is an error drawing the specific string.
-
getCodeFromArray
public int getCodeFromArray(byte[] data, int offset, int length) Used for multibyte encodings.- Parameters:
data
- The array of data.offset
- The offset into the array.length
- The number of bytes to use.- Returns:
- The int value of data from the array.
-
getFontWidthFromAFMFile
This will attempt to get the font width from an AFM file.- Parameters:
code
- The character code we are trying to get.- Returns:
- The font width from the AFM file.
- Throws:
IOException
- if we cannot find the width.
-
getAverageFontWidthFromAFMFile
This will attempt to get the average font width from an AFM file.- Returns:
- The average font width from the AFM file.
- Throws:
IOException
- if we cannot find the width.
-
getAFM
This will get an AFM object if one exists.- Returns:
- The afm object from the name.
-
getEncoding
cache theCOSName.ENCODING
object from the font's dictionary since it is called so often.Use this method instead of
font.getDictionaryObject(COSName.ENCODING);
- Returns:
- the encoding
-
setEncoding
Set the encoding object from the fonts dictionary.- Parameters:
encodingValue
- the given encoding.
-
cmapEncoding
protected String cmapEncoding(int code, int length, boolean isCIDFont, CMap sourceCmap) throws IOException Encode the given value using the CMap of the font.- Parameters:
code
- the code to encode.length
- the byte length of the given code.isCIDFont
- indicates that the used font is a CID font.- Returns:
- The value of the encoded character.
- Throws:
IOException
- if something went wrong
-
encode
This will perform the encoding of a character if needed.- Parameters:
c
- The character to encode.offset
- The offset into the array to get the datalength
- The number of bytes to read.- Returns:
- The value of the encoded character.
- Throws:
IOException
- If there is an error during the encoding.
-
encodeToCID
- Throws:
IOException
-
getStringFromArray
Map the given byte(s) to a string.- Parameters:
c
- the byte arrayoffset
- the offset of the byte(s)length
- the number of bytes, usually 1 or 2- Returns:
- the mapped string
-
parseCmap
-
setFontEncoding
The will set the encoding for this font.- Parameters:
enc
- The font encoding.
-
getFontEncoding
This will get or create the encoder.- Returns:
- The encoding to use.
-
getType
This will always return "Font" for fonts.- Returns:
- The type of object that this is.
-
getSubType
This will get the subtype of font, Type1, Type3, ...- Returns:
- The type of font that this is.
-
isType1Font
protected boolean isType1Font()Determines if the font is a type 1 font.- Returns:
- returns true if the font is a type 1 font
-
isType3Font
public boolean isType3Font()Determines if the font is a type 3 font.- Returns:
- returns true if the font is a type 3 font
-
isType0Font
protected boolean isType0Font()Determines if the font is a type 0 font.- Returns:
- returns true if the font is a type 0 font
-
isSymbolicFont
public boolean isSymbolicFont()Determines if the font is a symbolic font.- Returns:
- returns true if the font is a symbolic font
-
getBaseFont
The PostScript name of the font.- Returns:
- The postscript name of the font.
-
setBaseFont
Set the PostScript name of the font.- Parameters:
baseFont
- The postscript name for the font.
-
getFirstChar
public int getFirstChar()The code for the first char or -1 if there is none.- Returns:
- The code for the first character.
-
setFirstChar
public void setFirstChar(int firstChar) Set the first character this font supports.- Parameters:
firstChar
- The first character.
-
getLastChar
public int getLastChar()The code for the last char or -1 if there is none.- Returns:
- The code for the last character.
-
setLastChar
public void setLastChar(int lastChar) Set the last character this font supports.- Parameters:
lastChar
- The last character.
-
getWidths
The widths of the characters. This will be null for the standard 14 fonts.- Returns:
- The widths of the characters.
-
setWidths
Set the widths of the characters code.- Parameters:
widthsList
- The widths of the character codes.
-
getFontMatrix
This will get the matrix that is used to transform glyph space to text space. By default there are 1000 glyph units to 1 text space unit, but type3 fonts can use any value. Note:If this is a type3 font then it can be modified via the PDType3Font.setFontMatrix, otherwise this is a read-only property.- Returns:
- The matrix to transform from glyph space to text space.
-
getFontBoundingBox
This will get the fonts bounding box.- Returns:
- The fonts bounding box.
- Throws:
IOException
- If there is an error getting the bounding box.
-
equals
-
hashCode
public int hashCode() -
getFontWidth
public float getFontWidth(int charCode) Determines the width of the given character.- Parameters:
charCode
- the code of the given character- Returns:
- the width of the character
-
hasToUnicode
protected boolean hasToUnicode()Determines if a font as a ToUnicode entry.- Returns:
- true if the font has a ToUnicode entry
-
setHasToUnicode
protected void setHasToUnicode(boolean hasToUnicodeValue) Sets hasToUnicode to the given value.- Parameters:
hasToUnicodeValue
- the given value for hasToUnicode
-
getSpaceWidth
public abstract float getSpaceWidth()Determines the width of the space character.- Returns:
- the width of the space character
-
getToUnicodeCMap
Returns the toUnicode mapping if present.- Returns:
- the CMap representing the toUnicode mapping
-
clear
public void clear()Calling this will release all cached information.
-
drawString(String, int[], Graphics, float, AffineTransform, float, float)
instead