Package org.apache.pdfbox.pdmodel.font
Class PDFont
- java.lang.Object
-
- org.apache.pdfbox.pdmodel.font.PDFont
-
- All Implemented Interfaces:
COSObjectable
,PDFontLike
- Direct Known Subclasses:
PDSimpleFont
,PDType0Font
public abstract class PDFont extends java.lang.Object implements COSObjectable, PDFontLike
This is the base class for all PDF fonts.
-
-
Field Summary
Fields Modifier and Type Field Description private FontMetrics
afmStandard14
AFM for standard 14 fontsprivate float
avgFontWidth
private java.util.Map<java.lang.Integer,java.lang.Float>
codeToWidthMap
protected static Matrix
DEFAULT_FONT_MATRIX
protected COSDictionary
dict
private PDFontDescriptor
fontDescriptor
private float
fontWidthOfSpace
private static org.apache.commons.logging.Log
LOG
private CMap
toUnicodeCMap
private java.util.List<java.lang.Float>
widths
-
Constructor Summary
Constructors Modifier Constructor Description (package private)
PDFont()
Constructor for embedding.(package private)
PDFont(java.lang.String baseFont)
Constructor for Standard 14.protected
PDFont(COSDictionary fontDictionary)
Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract void
addToSubset(int codePoint)
Adds the given Unicode point to the subset.protected abstract byte[]
encode(int unicode)
Encodes the given Unicode code point for use in a PDF content stream.byte[]
encode(java.lang.String text)
Encodes the given string for use in a PDF content stream.boolean
equals(java.lang.Object other)
float
getAverageFontWidth()
This will get the average font width for all characters.COSDictionary
getCOSObject()
Convert this standard java object to a COS object.Vector
getDisplacement(int code)
Returns the displacement vector (w0, w1) in text space, for the given character.PDFontDescriptor
getFontDescriptor()
Returns the font descriptor, may be null.Matrix
getFontMatrix()
Returns the font matrix, which represents the transformation from glyph space to text space.Vector
getPositionVector(int code)
Returns the position vector (v), in text space, for the given character.float
getSpaceWidth()
Determines the width of the space character.protected FontMetrics
getStandard14AFM()
Returns the AFM if this is a Standard 14 font.protected abstract float
getStandard14Width(int code)
Returns the glyph width from the AFM if this is a Standard 14 font.float
getStringWidth(java.lang.String text)
Returns the width of the given Unicode string.java.lang.String
getSubType()
This will get the subtype of font.java.lang.String
getType()
This will always return "Font" for fonts.float
getWidth(int code)
Returns the advance width of the given character, in glyph space.protected java.util.List<java.lang.Float>
getWidths()
The widths of the characters.int
hashCode()
boolean
isStandard14()
Returns true if this font is one of the "Standard 14" fonts and receives special handling.abstract boolean
isVertical()
Returns true if the font uses vertical writing mode.private PDFontDescriptor
loadFontDescriptor()
private CMap
loadUnicodeCmap()
protected CMap
readCMap(COSBase base)
Reads a CMap given a COS Stream or Name.abstract int
readCode(java.io.InputStream in)
Reads a character code from a content stream string.protected void
setFontDescriptor(PDFontDescriptor fontDescriptor)
Sets the font descriptor when embedding a font.abstract void
subset()
Replaces this font with a subset containing only the given Unicode characters.java.lang.String
toString()
java.lang.String
toUnicode(int code)
Returns the Unicode character sequence which corresponds to the given character code.java.lang.String
toUnicode(int code, GlyphList customGlyphList)
Returns the Unicode character sequence which corresponds to the given character code.abstract boolean
willBeSubset()
Returns true if this font will be subset when embedded.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.pdfbox.pdmodel.font.PDFontLike
getBoundingBox, getHeight, getName, getWidthFromFont, hasExplicitWidth, isDamaged, isEmbedded
-
-
-
-
Field Detail
-
LOG
private static final org.apache.commons.logging.Log LOG
-
DEFAULT_FONT_MATRIX
protected static final Matrix DEFAULT_FONT_MATRIX
-
dict
protected final COSDictionary dict
-
toUnicodeCMap
private final CMap toUnicodeCMap
-
afmStandard14
private final FontMetrics afmStandard14
AFM for standard 14 fonts
-
fontDescriptor
private PDFontDescriptor fontDescriptor
-
widths
private java.util.List<java.lang.Float> widths
-
avgFontWidth
private float avgFontWidth
-
fontWidthOfSpace
private float fontWidthOfSpace
-
codeToWidthMap
private final java.util.Map<java.lang.Integer,java.lang.Float> codeToWidthMap
-
-
Constructor Detail
-
PDFont
PDFont()
Constructor for embedding.
-
PDFont
PDFont(java.lang.String baseFont)
Constructor for Standard 14.
-
PDFont
protected PDFont(COSDictionary fontDictionary) throws java.io.IOException
Constructor.- Parameters:
fontDictionary
- Font dictionary.- Throws:
java.io.IOException
-
-
Method Detail
-
loadFontDescriptor
private PDFontDescriptor loadFontDescriptor()
-
loadUnicodeCmap
private CMap loadUnicodeCmap()
-
getStandard14AFM
protected final FontMetrics getStandard14AFM()
Returns the AFM if this is a Standard 14 font.
-
getFontDescriptor
public PDFontDescriptor getFontDescriptor()
Description copied from interface:PDFontLike
Returns the font descriptor, may be null.- Specified by:
getFontDescriptor
in interfacePDFontLike
-
setFontDescriptor
protected final void setFontDescriptor(PDFontDescriptor fontDescriptor)
Sets the font descriptor when embedding a font.
-
readCMap
protected final CMap readCMap(COSBase base) throws java.io.IOException
Reads a CMap given a COS Stream or Name. May return null if a predefined CMap does not exist.- Parameters:
base
- COSName or COSStream- Throws:
java.io.IOException
-
getCOSObject
public COSDictionary getCOSObject()
Description copied from interface:COSObjectable
Convert this standard java object to a COS object.- Specified by:
getCOSObject
in interfaceCOSObjectable
- Returns:
- The cos object that matches this Java object.
-
getPositionVector
public Vector getPositionVector(int code)
Description copied from interface:PDFontLike
Returns the position vector (v), in text space, for the given character. This represents the position of vertical origin relative to horizontal origin, for horizontal writing it will always be (0, 0). For vertical writing both x and y are set.- Specified by:
getPositionVector
in interfacePDFontLike
- Parameters:
code
- character code- Returns:
- position vector
-
getDisplacement
public Vector getDisplacement(int code) throws java.io.IOException
Returns the displacement vector (w0, w1) in text space, for the given character. For horizontal text only the x component is used, for vertical text only the y component.- Parameters:
code
- character code- Returns:
- displacement vector
- Throws:
java.io.IOException
-
getWidth
public float getWidth(int code) throws java.io.IOException
Description copied from interface:PDFontLike
Returns the advance width of the given character, in glyph space.If you want the visual bounds of the glyph then call getPath(..) on the appropriate PDFont subclass to retrieve the glyph outline as a GeneralPath instead. See the cyan rectangles in the DrawPrintTextLocations.java example to see this in action.
- Specified by:
getWidth
in interfacePDFontLike
- Parameters:
code
- character code- Throws:
java.io.IOException
-
getStandard14Width
protected abstract float getStandard14Width(int code)
Returns the glyph width from the AFM if this is a Standard 14 font.- Parameters:
code
- character code- Returns:
- width in 1/1000 text space
-
encode
public final byte[] encode(java.lang.String text) throws java.io.IOException
Encodes the given string for use in a PDF content stream.- Parameters:
text
- Any Unicode text.- Returns:
- Array of PDF content stream bytes.
- Throws:
java.io.IOException
- If the text could not be encoded.java.lang.IllegalArgumentException
- if a character isn't supported by the font.
-
encode
protected abstract byte[] encode(int unicode) throws java.io.IOException
Encodes the given Unicode code point for use in a PDF content stream. Content streams use a multi-byte encoding with 1 to 4 bytes.This method is called when embedding text in PDFs and when filling in fields.
- Parameters:
unicode
- Unicode code point.- Returns:
- Array of 1 to 4 PDF content stream bytes.
- Throws:
java.io.IOException
- If the text could not be encoded.java.lang.IllegalArgumentException
- if a character isn't supported by the font.
-
getStringWidth
public float getStringWidth(java.lang.String text) throws java.io.IOException
Returns the width of the given Unicode string.- Parameters:
text
- The text to get the width of.- Returns:
- The width of the string in 1/1000 units of text space.
- Throws:
java.io.IOException
- If there is an error getting the width information.java.lang.IllegalArgumentException
- if a character isn't supported by the font.
-
getAverageFontWidth
public float getAverageFontWidth()
This will get the average font width for all characters.- Specified by:
getAverageFontWidth
in interfacePDFontLike
- Returns:
- The width is in 1000 unit of text space, ie 333 or 777
-
readCode
public abstract int readCode(java.io.InputStream in) throws java.io.IOException
Reads a character code from a content stream string. Codes may be up to 4 bytes long.- Parameters:
in
- string stream- Returns:
- character code
- Throws:
java.io.IOException
- if the CMap or stream cannot be read
-
toUnicode
public java.lang.String toUnicode(int code, GlyphList customGlyphList) throws java.io.IOException
Returns the Unicode character sequence which corresponds to the given character code.- Parameters:
code
- character codecustomGlyphList
- a custom glyph list to use instead of the Adobe Glyph List- Returns:
- Unicode character(s)
- Throws:
java.io.IOException
-
toUnicode
public java.lang.String toUnicode(int code) throws java.io.IOException
Returns the Unicode character sequence which corresponds to the given character code.- Parameters:
code
- character code- Returns:
- Unicode character(s)
- Throws:
java.io.IOException
-
getType
public java.lang.String getType()
This will always return "Font" for fonts.- Returns:
- The type of object that this is.
-
getSubType
public java.lang.String getSubType()
This will get the subtype of font.
-
getWidths
protected final java.util.List<java.lang.Float> getWidths()
The widths of the characters. This will be null for the standard 14 fonts.- Returns:
- The widths of the characters.
-
getFontMatrix
public Matrix getFontMatrix()
Description copied from interface:PDFontLike
Returns the font matrix, which represents the transformation from glyph space to text space.- Specified by:
getFontMatrix
in interfacePDFontLike
-
getSpaceWidth
public float getSpaceWidth()
Determines the width of the space character.- Returns:
- the width of the space character
-
isVertical
public abstract boolean isVertical()
Returns true if the font uses vertical writing mode.
-
isStandard14
public boolean isStandard14()
Returns true if this font is one of the "Standard 14" fonts and receives special handling.
-
addToSubset
public abstract void addToSubset(int codePoint)
Adds the given Unicode point to the subset.- Parameters:
codePoint
- Unicode code point
-
subset
public abstract void subset() throws java.io.IOException
Replaces this font with a subset containing only the given Unicode characters.- Throws:
java.io.IOException
- if the subset could not be written
-
willBeSubset
public abstract boolean willBeSubset()
Returns true if this font will be subset when embedded.
-
equals
public boolean equals(java.lang.Object other)
- Overrides:
equals
in classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-