public abstract class PDFont extends java.lang.Object implements COSObjectable, PDFontLike
Modifier and Type | Field and Description |
---|---|
private FontMetrics |
afmStandard14
AFM for standard 14 fonts
|
private 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 |
Modifier | Constructor and Description |
---|---|
(package private) |
PDFont()
Constructor for embedding.
|
protected |
PDFont(COSDictionary fontDictionary)
Constructor.
|
(package private) |
PDFont(java.lang.String baseFont)
Constructor for Standard 14.
|
Modifier and Type | Method and 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.
|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
getBoundingBox, getHeight, getName, getWidthFromFont, hasExplicitWidth, isDamaged, isEmbedded
private static final org.apache.commons.logging.Log LOG
protected static final Matrix DEFAULT_FONT_MATRIX
protected final COSDictionary dict
private final CMap toUnicodeCMap
private final FontMetrics afmStandard14
private PDFontDescriptor fontDescriptor
private java.util.List<java.lang.Float> widths
private float avgFontWidth
private float fontWidthOfSpace
private final java.util.Map<java.lang.Integer,java.lang.Float> codeToWidthMap
PDFont()
PDFont(java.lang.String baseFont)
protected PDFont(COSDictionary fontDictionary) throws java.io.IOException
fontDictionary
- Font dictionary.java.io.IOException
private PDFontDescriptor loadFontDescriptor()
private CMap loadUnicodeCmap()
protected final FontMetrics getStandard14AFM()
public PDFontDescriptor getFontDescriptor()
PDFontLike
getFontDescriptor
in interface PDFontLike
protected final void setFontDescriptor(PDFontDescriptor fontDescriptor)
protected final CMap readCMap(COSBase base) throws java.io.IOException
base
- COSName or COSStreamjava.io.IOException
public COSDictionary getCOSObject()
COSObjectable
getCOSObject
in interface COSObjectable
public Vector getPositionVector(int code)
PDFontLike
getPositionVector
in interface PDFontLike
code
- character codepublic Vector getDisplacement(int code) throws java.io.IOException
code
- character codejava.io.IOException
public float getWidth(int code) throws java.io.IOException
PDFontLike
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.
getWidth
in interface PDFontLike
code
- character codejava.io.IOException
protected abstract float getStandard14Width(int code)
code
- character codepublic final byte[] encode(java.lang.String text) throws java.io.IOException
text
- Any Unicode text.java.io.IOException
- If the text could not be encoded.java.lang.IllegalArgumentException
- if a character isn't supported by the font.protected abstract byte[] encode(int unicode) throws java.io.IOException
This method is called when embedding text in PDFs and when filling in fields.
unicode
- Unicode code point.java.io.IOException
- If the text could not be encoded.java.lang.IllegalArgumentException
- if a character isn't supported by the font.public float getStringWidth(java.lang.String text) throws java.io.IOException
text
- The text to get the width of.java.io.IOException
- If there is an error getting the width information.java.lang.IllegalArgumentException
- if a character isn't supported by the font.public float getAverageFontWidth()
getAverageFontWidth
in interface PDFontLike
public abstract int readCode(java.io.InputStream in) throws java.io.IOException
in
- string streamjava.io.IOException
- if the CMap or stream cannot be readpublic java.lang.String toUnicode(int code, GlyphList customGlyphList) throws java.io.IOException
code
- character codecustomGlyphList
- a custom glyph list to use instead of the Adobe Glyph Listjava.io.IOException
public java.lang.String toUnicode(int code) throws java.io.IOException
code
- character codejava.io.IOException
public java.lang.String getType()
public java.lang.String getSubType()
protected final java.util.List<java.lang.Float> getWidths()
public Matrix getFontMatrix()
PDFontLike
getFontMatrix
in interface PDFontLike
public float getSpaceWidth()
public abstract boolean isVertical()
public boolean isStandard14()
public abstract void addToSubset(int codePoint)
codePoint
- Unicode code pointpublic abstract void subset() throws java.io.IOException
java.io.IOException
- if the subset could not be writtenpublic abstract boolean willBeSubset()
public boolean equals(java.lang.Object other)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object