| /* |
| * 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$ */ |
| |
| package org.apache.fop.afp.fonts; |
| |
| import org.apache.fop.afp.AFPEventProducer; |
| import org.apache.fop.fonts.Base14Font; |
| import org.apache.fop.fonts.Font; |
| import org.apache.fop.fonts.FontCollection; |
| import org.apache.fop.fonts.FontInfo; |
| import org.apache.fop.fonts.base14.Courier; |
| import org.apache.fop.fonts.base14.CourierBold; |
| import org.apache.fop.fonts.base14.CourierBoldOblique; |
| import org.apache.fop.fonts.base14.CourierOblique; |
| import org.apache.fop.fonts.base14.Helvetica; |
| import org.apache.fop.fonts.base14.HelveticaBold; |
| import org.apache.fop.fonts.base14.HelveticaOblique; |
| import org.apache.fop.fonts.base14.TimesBold; |
| import org.apache.fop.fonts.base14.TimesBoldItalic; |
| import org.apache.fop.fonts.base14.TimesItalic; |
| import org.apache.fop.fonts.base14.TimesRoman; |
| |
| /** |
| * Sets up a typical Base 12 font configuration for AFP |
| */ |
| public class AFPBase12FontCollection implements FontCollection { |
| |
| private final AFPEventProducer eventProducer; |
| |
| /** |
| * @param eventProducer the AFP-specific event producer |
| */ |
| public AFPBase12FontCollection(AFPEventProducer eventProducer) { |
| this.eventProducer = eventProducer; |
| } |
| |
| /** standard raster font sizes */ |
| private static final int[] RASTER_SIZES = {6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 24, 30, 36}; |
| |
| /** standard raster font charset references */ |
| private static final String[] CHARSET_REF = { |
| "60", "70", "80", "90", "00", "A0", "B0", "D0", "F0", "H0", "J0", "N0", "T0", "Z0"}; |
| |
| private void addCharacterSet(RasterFont font, String charsetName, Base14Font base14) { |
| for (int i = 0; i < RASTER_SIZES.length; i++) { |
| int size = RASTER_SIZES[i] * 1000; |
| FopCharacterSet characterSet = new FopCharacterSet( |
| CharacterSet.DEFAULT_CODEPAGE, CharacterSet.DEFAULT_ENCODING, |
| charsetName + CHARSET_REF[i], base14, eventProducer); |
| font.addCharacterSet(size, characterSet); |
| } |
| } |
| |
| private int addFontProperties(FontInfo fontInfo, AFPFont font, |
| String[] names, String style, int weight, int num) { |
| String internalFontKey = "F" + num; |
| fontInfo.addMetrics(internalFontKey, font); |
| fontInfo.addFontProperties(internalFontKey, names, style, weight); |
| num++; |
| return num; |
| } |
| |
| /** {@inheritDoc} */ |
| public int setup(int start, FontInfo fontInfo) { |
| |
| /** |
| * Add the base 12 fonts (Helvetica, Times and Courier) |
| * |
| * Note: this default font configuration may not be available |
| * on your AFP environment. |
| */ |
| int num = start; |
| RasterFont font = null; |
| |
| /** standard font family reference names for Helvetica font */ |
| final String[] helveticaNames = {"Helvetica", "Arial", "sans-serif"}; |
| font = createReferencedRasterFont("Helvetica"); |
| addCharacterSet(font, "C0H200", new Helvetica()); |
| num = addFontProperties(fontInfo, font, helveticaNames, |
| Font.STYLE_NORMAL, Font.WEIGHT_NORMAL, num); |
| |
| font = createReferencedRasterFont("Helvetica Italic"); |
| addCharacterSet(font, "C0H300", new HelveticaOblique()); |
| num = addFontProperties(fontInfo, font, helveticaNames, |
| Font.STYLE_ITALIC, Font.WEIGHT_NORMAL, num); |
| |
| font = createReferencedRasterFont("Helvetica (Semi) Bold"); |
| addCharacterSet(font, "C0H400", new HelveticaBold()); |
| num = addFontProperties(fontInfo, font, helveticaNames, |
| Font.STYLE_NORMAL, Font.WEIGHT_BOLD, num); |
| |
| font = createReferencedRasterFont("Helvetica Italic (Semi) Bold"); |
| addCharacterSet(font, "C0H500", new HelveticaOblique()); |
| num = addFontProperties(fontInfo, font, helveticaNames, |
| Font.STYLE_ITALIC, Font.WEIGHT_BOLD, num); |
| |
| |
| /** standard font family reference names for Times font */ |
| |
| /** any is treated as serif */ |
| final String[] timesNames = {"Times", "TimesRoman", "Times Roman", "Times-Roman", |
| "Times New Roman", "TimesNewRoman", "serif", "any"}; |
| |
| font = createReferencedRasterFont("Times Roman"); |
| addCharacterSet(font, "C0N200", new TimesRoman()); |
| num = addFontProperties(fontInfo, font, timesNames, |
| Font.STYLE_NORMAL, Font.WEIGHT_NORMAL, num); |
| |
| font = createReferencedRasterFont("Times Roman Italic"); |
| addCharacterSet(font, "C0N300", new TimesItalic()); |
| num = addFontProperties(fontInfo, font, timesNames, |
| Font.STYLE_ITALIC, Font.WEIGHT_NORMAL, num); |
| |
| font = createReferencedRasterFont("Times Roman Bold"); |
| addCharacterSet(font, "C0N400", new TimesBold()); |
| num = addFontProperties(fontInfo, font, timesNames, |
| Font.STYLE_NORMAL, Font.WEIGHT_BOLD, num); |
| |
| font = createReferencedRasterFont("Times Roman Italic Bold"); |
| addCharacterSet(font, "C0N500", new TimesBoldItalic()); |
| num = addFontProperties(fontInfo, font, timesNames, |
| Font.STYLE_ITALIC, Font.WEIGHT_BOLD, num); |
| |
| |
| /** standard font family reference names for Courier font */ |
| final String[] courierNames = {"Courier", "monospace"}; |
| |
| font = createReferencedRasterFont("Courier"); |
| addCharacterSet(font, "C04200", new Courier()); |
| num = addFontProperties(fontInfo, font, courierNames, |
| Font.STYLE_NORMAL, Font.WEIGHT_NORMAL, num); |
| |
| font = createReferencedRasterFont("Courier Italic"); |
| addCharacterSet(font, "C04300", new CourierOblique()); |
| num = addFontProperties(fontInfo, font, courierNames, |
| Font.STYLE_ITALIC, Font.WEIGHT_NORMAL, num); |
| |
| font = createReferencedRasterFont("Courier Bold"); |
| addCharacterSet(font, "C04400", new CourierBold()); |
| num = addFontProperties(fontInfo, font, courierNames, |
| Font.STYLE_NORMAL, Font.WEIGHT_BOLD, num); |
| |
| font = createReferencedRasterFont("Courier Italic Bold"); |
| addCharacterSet(font, "C04500", new CourierBoldOblique()); |
| num = addFontProperties(fontInfo, font, courierNames, |
| Font.STYLE_ITALIC, Font.WEIGHT_BOLD, num); |
| |
| return num; |
| } |
| |
| private RasterFont createReferencedRasterFont(String fontFamily) { |
| boolean embeddable = false; //Font is assumed to be available on the target platform |
| return new RasterFont(fontFamily, embeddable); |
| } |
| |
| } |