Class CustomFont

    • Field Detail

      • DEFAULT_LINE_THICKNESS

        private static final int DEFAULT_LINE_THICKNESS
        Fallback thickness for underline and strikeout when not provided by the font.
        See Also:
        Constant Field Values
      • fontFileURI

        private java.net.URI fontFileURI
      • fontName

        private java.lang.String fontName
      • fullName

        private java.lang.String fullName
      • familyNames

        private java.util.Set<java.lang.String> familyNames
      • fontSubName

        private java.lang.String fontSubName
      • embedFileURI

        private java.net.URI embedFileURI
      • embedResourceName

        private java.lang.String embedResourceName
      • capHeight

        private int capHeight
      • xHeight

        private int xHeight
      • ascender

        private int ascender
      • descender

        private int descender
      • fontBBox

        private int[] fontBBox
      • flags

        private int flags
      • weight

        private int weight
      • stemV

        private int stemV
      • italicAngle

        private int italicAngle
      • missingWidth

        private int missingWidth
      • firstChar

        private int firstChar
      • lastChar

        private int lastChar
      • underlinePosition

        private int underlinePosition
      • underlineThickness

        private int underlineThickness
      • strikeoutPosition

        private int strikeoutPosition
      • strikeoutThickness

        private int strikeoutThickness
      • kerning

        private java.util.Map<java.lang.Integer,​java.util.Map<java.lang.Integer,​java.lang.Integer>> kerning
      • useKerning

        private boolean useKerning
      • cmap

        protected java.util.List<CMapSegment> cmap
        the character map, mapping Unicode ranges to glyph indices.
      • svgs

        protected java.util.Map<java.lang.Integer,​SVGGlyphData> svgs
      • useAdvanced

        private boolean useAdvanced
      • simulateStyle

        private boolean simulateStyle
    • Constructor Detail

      • CustomFont

        public CustomFont​(InternalResourceResolver resourceResolver)
        Parameters:
        resourceResolver - the URI resource resolver for controlling file access
    • Method Detail

      • getFontURI

        public java.net.URI getFontURI()
        Returns the URI of the font file from which these metrics were loaded.
        Specified by:
        getFontURI in interface FontMetrics
        Returns:
        the font file's URI
      • getFontName

        public java.lang.String getFontName()
        Returns the "PostScript" font name (Example: "Helvetica-BoldOblique").
        Specified by:
        getFontName in interface FontMetrics
        Returns:
        the font name
      • getEmbedFontName

        public java.lang.String getEmbedFontName()
        Returns the font name for font embedding (may include a prefix, Example: "1E28bcArialMT").
        Specified by:
        getEmbedFontName in interface FontMetrics
        Returns:
        the name for font embedding
      • getFullName

        public java.lang.String getFullName()
        Returns the font's full name (Example: "Helvetica Bold Oblique").
        Specified by:
        getFullName in interface FontMetrics
        Returns:
        the font's full name
      • getFamilyNames

        public java.util.Set<java.lang.String> getFamilyNames()
        Returns the font family names.
        Specified by:
        getFamilyNames in interface FontMetrics
        Returns:
        the font family names (a Set of Strings)
      • getStrippedFontName

        public java.lang.String getStrippedFontName()
        Returns the font family name stripped of whitespace.
        Returns:
        the stripped font family
        See Also:
        FontUtil.stripWhiteSpace(String)
      • getFontSubName

        public java.lang.String getFontSubName()
        Returns font's subfamily name.
        Returns:
        the font's subfamily name
      • getEmbedFileURI

        public java.net.URI getEmbedFileURI()
        Returns an URI representing an embeddable font file.
        Returns:
        URI to an embeddable font file or null if not available.
      • getEmbeddingMode

        public EmbeddingMode getEmbeddingMode()
        Returns the embedding mode for this font.
        Returns:
        embedding mode
      • getInputStream

        public java.io.InputStream getInputStream()
                                           throws java.io.IOException
        Returns an InputStream representing an embeddable font file.
        Returns:
        InputStream for an embeddable font file
        Throws:
        java.io.IOException - if embedFileName is not null but Source is not found
      • getEmbedResourceName

        public java.lang.String getEmbedResourceName()
        Returns the lookup name to an embeddable font file available as a resource. (todo) Remove this method, this should be done using a resource: URI.
        Returns:
        the lookup name
      • getAscender

        public int getAscender()
        Returns the ascender value of the font. (Ascent in pdf spec)
        Specified by:
        getAscender in interface FontDescriptor
        Returns:
        the ascender
      • getDescender

        public int getDescender()
        Returns the descender value of the font. (Descent in pdf spec)
        Specified by:
        getDescender in interface FontDescriptor
        Returns:
        the descender value
      • getCapHeight

        public int getCapHeight()
        Returns the capital height of the font.
        Specified by:
        getCapHeight in interface FontDescriptor
        Returns:
        the capital height
      • getAscender

        public int getAscender​(int size)
        Returns the ascent of the font described by this FontMetrics object. It returns the nominal ascent within the em box.
        Specified by:
        getAscender in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        ascent in milliponts
      • getDescender

        public int getDescender​(int size)
        Returns the descent of the font described by this FontMetrics object.
        Specified by:
        getDescender in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        descent in milliponts
      • getCapHeight

        public int getCapHeight​(int size)
        Returns the size of a capital letter measured from the font's baseline.
        Specified by:
        getCapHeight in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        height of capital characters
      • getXHeight

        public int getXHeight​(int size)
        Determines the typical font height of this FontMetrics object
        Specified by:
        getXHeight in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        font height in millipoints
      • getFontBBox

        public int[] getFontBBox()
        Returns the font's bounding box.
        Specified by:
        getFontBBox in interface FontDescriptor
        Returns:
        the bounding box
      • getFlags

        public int getFlags()
        Returns the flags for the font. (See pdf spec)
        Specified by:
        getFlags in interface FontDescriptor
        Returns:
        the flags
      • isSymbolicFont

        public boolean isSymbolicFont()
        Indicates whether the font is a symbolic font.
        Specified by:
        isSymbolicFont in interface FontDescriptor
        Returns:
        true if the font is a symbolic font (i.e. Symbol or ZapfDingbats)
      • getWeight

        public int getWeight()
        Returns the font weight (100, 200...800, 900). This value may be different from the one that was actually used to register the font.
        Returns:
        the font weight (or 0 if the font weight is unknown)
      • getStemV

        public int getStemV()
        Returns the vertical stem width for the font.
        Specified by:
        getStemV in interface FontDescriptor
        Returns:
        the vertical stem width
      • getItalicAngle

        public int getItalicAngle()
        Returns the italic angle for the font.
        Specified by:
        getItalicAngle in interface FontDescriptor
        Returns:
        the italic angle
      • getMissingWidth

        public int getMissingWidth()
        Returns the width to be used when no width is available.
        Returns:
        a character width
      • getFontType

        public FontType getFontType()
        Returns the type of the font.
        Specified by:
        getFontType in interface FontMetrics
        Returns:
        the font type
      • getFirstChar

        public int getFirstChar()
        Returns the index of the first character defined in this font.
        Returns:
        the index of the first character
      • getLastChar

        public int getLastChar()
        Returns the index of the last character defined in this font.
        Returns:
        the index of the last character
      • isKerningEnabled

        public boolean isKerningEnabled()
        Used to determine if kerning is enabled.
        Returns:
        True if kerning is enabled.
      • hasKerningInfo

        public final boolean hasKerningInfo()
        Indicates if the font has kerning information.
        Specified by:
        hasKerningInfo in interface FontMetrics
        Returns:
        true if kerning is available.
      • getKerningInfo

        public final java.util.Map<java.lang.Integer,​java.util.Map<java.lang.Integer,​java.lang.Integer>> getKerningInfo()
        Returns the kerning map for the font.
        Specified by:
        getKerningInfo in interface FontMetrics
        Returns:
        the kerning map
      • isAdvancedEnabled

        public boolean isAdvancedEnabled()
        Used to determine if advanced typographic features are enabled. By default, this is false, but may be overridden by subclasses.
        Returns:
        true if enabled.
      • setFontURI

        public void setFontURI​(java.net.URI uri)
        Sets the URI from which this font is or will be loaded.
        Specified by:
        setFontURI in interface MutableFont
        Parameters:
        uri - URI from which font is or will be loaded
      • setFontName

        public void setFontName​(java.lang.String name)
        Sets the "PostScript" font name (Example: "Helvetica-BoldOblique").
        Specified by:
        setFontName in interface MutableFont
        Parameters:
        name - font name
      • setFullName

        public void setFullName​(java.lang.String name)
        Sets the font's full name (usually the one that the operating system displays). Example: "Helvetica Bold Oblique".
        Specified by:
        setFullName in interface MutableFont
        Parameters:
        name - font' full name
      • setFamilyNames

        public void setFamilyNames​(java.util.Set<java.lang.String> names)
        Sets the font's family names (Example: "Helvetica").
        Specified by:
        setFamilyNames in interface MutableFont
        Parameters:
        names - the font's family names (a Set of Strings)
      • setFontSubFamilyName

        public void setFontSubFamilyName​(java.lang.String subFamilyName)
        Sets the font's subfamily name.
        Parameters:
        subFamilyName - the subfamily name of the font
      • setEmbedURI

        public void setEmbedURI​(java.net.URI path)
        Sets the URI to the embeddable font.
        Specified by:
        setEmbedURI in interface MutableFont
        Parameters:
        path - URI to the font
      • setEmbedResourceName

        public void setEmbedResourceName​(java.lang.String name)
        Sets the resource name of the embeddable font file.
        Specified by:
        setEmbedResourceName in interface MutableFont
        Parameters:
        name - resource name
      • setEmbeddingMode

        public void setEmbeddingMode​(EmbeddingMode embeddingMode)
        Sets the embedding mode.
        Specified by:
        setEmbeddingMode in interface MutableFont
        Parameters:
        embeddingMode - the embedding mode
      • setCapHeight

        public void setCapHeight​(int capHeight)
        Sets the capital height value.
        Specified by:
        setCapHeight in interface MutableFont
        Parameters:
        capHeight - capital height
      • setXHeight

        public void setXHeight​(int xHeight)
        Returns the XHeight value of the font.
        Parameters:
        xHeight - the XHeight value
      • setAscender

        public void setAscender​(int ascender)
        Sets the ascent value.
        Specified by:
        setAscender in interface MutableFont
        Parameters:
        ascender - ascent height
      • setDescender

        public void setDescender​(int descender)
        Sets the descent value.
        Specified by:
        setDescender in interface MutableFont
        Parameters:
        descender - descent value
      • setFontBBox

        public void setFontBBox​(int[] bbox)
        Sets the font's bounding box
        Specified by:
        setFontBBox in interface MutableFont
        Parameters:
        bbox - bounding box
      • setFlags

        public void setFlags​(int flags)
        Sets the font's flags
        Specified by:
        setFlags in interface MutableFont
        Parameters:
        flags - flags
      • setWeight

        public void setWeight​(int weight)
        Sets the font weight. Valid values are 100, 200...800, 900.
        Parameters:
        weight - the font weight
      • setStemV

        public void setStemV​(int stemV)
        Sets the font's StemV value.
        Specified by:
        setStemV in interface MutableFont
        Parameters:
        stemV - StemV
      • setItalicAngle

        public void setItalicAngle​(int italicAngle)
        Sets the font's italic angle.
        Specified by:
        setItalicAngle in interface MutableFont
        Parameters:
        italicAngle - italic angle
      • setMissingWidth

        public void setMissingWidth​(int width)
        Sets the font's default width
        Specified by:
        setMissingWidth in interface MutableFont
        Parameters:
        width - default width
      • setFontType

        public void setFontType​(FontType fontType)
        Sets the font type.
        Specified by:
        setFontType in interface MutableFont
        Parameters:
        fontType - font type
      • setFirstChar

        public void setFirstChar​(int index)
        Sets the index of the first character in the character table.
        Specified by:
        setFirstChar in interface MutableFont
        Parameters:
        index - index of first character
      • setLastChar

        public void setLastChar​(int index)
        Sets the index of the last character in the character table.
        Specified by:
        setLastChar in interface MutableFont
        Parameters:
        index - index of the last character
      • setKerningEnabled

        public void setKerningEnabled​(boolean enabled)
        Enables/disabled kerning.
        Specified by:
        setKerningEnabled in interface MutableFont
        Parameters:
        enabled - True if kerning should be enabled if available
      • setAdvancedEnabled

        public void setAdvancedEnabled​(boolean enabled)
        Enables/disabled advanced typographic features.
        Specified by:
        setAdvancedEnabled in interface MutableFont
        Parameters:
        enabled - true if advanced typographic features should be enabled if available
      • setSimulateStyle

        public void setSimulateStyle​(boolean enabled)
      • getSimulateStyle

        public boolean getSimulateStyle()
      • putKerningEntry

        public void putKerningEntry​(java.lang.Integer key,
                                    java.util.Map<java.lang.Integer,​java.lang.Integer> value)
        Adds an entry to the kerning table.
        Specified by:
        putKerningEntry in interface MutableFont
        Parameters:
        key - Kerning key
        value - Kerning value
      • replaceKerningMap

        public void replaceKerningMap​(java.util.Map<java.lang.Integer,​java.util.Map<java.lang.Integer,​java.lang.Integer>> kerningMap)
        Replaces the existing kerning map with a new one.
        Parameters:
        kerningMap - the kerning map (the integers are character codes)
      • setCMap

        public void setCMap​(CMapSegment[] cmap)
        Sets the character map for this font. It maps all available Unicode characters to their glyph indices inside the font.
        Parameters:
        cmap - the character map
      • getCMap

        public CMapSegment[] getCMap()
        Returns the character map for this font. It maps all available Unicode characters to their glyph indices inside the font.
        Returns:
        the character map
      • getUnderlinePosition

        public int getUnderlinePosition​(int size)
        Description copied from interface: FontMetrics
        Returns the distance from the baseline to the center of the underline (negative value indicates below baseline).
        Specified by:
        getUnderlinePosition in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        the position in 1/1000ths of the font size
      • setUnderlinePosition

        public void setUnderlinePosition​(int underlinePosition)
      • getUnderlineThickness

        public int getUnderlineThickness​(int size)
        Description copied from interface: FontMetrics
        Returns the thickness of the underline.
        Specified by:
        getUnderlineThickness in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        the thickness in 1/1000ths of the font size
      • setUnderlineThickness

        public void setUnderlineThickness​(int underlineThickness)
      • getStrikeoutPosition

        public int getStrikeoutPosition​(int size)
        Description copied from interface: FontMetrics
        Returns the distance from the baseline to the center of the strikeout line (negative value indicates below baseline).
        Specified by:
        getStrikeoutPosition in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        the position in 1/1000ths of the font size
      • setStrikeoutPosition

        public void setStrikeoutPosition​(int strikeoutPosition)
      • getStrikeoutThickness

        public int getStrikeoutThickness​(int size)
        Description copied from interface: FontMetrics
        Returns the thickness of the strikeout line.
        Specified by:
        getStrikeoutThickness in interface FontMetrics
        Parameters:
        size - font size
        Returns:
        the thickness in 1/1000ths of the font size
      • setStrikeoutThickness

        public void setStrikeoutThickness​(int strikeoutThickness)
      • getUsedGlyphs

        public abstract java.util.Map<java.lang.Integer,​java.lang.Integer> getUsedGlyphs()
        Returns a Map of used Glyphs.
        Returns:
        Map Map of used Glyphs
      • getUnicodeFromGID

        public abstract char getUnicodeFromGID​(int glyphIndex)
        Returns the character from it's original glyph index in the font
        Parameters:
        glyphIndex - The original index of the character
        Returns:
        The character
      • hasAdditionalEncodings

        public boolean hasAdditionalEncodings()
        Indicates whether the encoding has additional encodings besides the primary encoding.
        Returns:
        true if there are additional encodings.
      • getAdditionalEncodingCount

        public int getAdditionalEncodingCount()
        Returns the number of additional encodings this single-byte font maintains.
        Returns:
        the number of additional encodings
      • getAdditionalEncoding

        public SimpleSingleByteEncoding getAdditionalEncoding​(int index)
                                                       throws java.lang.IndexOutOfBoundsException
        Returns an additional encoding.
        Parameters:
        index - the index of the additional encoding
        Returns:
        the additional encoding
        Throws:
        java.lang.IndexOutOfBoundsException - if the index is out of bounds
      • addUnencodedCharacter

        public void addUnencodedCharacter​(NamedCharacter ch,
                                          int width,
                                          java.awt.Rectangle bbox)
        Adds an unencoded character (one that is not supported by the primary encoding).
        Parameters:
        ch - the named character
        width - the width of the character
      • mapUnencodedChar

        protected char mapUnencodedChar​(char ch)
        Adds a character to additional encodings
        Parameters:
        ch - character to map
      • hasSVG

        public boolean hasSVG()
      • setSVG

        public void setSVG​(java.util.Map<java.lang.Integer,​SVGGlyphData> svgs)