org.apache.fop.fonts.FontLoader Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.apache.fop Show documentation
Show all versions of org.apache.fop Show documentation
The core maven build properties
The newest version!
/*
* 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 1885366 2021-01-11 15:00:20Z 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.
*/
public abstract class FontLoader {
/** logging instance */
protected static final Log log = LogFactory.getLog(FontLoader.class);
/** URI representing the font file */
protected final URI fontFileURI;
/** the resource resolver to use for font URI resolution */
protected final InternalResourceResolver resourceResolver;
/** the loaded font */
protected CustomFont returnFont;
/** true if the font has been loaded */
protected boolean loaded;
/** 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. */
protected boolean useKerning;
/** true if advanced typographic information shall be loaded if available. */
protected boolean useAdvanced;
/**
* 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.
* @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, boolean useSVG) 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, useSVG);
}
return loader.getFont();
}
/**
* 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.
* @return the newly loaded font
* @throws IOException if an I/O error occurs
*/
public CustomFont getFont() throws IOException {
if (!loaded) {
read();
}
return this.returnFont;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy