Class FontMapperImpl

java.lang.Object
org.sejda.sambox.pdmodel.font.FontMapperImpl
All Implemented Interfaces:
FontMapper

final class FontMapperImpl extends Object implements FontMapper
Font mapper, locates non-embedded fonts via a pluggable FontProvider.
  • Field Details

    • fontInfoByName

      private final CompletableFuture<Map<String,FontInfo>> fontInfoByName
    • lastResortFont

      private final org.apache.fontbox.ttf.TrueTypeFont lastResortFont
    • LOG

      private static final org.slf4j.Logger LOG
    • substitutes

      private final Map<String,List<String>> substitutes
      Map of PostScript name substitutes, in priority order.
  • Constructor Details

    • FontMapperImpl

      FontMapperImpl()
    • FontMapperImpl

      FontMapperImpl(FontProvider fontProvider)
  • Method Details

    • getLastResortFont

      public org.apache.fontbox.ttf.TrueTypeFont getLastResortFont()
    • loadLastResortFont

      public static org.apache.fontbox.ttf.TrueTypeFont loadLastResortFont()
    • loadFontProvider

      public static FontProvider loadFontProvider()
    • getPostScriptNames

      private Set<String> getPostScriptNames(String postScriptName)
      Gets alternative names, as seen in some PDFs, e.g. PDFBOX-142.
    • copySubstitutes

      private List<String> copySubstitutes(String postScriptName)
      Copies a list of font substitutes, adding the original font at the start of the list.
    • addSubstitute

      public void addSubstitute(String match, String replace)
      Adds a top-priority substitute for the given font.
      Parameters:
      match - PostScript name of the font to match
      replace - PostScript name of the font to use as a replacement
    • addSubstitutes

      private void addSubstitutes(String match, List<String> replacements)
    • getSubstitutes

      private List<String> getSubstitutes(String postScriptName)
      Returns the substitutes for a given font.
    • getFallbackFontName

      private String getFallbackFontName(PDFontDescriptor fontDescriptor)
      Attempts to find a good fallback based on the font descriptor.
    • getTrueTypeFont

      public FontMapping<org.apache.fontbox.ttf.TrueTypeFont> getTrueTypeFont(String baseFont, PDFontDescriptor fontDescriptor)
      Finds a TrueType font with the given PostScript name, or a suitable substitute, or null.
      Specified by:
      getTrueTypeFont in interface FontMapper
      Parameters:
      fontDescriptor - FontDescriptor
    • getFontBoxFont

      public FontMapping<org.apache.fontbox.FontBoxFont> getFontBoxFont(String baseFont, PDFontDescriptor fontDescriptor)
      Finds a font with the given PostScript name, or a suitable substitute, or null. This allows any font to be substituted with a PFB, TTF or OTF.
      Specified by:
      getFontBoxFont in interface FontMapper
      Parameters:
      fontDescriptor - the FontDescriptor of the font to find
    • findFontBoxFont

      private org.apache.fontbox.FontBoxFont findFontBoxFont(String postScriptName)
      Finds a font with the given PostScript name, or a suitable substitute, or null.
      Parameters:
      postScriptName - PostScript font name
    • findFont

      private org.apache.fontbox.FontBoxFont findFont(FontFormat format, String postScriptName)
      Finds a font with the given PostScript name, or a suitable substitute, or null.
      Parameters:
      postScriptName - PostScript font name
    • getFont

      private FontInfo getFont(FontFormat format, String postScriptName)
      Finds the named font with the given format.
    • getCIDFont

      public CIDFontMapping getCIDFont(String baseFont, PDFontDescriptor fontDescriptor, PDCIDSystemInfo cidSystemInfo)
      Finds a CFF CID-Keyed font with the given PostScript name, or a suitable substitute, or null. This method can also map CJK fonts via their CIDSystemInfo (ROS).
      Specified by:
      getCIDFont in interface FontMapper
      Parameters:
      fontDescriptor - FontDescriptor
      cidSystemInfo - the CID system info, e.g. "Adobe-Japan1", if any.
    • getFontMatches

      private PriorityQueue<FontMapperImpl.FontMatch> getFontMatches(PDFontDescriptor fontDescriptor, PDCIDSystemInfo cidSystemInfo)
      Returns a list of matching fonts, scored by suitability. Positive scores indicate matches for certain attributes, while negative scores indicate mismatches. Zero scores are neutral.
      Parameters:
      fontDescriptor - FontDescriptor, always present.
      cidSystemInfo - Font's CIDSystemInfo, may be null.
    • probablyBarcodeFont

      private static boolean probablyBarcodeFont(PDFontDescriptor fontDescriptor)
    • isCharSetMatch

      private boolean isCharSetMatch(PDCIDSystemInfo cidSystemInfo, FontInfo info)
      Returns true if the character set described by CIDSystemInfo is present in the given font. Only applies to Adobe-GB1, Adobe-CNS1, Adobe-Japan1, Adobe-Korea1, as per the PDF spec.