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.
  • Field Details

    • LOG

      private static final org.apache.commons.logging.Log LOG
    • descendantFont

      private final PDCIDFont descendantFont
    • cMap

      private CMap cMap
    • cMapUCS2

      private CMap cMapUCS2
    • isCMapPredefined

      private boolean isCMapPredefined
    • isDescendantCJK

      private boolean isDescendantCJK
    • embedder

      private PDCIDFontType2Embedder embedder
    • noUnicode

      private final Set<Integer> noUnicode
    • ttf

      private TrueTypeFont ttf
  • Constructor Details

    • 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.
    • PDType0Font

      private PDType0Font(PDDocument document, TrueTypeFont ttf, boolean embedSubset, boolean closeTTF, boolean vertical) throws IOException
      Private. Creates a new PDType0Font font for embedding.
      Parameters:
      document -
      ttf -
      embedSubset -
      closeTTF - whether to close the ttf parameter after embedding. Must be true when the ttf parameter was created in the load() method, false when the ttf parameter was passed to the load() method.
      vertical -
      Throws:
      IOException
  • Method Details

    • 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, 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.
      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.
    • 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, 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.
      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.
    • 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
    • readEncoding

      private void readEncoding() throws IOException
      Reads the font's Encoding entry, which should be a CMap name/stream.
      Throws:
      IOException
    • fetchCMapUCS2

      private void fetchCMapUCS2() throws IOException
      Fetches the corresponding UCS2 CMap if the font's CMap is predefined.
      Throws:
      IOException
    • getBaseFont

      public String getBaseFont()
      Returns the PostScript name of the font.
    • getDescendantFont

      public PDCIDFont getDescendantFont()
      Returns the descendant font.
    • getCMap

      public CMap getCMap()
      Returns the font's CMap.
    • getCMapUCS2

      public 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 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