Class PDFont

    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      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 org.apache.fontbox.afm.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.
      protected org.apache.fontbox.cmap.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
    • Field Detail

      • DEFAULT_FONT_MATRIX

        protected static final Matrix DEFAULT_FONT_MATRIX
    • Constructor Detail

      • PDFont

        protected PDFont​(COSDictionary fontDictionary)
                  throws java.io.IOException
        Constructor.
        Parameters:
        fontDictionary - Font dictionary.
        Throws:
        java.io.IOException
    • Method Detail

      • getStandard14AFM

        protected final org.apache.fontbox.afm.FontMetrics getStandard14AFM()
        Returns the AFM if this is a Standard 14 font.
      • setFontDescriptor

        protected final void setFontDescriptor​(PDFontDescriptor fontDescriptor)
        Sets the font descriptor when embedding a font.
      • readCMap

        protected final org.apache.fontbox.cmap.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 interface COSObjectable
        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 interface PDFontLike
        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 interface PDFontLike
        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 interface PDFontLike
        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 code
        customGlyphList - 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 interface PDFontLike
      • 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 class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object