LazyFont (Apache FOP Core 2.11 API)
Date: 2025-04-24

org.apache.fop.fonts

## Class LazyFont

- java.lang.Object
- - org.apache.fop.fonts.Typeface
  - - org.apache.fop.fonts.LazyFont

- All Implemented Interfaces:
    Positionable, Substitutable, FontDescriptor, FontMetrics

      public class LazyFont
      extends Typeface
      implements FontDescriptor, Substitutable, Positionable

  This class is used to defer the loading of a font until it is really used.

- - ### Field Summary

    - ### Fields inherited from class org.apache.fop.fonts.Typeface

      `eventListener, NOT_FOUND`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `LazyFont(EmbedFontInfo fontInfo, InternalResourceResolver resourceResolver, boolean useComplexScripts)` Main constructor

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `getAscender()` Returns the ascender value of the font.
    `int` | `getAscender(int size)` Returns the ascent of the font described by this FontMetrics object.
    `Rectangle` | `getBoundingBox(int glyphIndex, int size)` Returns the bounding box of the glyph at the given index, for the given font size.
    `int` | `getCapHeight()` Returns the capital height of the font.
    `int` | `getCapHeight(int size)` Returns the size of a capital letter measured from the font's baseline.
    `int` | `getDescender()` Returns the descender value of the font.
    `int` | `getDescender(int size)` Returns the descent of the font described by this FontMetrics object.
    `String` | `getEmbedFontName()` Returns the font name for font embedding (may include a prefix, Example: "1E28bcArialMT").
    `String` | `getEncodingName()` Get the encoding of the font.
    `Set<String>` | `getFamilyNames()` Returns the font's family names as a Set of Strings (Example: "Helvetica").
    `int` | `getFlags()` Returns the flags for the font.
    `int[]` | `getFontBBox()` Returns the font's bounding box.
    `String` | `getFontName()` Returns the "PostScript" font name (Example: "Helvetica-BoldOblique").
    `FontType` | `getFontType()` Returns the type of the font.
    `URI` | `getFontURI()` Returns the URI of the font file from which these metrics were loaded.
    `String` | `getFullName()` Returns the font's full name (Example: "Helvetica Bold Oblique").
    `int` | `getItalicAngle()` Returns the italic angle for the font.
    `Map<Integer,Map<Integer,Integer>>` | `getKerningInfo()` Returns the kerning map for the font.
    `int` | `getMaxAscent(int size)` Returns the maximum ascent of the font described by this FontMetrics object.
    `Typeface` | `getRealFont()` Gets the real font.
    `int` | `getStemV()` Returns the vertical stem width for the font.
    `int` | `getStrikeoutPosition(int size)` Returns the distance from the baseline to the center of the strikeout line (negative value indicates below baseline).
    `int` | `getStrikeoutThickness(int size)` Returns the thickness of the strikeout line.
    `int` | `getUnderlinePosition(int size)` Returns the distance from the baseline to the center of the underline (negative value indicates below baseline).
    `int` | `getUnderlineThickness(int size)` Returns the thickness of the underline.
    `int` | `getWidth(int i, int size)` Return the width (in 1/1000ths of point size) of the character at code point i.
    `int[]` | `getWidths()` Return the array of widths.
    `int` | `getXHeight(int size)` Determines the typical font height of this FontMetrics object
    `boolean` | `hadMappingOperations()` Indicates whether this font had to do any character mapping operations.
    `boolean` | `hasChar(char c)` Determines whether this font contains a particular character/glyph.
    `boolean` | `hasFeature(int tableType, String script, String language, String feature)` Determine if metrics supports specific feature in specified font table.
    `boolean` | `hasKerningInfo()` Indicates if the font has kerning information.
    `boolean` | `isEmbeddable()` Indicates if this font may be embedded.
    `boolean` | `isMultiByte()` Determines whether the font is a multibyte font.
    `boolean` | `isSubsetEmbedded()` Indicates whether this font is subset embedded.
    `boolean` | `isSymbolicFont()` Indicates whether the font is a symbolic font.
    `char` | `mapChar(char c)` Map a Unicode character to a code point in the font.
    `int[][]` | `performPositioning(CharSequence cs, String script, String language)` Perform glyph positioning using an implied font size.
    `int[][]` | `performPositioning(CharSequence cs, String script, String language, int fontSize)` Perform glyph positioning.
    `boolean` | `performsPositioning()` Determines if font performs glyph positioning.
    `boolean` | `performsSubstitution()` Determines if font performs glyph substitution.
    `CharSequence` | `performSubstitution(CharSequence cs, String script, String language, List associations, boolean retainControls)` Perform substitutions on characters to effect glyph substitution.
    `CharSequence` | `reorderCombiningMarks(CharSequence cs, int[][] gpa, String script, String language, List associations)` Reorder combining marks in character sequence so that they precede (within the sequence) the base character to which they are applied.
    `String` | `toString()`

    - ### Methods inherited from class org.apache.fop.fonts.Typeface

      `isCID, notifyMapOperation, setEventListener, warnMissingGlyph`

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

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

