/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* $Id: FontLoader.java 1781856 2017-02-06 09:50:05Z ssteiner $ */

package org.apache.fop.fonts;

import java.io.IOException;
import java.net.URI;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.apache.fop.apps.io.InternalResourceResolver;
import org.apache.fop.fonts.truetype.OFFontLoader;
import org.apache.fop.fonts.type1.Type1FontLoader;

Base class for font loaders.
/** * Base class for font loaders. */
public abstract class FontLoader {
logging instance
/** logging instance */
protected static final Log log = LogFactory.getLog(FontLoader.class);
URI representing the font file
/** URI representing the font file */
protected final URI fontFileURI;
the resource resolver to use for font URI resolution
/** the resource resolver to use for font URI resolution */
protected final InternalResourceResolver resourceResolver;
the loaded font
/** the loaded font */
protected CustomFont returnFont;
true if the font has been loaded
/** true if the font has been loaded */
protected boolean loaded;
true if the font will be embedded, false if it will be referenced only.
/** true if the font will be embedded, false if it will be referenced only. */
protected boolean embedded;
true if kerning information false be loaded if available.
/** true if kerning information false be loaded if available. */
protected boolean useKerning;
true if advanced typographic information shall be loaded if available.
/** true if advanced typographic information shall be loaded if available. */
protected boolean useAdvanced;
Default constructor.
Params:
  • fontFileURI – the URI to the PFB file of a Type 1 font
  • embedded – indicates whether the font is embedded or referenced
  • useKerning – indicates whether kerning information shall be loaded if available
  • useAdvanced – indicates whether advanced typographic information shall be loaded if available
  • resourceResolver – the font resolver used to resolve URIs
/** * Default constructor. * @param fontFileURI the URI to the PFB file of a Type 1 font * @param embedded indicates whether the font is embedded or referenced * @param useKerning indicates whether kerning information shall be loaded if available * @param useAdvanced indicates whether advanced typographic information shall be loaded if * available * @param resourceResolver the font resolver used to resolve URIs */
public FontLoader(URI fontFileURI, boolean embedded, boolean useKerning, boolean useAdvanced, InternalResourceResolver resourceResolver) { this.fontFileURI = fontFileURI; this.embedded = embedded; this.useKerning = useKerning; this.useAdvanced = useAdvanced; this.resourceResolver = resourceResolver; } private static boolean isType1(FontUris fontUris) { return fontUris.getEmbed().toASCIIString().toLowerCase().endsWith(".pfb") || fontUris.getAfm() != null || fontUris.getPfm() != null; }
Loads a custom font from a URI. In the case of Type 1 fonts, the PFB file must be specified.
Params:
  • fontUris – the URI to the font
  • subFontName – the sub-fontname of a font (for TrueType Collections, null otherwise)
  • embedded – indicates whether the font is embedded or referenced
  • embeddingMode – the embedding mode of the font
  • encodingMode – the requested encoding mode
  • useKerning – indicates whether kerning information should be loaded if available
  • useAdvanced – indicates whether advanced typographic information shall be loaded if available
  • resourceResolver – the font resolver to use when resolving URIs
Throws:
Returns:the newly loaded font
/** * Loads a custom font from a URI. In the case of Type 1 fonts, the PFB file must be specified. * @param fontUris the URI to the font * @param subFontName the sub-fontname of a font (for TrueType Collections, null otherwise) * @param embedded indicates whether the font is embedded or referenced * @param embeddingMode the embedding mode of the font * @param encodingMode the requested encoding mode * @param useKerning indicates whether kerning information should be loaded if available * @param useAdvanced indicates whether advanced typographic information shall be loaded if * available * @param resourceResolver the font resolver to use when resolving URIs * @return the newly loaded font * @throws IOException In case of an I/O error */
public static CustomFont loadFont(FontUris fontUris, String subFontName, boolean embedded, EmbeddingMode embeddingMode, EncodingMode encodingMode, boolean useKerning, boolean useAdvanced, InternalResourceResolver resourceResolver, boolean simulateStyle, boolean embedAsType1) throws IOException { boolean type1 = isType1(fontUris); FontLoader loader; if (type1) { if (encodingMode == EncodingMode.CID) { throw new IllegalArgumentException( "CID encoding mode not supported for Type 1 fonts"); } loader = new Type1FontLoader(fontUris, embedded, embeddingMode, useKerning, resourceResolver); } else { loader = new OFFontLoader(fontUris.getEmbed(), subFontName, embedded, embeddingMode, encodingMode, useKerning, useAdvanced, resourceResolver, simulateStyle, embedAsType1); } return loader.getFont(); }
Reads/parses the font data.
Throws:
  • IOException – In case of an I/O error
/** * Reads/parses the font data. * @throws IOException In case of an I/O error */
protected abstract void read() throws IOException;
Returns the custom font that was read using this instance of FontLoader.
Throws:
Returns:the newly loaded font
/** * Returns the custom font that was read using this instance of FontLoader. * @return the newly loaded font * @throws IOException if an I/O error occurs */
public CustomFont getFont() throws IOException { if (!loaded) { read(); } return this.returnFont; } }