org.apache.pdfbox.pdmodel.font

## Class PDType0Font

- java.lang.Object
- - org.apache.pdfbox.pdmodel.font.PDFont
  - - org.apache.pdfbox.pdmodel.font.PDType0Font

All Implemented Interfaces:
  COSObjectable, PDFontLike, PDVectorFont

    public class PDType0Font
    extends PDFont
    implements PDVectorFont

A Composite (Type 0) font.

Author:
  Ben Litchfield

### Field Summary

### Fields inherited from class org.apache.pdfbox.pdmodel.font.PDFont

`DEFAULT_FONT_MATRIX, dict`

### Constructor Summary

Constructors
Constructor and Description
`PDType0Font(COSDictionary fontDictionary)` Constructor for reading a Type0 font from a PDF file.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`void` `addToSubset(int codePoint)` Adds the given Unicode point to the subset.
`int` `codeToCID(int code)` Returns the CID for the given character code.
`int` `codeToGID(int code)` Returns the GID for the given character code.
`protected byte[]` `encode(int unicode)` Encodes the given Unicode code point for use in a PDF content stream.
`float` `getAverageFontWidth()` This will get the average font width for all characters.
`String` `getBaseFont()` Returns the PostScript name of the font.
`org.apache.fontbox.util.BoundingBox` `getBoundingBox()` Returns the font's bounding box.
`org.apache.fontbox.cmap.CMap` `getCMap()` Returns the font's CMap.
`org.apache.fontbox.cmap.CMap` `getCMapUCS2()` Returns the font's UCS2 CMap, only present this font uses a predefined CMap.
`PDCIDFont` `getDescendantFont()` Returns the descendant font.
`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.
`float` `getHeight(int code)` Returns the height of the given character, in glyph space.
`String` `getName()` Returns the name of this font, either the PostScript "BaseName" or the Type 3 "Name".
`GeneralPath` `getPath(int code)` Returns the glyph path for the given character code in a PDF.
`Vector` `getPositionVector(int code)` Returns the position vector (v), in text space, for the given character.
`protected float` `getStandard14Width(int code)` Returns the glyph width from the AFM if this is a Standard 14 font.
`float` `getWidth(int code)` Returns the advance width of the given character, in glyph space.
`float` `getWidthFromFont(int code)` Returns the width of a glyph in the embedded font file.
`boolean` `hasExplicitWidth(int code)` Returns true if the Font dictionary specifies an explicit width for the given glyph.
`boolean` `hasGlyph(int code)` Returns true if this font contains a glyph for the given character code in a PDF.
`boolean` `isDamaged()` Returns true if the embedded font file is damaged.
`boolean` `isEmbedded()` Returns true if the font file is embedded in the PDF.
`boolean` `isStandard14()` Returns true if this font is one of the "Standard 14" fonts and receives special handling.
`boolean` `isVertical()` Returns true if the font uses vertical writing mode.
`static PDType0Font` `load(PDDocument doc, File file)` Loads a TTF to be embedded and subset into a document as a Type 0 font.
`static PDType0Font` `load(PDDocument doc, InputStream input)` Loads a TTF to be embedded and subset into a document as a Type 0 font.
`static PDType0Font` `load(PDDocument doc, InputStream input, boolean embedSubset)` Loads a TTF to be embedded into a document as a Type 0 font.
`static PDType0Font` `load(PDDocument doc, org.apache.fontbox.ttf.TrueTypeFont ttf, boolean embedSubset)` Loads a TTF to be embedded into a document as a Type 0 font.
`static PDType0Font` `loadVertical(PDDocument doc, File file)` Loads a TTF to be embedded into a document as a vertical Type 0 font.
`static PDType0Font` `loadVertical(PDDocument doc, InputStream input)` Loads a TTF to be embedded into a document as a vertical Type 0 font.
`static PDType0Font` `loadVertical(PDDocument doc, InputStream input, boolean embedSubset)` Loads a TTF to be embedded into a document as a vertical Type 0 font.
`static PDType0Font` `loadVertical(PDDocument doc, org.apache.fontbox.ttf.TrueTypeFont ttf, boolean embedSubset)` Loads a TTF to be embedded into a document as a vertical Type 0 font.
`int` `readCode(InputStream in)` Reads a character code from a content stream string.
`void` `subset()` Replaces this font with a subset containing only the given Unicode characters.
`String` `toString()`
`String` `toUnicode(int code)` Returns the Unicode character sequence which corresponds to the given character code.
`boolean` `willBeSubset()` Returns true if this font will be subset when embedded.

### Methods inherited from class org.apache.pdfbox.pdmodel.font.PDFont

`encode, equals, getCOSObject, getSpaceWidth, getStandard14AFM, getStringWidth, getSubType, getToUnicodeCMap, getType, getWidths, hashCode, readCMap, setFontDescriptor, toUnicode`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### PDType0Font

    public PDType0Font(COSDictionary fontDictionary)
                throws IOException

Constructor for reading a Type0 font from a PDF file.

Parameters:
  `fontDictionary` - The font dictionary according to the PDF specification.
Throws:
  `IOException` - if the descendant font is missing.

### Method Detail

#### load

    public static PDType0Font load(PDDocument doc,
                                   File file)
                            throws IOException

Loads a TTF to be embedded and subset into a document as a Type 0 font. If you are loading a font for AcroForm, then use the 3-parameter constructor instead.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `file` - A TrueType font.
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font file.

#### load

    public static PDType0Font load(PDDocument doc,
                                   InputStream input)
                            throws IOException

Loads a TTF to be embedded and subset into a document as a Type 0 font. If you are loading a font for AcroForm, then use the 3-parameter constructor instead.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `input` - An input stream of a TrueType font. It will be closed before returning.
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font stream.

#### load

    public static PDType0Font load(PDDocument doc,
                                   InputStream input,
                                   boolean embedSubset)
                            throws IOException

Loads a TTF to be embedded into a document as a Type 0 font.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `input` - An input stream of a TrueType font. It will be closed before returning.
  `embedSubset` - True if the font will be subset before embedding. Set this to false when creating a font for AcroForm.
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font stream.

#### load

    public static PDType0Font load(PDDocument doc,
                                   org.apache.fontbox.ttf.TrueTypeFont ttf,
                                   boolean embedSubset)
                            throws IOException

Loads a TTF to be embedded into a document as a Type 0 font.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `ttf` - A TrueType font. Passing an OpenTypeFont font object is possible, but not recommended (see exceptions).
  `embedSubset` - True if the font will be subset before embedding. Set this to false when creating a font for AcroForm.
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font stream.
  `UnsupportedOperationException` - if embedSubset is true for an OTF font
  `IllegalStateException` - if an OTF font is used but GID != CID

#### loadVertical

    public static PDType0Font loadVertical(PDDocument doc,
                                           File file)
                                    throws IOException

Loads a TTF to be embedded into a document as a vertical Type 0 font.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `file` - A TrueType font.
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font file.

#### loadVertical

    public static PDType0Font loadVertical(PDDocument doc,
                                           InputStream input)
                                    throws IOException

Loads a TTF to be embedded into a document as a vertical Type 0 font.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `input` - A TrueType font.
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font stream.

#### loadVertical

    public static PDType0Font loadVertical(PDDocument doc,
                                           InputStream input,
                                           boolean embedSubset)
                                    throws IOException

Loads a TTF to be embedded into a document as a vertical Type 0 font.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `input` - A TrueType font.
  `embedSubset` - True if the font will be subset before embedding
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font stream.

#### loadVertical

    public static PDType0Font loadVertical(PDDocument doc,
                                           org.apache.fontbox.ttf.TrueTypeFont ttf,
                                           boolean embedSubset)
                                    throws IOException

Loads a TTF to be embedded into a document as a vertical Type 0 font.

Parameters:
  `doc` - The PDF document that will hold the embedded font.
  `ttf` - A TrueType font. Passing an OpenTypeFont font object is possible, but not recommended (see exceptions).
  `embedSubset` - True if the font will be subset before embedding
Returns:
  A Type0 font with a CIDFontType2 descendant.
Throws:
  `IOException` - If there is an error reading the font stream.
  `UnsupportedOperationException` - if embedSubset is true for an OTF font
  `IllegalStateException` - if an OTF font is used but GID != CID

#### addToSubset

    public void addToSubset(int codePoint)

Description copied from class: `PDFont`
Adds the given Unicode point to the subset.

Specified by:
  `addToSubset` in class `PDFont`
Parameters:
  `codePoint` - Unicode code point

#### subset

    public void subset()
                throws IOException

Description copied from class: `PDFont`
Replaces this font with a subset containing only the given Unicode characters.

Specified by:
  `subset` in class `PDFont`
Throws:
  `IOException` - if the subset could not be written

#### willBeSubset

    public boolean willBeSubset()

Description copied from class: `PDFont`
Returns true if this font will be subset when embedded.

Specified by:
  `willBeSubset` in class `PDFont`

#### getBaseFont

    public String getBaseFont()

Returns the PostScript name of the font.

#### getDescendantFont

    public PDCIDFont getDescendantFont()

Returns the descendant font.

#### getCMap

    public org.apache.fontbox.cmap.CMap getCMap()

Returns the font's CMap.

#### getCMapUCS2

    public org.apache.fontbox.cmap.CMap getCMapUCS2()

Returns the font's UCS2 CMap, only present this font uses a predefined CMap.

#### getFontDescriptor

    public PDFontDescriptor getFontDescriptor()

Description copied from interface: `PDFontLike`
Returns the font descriptor, may be null.

Specified by:
  `getFontDescriptor` in interface `PDFontLike`
Overrides:
  `getFontDescriptor` in class `PDFont`

#### 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 interface `PDFontLike`
Overrides:
  `getFontMatrix` in class `PDFont`

#### isVertical

    public boolean isVertical()

Description copied from class: `PDFont`
Returns true if the font uses vertical writing mode.

Specified by:
  `isVertical` in class `PDFont`

#### getHeight

    public float getHeight(int code)
                    throws IOException

Description copied from interface: `PDFontLike`
Returns the height of the given character, in glyph space. This can be expensive to calculate. Results are only approximate.

Warning: This method is deprecated in PDFBox 2.0 because there is no meaningful value which it can return. The `PDFontLike.getWidth(int)` method returns the advance width of a glyph, but there is no corresponding advance height. The logical height of a character is the same for every character in a font, so if you want that, retrieve the font bbox's height. Otherwise 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. See the cyan rectangles in the DrawPrintTextLocations.java example to see this in action.

Specified by:
  `getHeight` in interface `PDFontLike`
Parameters:
  `code` - character code
Throws:
  `IOException`

#### encode

    protected byte[] encode(int unicode)
                     throws IOException

Description copied from class: `PDFont`
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.

Specified by:
  `encode` in class `PDFont`
Parameters:
  `unicode` - Unicode code point.
Returns:
  Array of 1 to 4 PDF content stream bytes.
Throws:
  `IOException` - If the text could not be encoded.

#### hasExplicitWidth

    public boolean hasExplicitWidth(int code)
                             throws IOException

Description copied from interface: `PDFontLike`
Returns true if the Font dictionary specifies an explicit width for the given glyph. This includes Width, W but not default widths entries.

Specified by:
  `hasExplicitWidth` in interface `PDFontLike`
Parameters:
  `code` - character code
Throws:
  `IOException` - if the font could not be read

#### getAverageFontWidth

    public float getAverageFontWidth()

Description copied from class: `PDFont`
This will get the average font width for all characters.

Specified by:
  `getAverageFontWidth` in interface `PDFontLike`
Overrides:
  `getAverageFontWidth` in class `PDFont`
Returns:
  The width is in 1000 unit of text space, ie 333 or 777

#### 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 interface `PDFontLike`
Overrides:
  `getPositionVector` in class `PDFont`
Parameters:
  `code` - character code
Returns:
  position vector

#### getDisplacement

    public Vector getDisplacement(int code)
                           throws IOException

Description copied from class: `PDFont`
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.

Overrides:
  `getDisplacement` in class `PDFont`
Parameters:
  `code` - character code
Returns:
  displacement vector
Throws:
  `IOException`

#### getWidth

    public float getWidth(int code)
                   throws 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 interface `PDFontLike`
Overrides:
  `getWidth` in class `PDFont`
Parameters:
  `code` - character code
Throws:
  `IOException`

#### getStandard14Width

    protected float getStandard14Width(int code)

Description copied from class: `PDFont`
Returns the glyph width from the AFM if this is a Standard 14 font.

Specified by:
  `getStandard14Width` in class `PDFont`
Parameters:
  `code` - character code
Returns:
  width in 1/1000 text space

#### getWidthFromFont

    public float getWidthFromFont(int code)
                           throws IOException

Description copied from interface: `PDFontLike`
Returns the width of a glyph in the embedded font file.

Specified by:
  `getWidthFromFont` in interface `PDFontLike`
Parameters:
  `code` - character code
Returns:
  width in glyph space
Throws:
  `IOException` - if the font could not be read

#### isEmbedded

    public boolean isEmbedded()

Description copied from interface: `PDFontLike`
Returns true if the font file is embedded in the PDF.

Specified by:
  `isEmbedded` in interface `PDFontLike`

#### toUnicode

    public String toUnicode(int code)
                     throws IOException

Description copied from class: `PDFont`
Returns the Unicode character sequence which corresponds to the given character code.

Overrides:
  `toUnicode` in class `PDFont`
Parameters:
  `code` - character code
Returns:
  Unicode character(s)
Throws:
  `IOException`

#### getName

    public String getName()

Description copied from interface: `PDFontLike`
Returns the name of this font, either the PostScript "BaseName" or the Type 3 "Name".

Specified by:
  `getName` in interface `PDFontLike`

#### getBoundingBox

    public org.apache.fontbox.util.BoundingBox getBoundingBox()
                                                       throws IOException

Description copied from interface: `PDFontLike`
Returns the font's bounding box.

Specified by:
  `getBoundingBox` in interface `PDFontLike`
Throws:
  `IOException`

#### readCode

    public int readCode(InputStream in)
                 throws IOException

Description copied from class: `PDFont`
Reads a character code from a content stream string. Codes may be up to 4 bytes long.

Specified by:
  `readCode` in class `PDFont`
Parameters:
  `in` - string stream
Returns:
  character code
Throws:
  `IOException` - if the CMap or stream cannot be read

#### codeToCID

    public int codeToCID(int code)

Returns the CID for the given character code. If not found then CID 0 is returned.

Parameters:
  `code` - character code
Returns:
  CID

#### codeToGID

    public int codeToGID(int code)
                  throws IOException

Returns the GID for the given character code.

Parameters:
  `code` - character code
Returns:
  GID
Throws:
  `IOException`

#### isStandard14

    public boolean isStandard14()

Description copied from class: `PDFont`
Returns true if this font is one of the "Standard 14" fonts and receives special handling.

Overrides:
  `isStandard14` in class `PDFont`

#### isDamaged

    public boolean isDamaged()

Description copied from interface: `PDFontLike`
Returns true if the embedded font file is damaged.

Specified by:
  `isDamaged` in interface `PDFontLike`

#### toString

    public String toString()

Overrides:
  `toString` in class `PDFont`

#### getPath

    public GeneralPath getPath(int code)
                        throws IOException

Description copied from interface: `PDVectorFont`
Returns the glyph path for the given character code in a PDF.

Specified by:
  `getPath` in interface `PDVectorFont`
Parameters:
  `code` - character code in a PDF. Not to be confused with unicode.
Throws:
  `IOException` - if the font could not be read

#### hasGlyph

    public boolean hasGlyph(int code)
                     throws IOException

Description copied from interface: `PDVectorFont`
Returns true if this font contains a glyph for the given character code in a PDF.

Specified by:
  `hasGlyph` in interface `PDVectorFont`
Parameters:
  `code` - character code in a PDF. Not to be confused with unicode.
Throws:
  `IOException`