- - ### Constructor Detail

    - #### LazyFont

          public LazyFont(EmbedFontInfo fontInfo,
                          InternalResourceResolver resourceResolver,
                          boolean useComplexScripts)

      Main constructor
      Parameters:
        `fontInfo` - the font info to embed
        `resourceResolver` - the font resolver to handle font URIs

  - ### Method Detail

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Typeface`

    - #### getRealFont

          public Typeface getRealFont()

      Gets the real font.
      Returns:
        the real font

    - #### getEncodingName

          public String getEncodingName()

      Get the encoding of the font.
      Specified by:
        `getEncodingName` in class `Typeface`
      Returns:
        the encoding

    - #### mapChar

          public char mapChar(char c)

      Map a Unicode character to a code point in the font.
      Specified by:
        `mapChar` in class `Typeface`
      Parameters:
        `c` - character to map
      Returns:
        the mapped character

    - #### hadMappingOperations

          public boolean hadMappingOperations()

      Indicates whether this font had to do any character mapping operations. If that was not the case, it's an indication that the font has never actually been used.
      Overrides:
        `hadMappingOperations` in class `Typeface`
      Returns:
        true if the font had to do any character mapping operations

    - #### hasChar

          public boolean hasChar(char c)

      Determines whether this font contains a particular character/glyph.
      Specified by:
        `hasChar` in class `Typeface`
      Parameters:
        `c` - character to check
      Returns:
        True if the character is supported, Falso otherwise

    - #### isMultiByte

          public boolean isMultiByte()

      Determines whether the font is a multibyte font.
      Specified by:
        `isMultiByte` in interface `FontMetrics`
      Overrides:
        `isMultiByte` in class `Typeface`
      Returns:
        True if it is multibyte

    - #### getFontURI

          public 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 String getFontName()

      Returns the "PostScript" font name (Example: "Helvetica-BoldOblique").
      Specified by:
        `getFontName` in interface `FontMetrics`
      Returns:
        the font name

    - #### getEmbedFontName

          public 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 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 Set<String> getFamilyNames()

      Returns the font's family names as a Set of Strings (Example: "Helvetica").
      Specified by:
        `getFamilyNames` in interface `FontMetrics`
      Returns:
        the font's family names (a Set of Strings)

    - #### getMaxAscent

          public int getMaxAscent(int size)

      Returns the maximum ascent of the font described by this FontMetrics object. Note: This is not the same as getAscender().
      Specified by:
        `getMaxAscent` in interface `FontMetrics`
      Overrides:
        `getMaxAscent` in class `Typeface`
      Parameters:
        `size` - font size
      Returns:
        ascent in milliponts

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

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

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

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

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

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

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

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

    - #### getWidth

          public int getWidth(int i,
                              int size)

      Return the width (in 1/1000ths of point size) of the character at code point i.
      Specified by:
        `getWidth` in interface `FontMetrics`
      Parameters:
        `i` - code point index
        `size` - font size
      Returns:
        the width of the character

    - #### getWidths

          public int[] getWidths()

      Return the array of widths.

      This is used to get an array for inserting in an output format. It should not be used for lookup.

      Specified by:
        `getWidths` in interface `FontMetrics`
      Returns:
        an array of widths

    - #### getBoundingBox

          public Rectangle getBoundingBox(int glyphIndex,
                                          int size)

      Description copied from interface: `FontMetrics`
      Returns the bounding box of the glyph at the given index, for the given font size.
      Specified by:
        `getBoundingBox` in interface `FontMetrics`
      Parameters:
        `glyphIndex` - glyph index
        `size` - font size
      Returns:
        the scaled bounding box scaled in 1/1000ths of the given size

    - #### hasKerningInfo

          public boolean hasKerningInfo()

      Indicates if the font has kerning information.
      Specified by:
        `hasKerningInfo` in interface `FontMetrics`
      Returns:
        true if kerning is available.

    - #### getKerningInfo

          public Map<Integer,Map<Integer,Integer>> getKerningInfo()

      Returns the kerning map for the font.
      Specified by:
        `getKerningInfo` in interface `FontMetrics`
      Returns:
        the kerning map

    - #### hasFeature

          public boolean hasFeature(int tableType,
                                    String script,
                                    String language,
                                    String feature)

      Determine if metrics supports specific feature in specified font table.
      Specified by:
        `hasFeature` in interface `FontMetrics`
      Overrides:
        `hasFeature` in class `Typeface`
      Parameters:
        `tableType` - type of table (GSUB, GPOS, ...), see GlyphTable.GLYPH_TABLE_TYPE_*
        `script` - to qualify feature lookup
        `language` - to qualify feature lookup
        `feature` - to test
      Returns:
        true if feature supported (and has at least one lookup)

    - #### getCapHeight

          public int getCapHeight()

      Returns the capital height of the font.
      Specified by:
        `getCapHeight` in interface `FontDescriptor`
      Returns:
        the capital height

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

    - #### getAscender

          public int getAscender()

      Returns the ascender value of the font. (Ascent in pdf spec)
      Specified by:
        `getAscender` in interface `FontDescriptor`
      Returns:
        the ascender

    - #### 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)

    - #### getFontBBox

          public int[] getFontBBox()

      Returns the font's bounding box.
      Specified by:
        `getFontBBox` in interface `FontDescriptor`
      Returns:
        the bounding box

    - #### getItalicAngle

          public int getItalicAngle()

      Returns the italic angle for the font.
      Specified by:
        `getItalicAngle` in interface `FontDescriptor`
      Returns:
        the italic angle

    - #### getStemV

          public int getStemV()

      Returns the vertical stem width for the font.
      Specified by:
        `getStemV` in interface `FontDescriptor`
      Returns:
        the vertical stem width

    - #### getFontType

          public FontType getFontType()

      Returns the type of the font.
      Specified by:
        `getFontType` in interface `FontMetrics`
      Returns:
        the font type

    - #### isEmbeddable

          public boolean isEmbeddable()

      Indicates if this font may be embedded.
      Specified by:
        `isEmbeddable` in interface `FontDescriptor`
      Returns:
        True, if embedding is possible/permitted

    - #### performsSubstitution

          public boolean performsSubstitution()

      Determines if font performs glyph substitution.
      Specified by:
        `performsSubstitution` in interface `Substitutable`
      Returns:
        true if performs substitution.

    - #### performSubstitution

          public CharSequence performSubstitution(CharSequence cs,
                                                  String script,
                                                  String language,
                                                  List associations,
                                                  boolean retainControls)

      Perform substitutions on characters to effect glyph substitution. If some substitution is performed, it entails mapping from one or more input characters denoting textual character information to one or more output character codes denoting glyphs in this font, where the output character codes may make use of private character code values that have significance only for this font.
      Specified by:
        `performSubstitution` in interface `Substitutable`
      Parameters:
        `cs` - character sequence to map to output font encoding character sequence
        `script` - a script identifier
        `language` - a language identifier
        `associations` - optional list to receive list of character associations
        `retainControls` - if true, then retain control characters and their glyph mappings, otherwise remove
      Returns:
        output sequence (represented as a character sequence, where each character in the returned sequence denotes "font characters", i.e., character codes that map directly (1-1) to their associated glyphs

    - #### reorderCombiningMarks

          public CharSequence reorderCombiningMarks(CharSequence cs,
                                                    int[][] gpa,
                                                    String script,
                                                    String language,
                                                    List associations)

      Reorder combining marks in character sequence so that they precede (within the sequence) the base character to which they are applied. N.B. In the case of LTR segments, marks are not reordered by this, method since when the segment is reversed by BIDI processing, marks are automatically reordered to precede their base character.
      Specified by:
        `reorderCombiningMarks` in interface `Substitutable`
      Parameters:
        `cs` - character sequence within which combining marks to be reordered
        `gpa` - associated glyph position adjustments (also reordered)
        `script` - a script identifier
        `language` - a language identifier
        `associations` - optional list of associations to be reordered
      Returns:
        output sequence containing reordered "font characters"

    - #### performsPositioning

          public boolean performsPositioning()

      Determines if font performs glyph positioning.
      Specified by:
        `performsPositioning` in interface `Positionable`
      Returns:
        true if performs positioning

    - #### performPositioning

          public int[][] performPositioning(CharSequence cs,
                                            String script,
                                            String language,
                                            int fontSize)

      Perform glyph positioning.
      Specified by:
        `performPositioning` in interface `Positionable`
      Parameters:
        `cs` - character sequence to map to position offsets (advancement adjustments)
        `script` - a script identifier
        `language` - a language identifier
        `fontSize` - font size
      Returns:
        array (sequence) of 4-tuples of placement [PX,PY] and advance [AX,AY] adjustments, in that order, with one 4-tuple for each element of glyph sequence, or null if no non-zero adjustment applies

    - #### performPositioning

          public int[][] performPositioning(CharSequence cs,
                                            String script,
                                            String language)

      Perform glyph positioning using an implied font size.
      Specified by:
        `performPositioning` in interface `Positionable`
      Parameters:
        `cs` - character sequence to map to position offsets (advancement adjustments)
        `script` - a script identifier
        `language` - a language identifier
      Returns:
        array (sequence) of 4-tuples of placement [PX,PY] and advance [AX,AY] adjustments, in that order, with one 4-tuple for each element of glyph sequence, or null if no non-zero adjustment applies

    - #### isSubsetEmbedded

          public boolean isSubsetEmbedded()

      Indicates whether this font is subset embedded.
      Specified by:
        `isSubsetEmbedded` in interface `FontDescriptor`
      Returns:
        true if this font is subset embedded

Copyright © 2025 Apache Software Foundation. All rights reserved.