Class PDFFont

  • Direct Known Subclasses:
    OutlineFont, Type0Font, Type3Font

    public abstract class PDFFont
    extends java.lang.Object
    a Font definition for PDF files
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private java.lang.String baseFont
      the postscript name of this font
      private java.util.Map<java.lang.Character,​PDFGlyph> charCache
      a cache of glyphs indexed by character
      private PDFFontDescriptor descriptor
      the font descriptor
      private PDFFontEncoding encoding
      the font encoding (maps character ids to glyphs)
      private java.lang.String subtype
      the font SubType of this font
      private PDFCMap unicodeMap
      the CMap that maps this font to unicode values
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected PDFFont​(java.lang.String baseFont, PDFFontDescriptor descriptor)
      Create a PDFFont given the base font name and the font descriptor
    • Field Detail

      • subtype

        private java.lang.String subtype
        the font SubType of this font
      • baseFont

        private java.lang.String baseFont
        the postscript name of this font
      • encoding

        private PDFFontEncoding encoding
        the font encoding (maps character ids to glyphs)
      • unicodeMap

        private PDFCMap unicodeMap
        the CMap that maps this font to unicode values
      • charCache

        private java.util.Map<java.lang.Character,​PDFGlyph> charCache
        a cache of glyphs indexed by character
    • Constructor Detail

      • PDFFont

        protected PDFFont​(java.lang.String baseFont,
                          PDFFontDescriptor descriptor)
        Create a PDFFont given the base font name and the font descriptor
        Parameters:
        baseFont - the postscript name of this font
        descriptor - the descriptor for the font
    • Method Detail

      • getFont

        public static PDFFont getFont​(PDFObject obj,
                                      java.util.HashMap<java.lang.String,​PDFObject> resources)
                               throws java.io.IOException
        get the PDFFont corresponding to the font described in a PDFObject. The object is actually a dictionary containing the following keys:
        Type = "Font"
        Subtype = (Type1 | TrueType | Type3 | Type0 | MMType1 | CIDFontType0 | CIDFontType2)
        FirstChar = #
        LastChar = #
        Widths = array of #
        Encoding = (some name representing a dictionary in the resources | an inline dictionary)

        For Type1 and TrueType fonts, the dictionary also contains:
        BaseFont = (some name, or XXXXXX+Name as a subset of font Name)

        For Type3 font, the dictionary contains:
        FontBBox = (rectangle)
        FontMatrix = (array, typically [0.001, 0, 0, 0.001, 0, 0])
        CharProcs = (dictionary) Resources = (dictionary)

        Throws:
        java.io.IOException
      • getSubtype

        public java.lang.String getSubtype()
        Get the subtype of this font.
        Returns:
        the subtype, one of: Type0, Type1, TrueType or Type3
      • setSubtype

        public void setSubtype​(java.lang.String subtype)
        Set the font subtype
      • getBaseFont

        public java.lang.String getBaseFont()
        Get the postscript name of this font
        Returns:
        the postscript name of this font
      • setBaseFont

        public void setBaseFont​(java.lang.String baseFont)
        Set the postscript name of this font
        Parameters:
        baseFont - the postscript name of the font
      • getEncoding

        public PDFFontEncoding getEncoding()
        Get the encoding for this font
        Returns:
        the encoding which maps from this font to actual characters
      • setEncoding

        public void setEncoding​(PDFFontEncoding encoding)
        Set the encoding for this font
      • getDescriptor

        public PDFFontDescriptor getDescriptor()
        Get the descriptor for this font
        Returns:
        the font descriptor
      • setDescriptor

        public void setDescriptor​(PDFFontDescriptor descriptor)
        Set the descriptor font descriptor
      • getUnicodeMap

        public PDFCMap getUnicodeMap()
        Get the CMap which maps the characters in this font to unicode names
      • setUnicodeMap

        public void setUnicodeMap​(PDFCMap unicodeMap)
        Set the CMap which maps the characters in this font to unicode names
      • getGlyphs

        public java.util.List<PDFGlyph> getGlyphs​(java.lang.String text)
        Get the glyphs associated with a given String in this font
        Parameters:
        text - the text to translate into glyphs
      • getCachedGlyph

        public PDFGlyph getCachedGlyph​(char src,
                                       java.lang.String name)
        Get a glyph for a given character code. The glyph is returned from the cache if available, or added to the cache if not
        Parameters:
        src - the character code of this glyph
        name - the name of the glyph, or null if the name is unknown
        Returns:
        a glyph for this character
      • getGlyph

        protected abstract PDFGlyph getGlyph​(char src,
                                             java.lang.String name)
        Get the glyph for a given character code and name The preferred method of getting the glyph should be by name. If the name is null or not valid, then the character code should be used. If the both the code and the name are invalid, the undefined glyph should be returned. Note this method must *always* return a glyph.
        Parameters:
        src - the character code of this glyph
        name - the name of this glyph or null if unknown
        Returns:
        a glyph for this character
      • toString

        public java.lang.String toString()
        Turn this font into a pretty String
        Overrides:
        toString in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object o)
        Compare two fonts base on the baseFont
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public int hashCode()
        Hash a font based on its base font
        Overrides:
        hashCode in class java.lang.Object