1 17 18 19 20 package org.apache.fop.render.java2d; 21 22 import org.apache.commons.logging.Log; 24 import org.apache.commons.logging.LogFactory; 25 import org.apache.fop.fonts.FontInfo; 26 import org.apache.fop.fonts.Font; 27 import org.apache.fop.fonts.FontTriplet; 28 29 import java.awt.Graphics2D ; 31 import java.awt.GraphicsEnvironment ; 32 import java.util.Set ; 33 34 40 public class FontSetup { 41 42 43 protected static Log log = LogFactory.getLog(FontSetup.class); 44 45 private static final int LAST_PREDEFINED_FONT_NUMBER = 14; 46 47 private static final Set HARDCODED_FONT_NAMES; 48 49 static { 50 HARDCODED_FONT_NAMES = new java.util.HashSet (); 51 HARDCODED_FONT_NAMES.add("any"); 52 HARDCODED_FONT_NAMES.add("sans-serif"); 53 HARDCODED_FONT_NAMES.add("serif"); 54 HARDCODED_FONT_NAMES.add("monospace"); 55 56 HARDCODED_FONT_NAMES.add("Helvetica"); 57 HARDCODED_FONT_NAMES.add("Times"); 58 HARDCODED_FONT_NAMES.add("Courier"); 59 HARDCODED_FONT_NAMES.add("Symbol"); 60 HARDCODED_FONT_NAMES.add("ZapfDingbats"); 61 HARDCODED_FONT_NAMES.add("Times Roman"); 62 HARDCODED_FONT_NAMES.add("Times-Roman"); 63 HARDCODED_FONT_NAMES.add("Computer-Modern-Typewriter"); 64 } 65 66 75 public static void setup(FontInfo fontInfo, Graphics2D graphics) { 76 FontMetricsMapper metric; 77 int normal, bold, bolditalic, italic; 78 79 85 normal = java.awt.Font.PLAIN; 86 bold = java.awt.Font.BOLD; 87 italic = java.awt.Font.ITALIC; 88 bolditalic = java.awt.Font.BOLD + java.awt.Font.ITALIC; 89 90 metric = new FontMetricsMapper("SansSerif", normal, graphics); 91 fontInfo.addMetrics("F1", metric); 93 metric = new FontMetricsMapper("SansSerif", italic, graphics); 94 fontInfo.addMetrics("F2", metric); 96 metric = new FontMetricsMapper("SansSerif", bold, graphics); 97 fontInfo.addMetrics("F3", metric); 99 metric = new FontMetricsMapper("SansSerif", bolditalic, graphics); 100 fontInfo.addMetrics("F4", metric); 102 103 104 metric = new FontMetricsMapper("Serif", normal, graphics); 105 fontInfo.addMetrics("F5", metric); 107 metric = new FontMetricsMapper("Serif", italic, graphics); 108 fontInfo.addMetrics("F6", metric); 110 metric = new FontMetricsMapper("Serif", bold, graphics); 111 fontInfo.addMetrics("F7", metric); 113 metric = new FontMetricsMapper("Serif", bolditalic, graphics); 114 fontInfo.addMetrics("F8", metric); 116 117 metric = new FontMetricsMapper("MonoSpaced", normal, graphics); 118 fontInfo.addMetrics("F9", metric); 120 metric = new FontMetricsMapper("MonoSpaced", italic, graphics); 121 fontInfo.addMetrics("F10", metric); 123 metric = new FontMetricsMapper("MonoSpaced", bold, graphics); 124 fontInfo.addMetrics("F11", metric); 126 metric = new FontMetricsMapper("MonoSpaced", bolditalic, graphics); 127 fontInfo.addMetrics("F12", metric); 129 130 metric = new FontMetricsMapper("Serif", normal, graphics); 131 fontInfo.addMetrics("F13", metric); 134 fontInfo.addMetrics("F14", metric); 135 136 141 142 fontInfo.addFontProperties("F5", "any", "normal", Font.NORMAL); 143 fontInfo.addFontProperties("F6", "any", "italic", Font.NORMAL); 144 fontInfo.addFontProperties("F6", "any", "oblique", Font.NORMAL); 145 fontInfo.addFontProperties("F7", "any", "normal", Font.BOLD); 146 fontInfo.addFontProperties("F8", "any", "italic", Font.BOLD); 147 fontInfo.addFontProperties("F8", "any", "oblique", Font.BOLD); 148 149 fontInfo.addFontProperties("F1", "sans-serif", "normal", Font.NORMAL); 150 fontInfo.addFontProperties("F2", "sans-serif", "oblique", Font.NORMAL); 151 fontInfo.addFontProperties("F2", "sans-serif", "italic", Font.NORMAL); 152 fontInfo.addFontProperties("F3", "sans-serif", "normal", Font.BOLD); 153 fontInfo.addFontProperties("F4", "sans-serif", "oblique", Font.BOLD); 154 fontInfo.addFontProperties("F4", "sans-serif", "italic", Font.BOLD); 155 fontInfo.addFontProperties("F5", "serif", "normal", Font.NORMAL); 156 fontInfo.addFontProperties("F6", "serif", "oblique", Font.NORMAL); 157 fontInfo.addFontProperties("F6", "serif", "italic", Font.NORMAL); 158 fontInfo.addFontProperties("F7", "serif", "normal", Font.BOLD); 159 fontInfo.addFontProperties("F8", "serif", "oblique", Font.BOLD); 160 fontInfo.addFontProperties("F8", "serif", "italic", Font.BOLD); 161 fontInfo.addFontProperties("F9", "monospace", "normal", Font.NORMAL); 162 fontInfo.addFontProperties("F10", "monospace", "oblique", Font.NORMAL); 163 fontInfo.addFontProperties("F10", "monospace", "italic", Font.NORMAL); 164 fontInfo.addFontProperties("F11", "monospace", "normal", Font.BOLD); 165 fontInfo.addFontProperties("F12", "monospace", "oblique", Font.BOLD); 166 fontInfo.addFontProperties("F12", "monospace", "italic", Font.BOLD); 167 168 fontInfo.addFontProperties("F1", "Helvetica", "normal", Font.NORMAL); 169 fontInfo.addFontProperties("F2", "Helvetica", "oblique", Font.NORMAL); 170 fontInfo.addFontProperties("F2", "Helvetica", "italic", Font.NORMAL); 171 fontInfo.addFontProperties("F3", "Helvetica", "normal", Font.BOLD); 172 fontInfo.addFontProperties("F4", "Helvetica", "oblique", Font.BOLD); 173 fontInfo.addFontProperties("F4", "Helvetica", "italic", Font.BOLD); 174 fontInfo.addFontProperties("F5", "Times", "normal", Font.NORMAL); 175 fontInfo.addFontProperties("F6", "Times", "oblique", Font.NORMAL); 176 fontInfo.addFontProperties("F6", "Times", "italic", Font.NORMAL); 177 fontInfo.addFontProperties("F7", "Times", "normal", Font.BOLD); 178 fontInfo.addFontProperties("F8", "Times", "oblique", Font.BOLD); 179 fontInfo.addFontProperties("F8", "Times", "italic", Font.BOLD); 180 fontInfo.addFontProperties("F9", "Courier", "normal", Font.NORMAL); 181 fontInfo.addFontProperties("F10", "Courier", "oblique", Font.NORMAL); 182 fontInfo.addFontProperties("F10", "Courier", "italic", Font.NORMAL); 183 fontInfo.addFontProperties("F11", "Courier", "normal", Font.BOLD); 184 fontInfo.addFontProperties("F12", "Courier", "oblique", Font.BOLD); 185 fontInfo.addFontProperties("F12", "Courier", "italic", Font.BOLD); 186 fontInfo.addFontProperties("F13", "Symbol", "normal", Font.NORMAL); 187 fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", Font.NORMAL); 188 189 194 195 fontInfo.addFontProperties("F5", "Times-Roman", "normal", Font.NORMAL); 196 fontInfo.addFontProperties("F6", "Times-Roman", "oblique", Font.NORMAL); 197 fontInfo.addFontProperties("F6", "Times-Roman", "italic", Font.NORMAL); 198 fontInfo.addFontProperties("F7", "Times-Roman", "normal", Font.BOLD); 199 fontInfo.addFontProperties("F8", "Times-Roman", "oblique", Font.BOLD); 200 fontInfo.addFontProperties("F8", "Times-Roman", "italic", Font.BOLD); 201 fontInfo.addFontProperties("F5", "Times Roman", "normal", Font.NORMAL); 202 fontInfo.addFontProperties("F6", "Times Roman", "oblique", Font.NORMAL); 203 fontInfo.addFontProperties("F6", "Times Roman", "italic", Font.NORMAL); 204 fontInfo.addFontProperties("F7", "Times Roman", "normal", Font.BOLD); 205 fontInfo.addFontProperties("F8", "Times Roman", "oblique", Font.BOLD); 206 fontInfo.addFontProperties("F8", "Times Roman", "italic", Font.BOLD); 207 fontInfo.addFontProperties("F9", "Computer-Modern-Typewriter", 208 "normal", Font.NORMAL); 209 210 configureInstalledAWTFonts(fontInfo, graphics, LAST_PREDEFINED_FONT_NUMBER + 1); 211 } 212 213 private static void configureInstalledAWTFonts(FontInfo fontInfo, Graphics2D graphics, 214 int startNumber) { 215 int num = startNumber; 216 GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 217 String [] allFontFamilies = env.getAvailableFontFamilyNames(); 218 for (int i = 0; i < allFontFamilies.length; i++) { 219 String family = allFontFamilies[i]; 220 if (HARDCODED_FONT_NAMES.contains(family)) { 221 continue; } 223 224 if (log.isDebugEnabled()) { 225 log.debug("Registering: " + family); 226 } 227 228 int fontStyle; 232 fontStyle = java.awt.Font.PLAIN; 233 registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics); 234 num++; 235 236 fontStyle = java.awt.Font.ITALIC; 237 registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics); 238 num++; 239 240 fontStyle = java.awt.Font.BOLD; 241 registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics); 242 num++; 243 244 fontStyle = java.awt.Font.BOLD | java.awt.Font.ITALIC; 245 registerFontTriplet(fontInfo, family, fontStyle, "F" + num, graphics); 246 num++; 247 } 248 } 249 250 private static void registerFontTriplet(FontInfo fontInfo, String family, int fontStyle, 251 String fontKey, Graphics2D graphics) { 252 FontMetricsMapper metric = new FontMetricsMapper(family, fontStyle, graphics); 253 fontInfo.addMetrics(fontKey, metric); 254 255 int weight = Font.NORMAL; 256 if ((fontStyle & java.awt.Font.BOLD) != 0) { 257 weight = Font.BOLD; 258 } 259 String style = "normal"; 260 if ((fontStyle & java.awt.Font.ITALIC) != 0) { 261 style = "italic"; 262 } 263 FontTriplet triplet = FontInfo.createFontKey(family, style, weight); 264 fontInfo.addFontProperties(fontKey, triplet); 265 } 266 267 } 268 269 | Popular Tags |