blob: 90ca29c5acc030c0c1cf4e2c6cd46ffaea109525 [file] [log] [blame]
package org.apache.xml.fop.render.pdf;
// FOP
import org.apache.xml.fop.render.pdf.fonts.*;
import org.apache.xml.fop.layout.FontInfo;
import org.apache.xml.fop.pdf.PDFDocument;
import org.apache.xml.fop.pdf.PDFResources;
// Java
import java.util.Enumeration;
import java.util.Hashtable;
/**
* sets up the PDF fonts.
*
* Assigns the font (with metrics) to internal names like "F1" and
* assigns family-style-weight triplets to the fonts
*/
public class FontSetup {
/**
* sets up the font info object.
*
* adds metrics for basic fonts and useful family-style-weight
* triplets for lookup
*
* @param fontInfo the font info object to set up
*/
public static void setup(FontInfo fontInfo) {
System.err.println("setting up fonts");
fontInfo.addMetrics("F1", new Helvetica());
fontInfo.addMetrics("F2", new HelveticaOblique());
fontInfo.addMetrics("F3", new HelveticaBold());
fontInfo.addMetrics("F4", new HelveticaBoldOblique());
fontInfo.addMetrics("F5", new TimesRoman());
fontInfo.addMetrics("F6", new TimesItalic());
fontInfo.addMetrics("F7", new TimesBold());
fontInfo.addMetrics("F8", new TimesBoldItalic());
fontInfo.addMetrics("F9", new Courier());
fontInfo.addMetrics("F10", new CourierOblique());
fontInfo.addMetrics("F11", new CourierBold());
fontInfo.addMetrics("F12", new CourierBoldOblique());
/* any is treated as serif */
fontInfo.addFontProperties("F5", "any", "normal", "normal");
fontInfo.addFontProperties("F6", "any", "italic", "normal");
fontInfo.addFontProperties("F6", "any", "oblique", "normal");
fontInfo.addFontProperties("F7", "any", "normal", "bold");
fontInfo.addFontProperties("F8", "any", "italic", "bold");
fontInfo.addFontProperties("F8", "any", "oblique", "bold");
fontInfo.addFontProperties("F1", "sans-serif", "normal",
"normal");
fontInfo.addFontProperties("F2", "sans-serif", "oblique",
"normal");
fontInfo.addFontProperties("F2", "sans-serif", "italic",
"normal");
fontInfo.addFontProperties("F3", "sans-serif", "normal",
"bold");
fontInfo.addFontProperties("F4", "sans-serif", "oblique",
"bold");
fontInfo.addFontProperties("F4", "sans-serif", "italic",
"bold");
fontInfo.addFontProperties("F5", "serif", "normal", "normal");
fontInfo.addFontProperties("F6", "serif", "oblique",
"normal");
fontInfo.addFontProperties("F6", "serif", "italic", "normal");
fontInfo.addFontProperties("F7", "serif", "normal", "bold");
fontInfo.addFontProperties("F8", "serif", "oblique", "bold");
fontInfo.addFontProperties("F8", "serif", "italic", "bold");
fontInfo.addFontProperties("F9", "monospace", "normal",
"normal");
fontInfo.addFontProperties("F10", "monospace", "oblique",
"normal");
fontInfo.addFontProperties("F10", "monospace", "italic",
"normal");
fontInfo.addFontProperties("F11", "monospace", "normal",
"bold");
fontInfo.addFontProperties("F12", "monospace", "oblique",
"bold");
fontInfo.addFontProperties("F12", "monospace", "italic",
"bold");
fontInfo.addFontProperties("F1", "Helvetica", "normal",
"normal");
fontInfo.addFontProperties("F2", "Helvetica", "oblique",
"normal");
fontInfo.addFontProperties("F2", "Helvetica", "italic",
"normal");
fontInfo.addFontProperties("F3", "Helvetica", "normal",
"bold");
fontInfo.addFontProperties("F4", "Helvetica", "oblique",
"bold");
fontInfo.addFontProperties("F4", "Helvetica", "italic",
"bold");
fontInfo.addFontProperties("F5", "Times", "normal", "normal");
fontInfo.addFontProperties("F6", "Times", "oblique",
"normal");
fontInfo.addFontProperties("F6", "Times", "italic", "normal");
fontInfo.addFontProperties("F7", "Times", "normal", "bold");
fontInfo.addFontProperties("F8", "Times", "oblique", "bold");
fontInfo.addFontProperties("F8", "Times", "italic", "bold");
fontInfo.addFontProperties("F9", "Courier", "normal",
"normal");
fontInfo.addFontProperties("F10", "Courier", "oblique",
"normal");
fontInfo.addFontProperties("F10", "Courier", "italic",
"normal");
fontInfo.addFontProperties("F11", "Courier", "normal",
"bold");
fontInfo.addFontProperties("F12", "Courier", "oblique",
"bold");
fontInfo.addFontProperties("F12", "Courier", "italic",
"bold");
/* for compatibility with PassiveTex */
fontInfo.addFontProperties("F5", "Times-Roman", "normal",
"normal");
fontInfo.addFontProperties("F6", "Times-Roman", "oblique",
"normal");
fontInfo.addFontProperties("F6", "Times-Roman", "italic",
"normal");
fontInfo.addFontProperties("F7", "Times-Roman", "normal",
"bold");
fontInfo.addFontProperties("F8", "Times-Roman", "oblique",
"bold");
fontInfo.addFontProperties("F8", "Times-Roman", "italic",
"bold");
fontInfo.addFontProperties("F5", "Times Roman", "normal",
"normal");
fontInfo.addFontProperties("F6", "Times Roman", "oblique",
"normal");
fontInfo.addFontProperties("F6", "Times Roman", "italic",
"normal");
fontInfo.addFontProperties("F7", "Times Roman", "normal",
"bold");
fontInfo.addFontProperties("F8", "Times Roman", "oblique",
"bold");
fontInfo.addFontProperties("F8", "Times Roman", "italic",
"bold");
fontInfo.addFontProperties("F9", "Computer-Modern-Typewriter",
"normal", "normal");
}
/**
* add the fonts in the font info to the PDF document
*
* @param doc PDF document to add fonts to
* @param fontInfo font info object to get font information from
*/
public static void addToResources(PDFDocument doc, FontInfo fontInfo) {
Hashtable fonts = fontInfo.getFonts();
Enumeration e = fonts.keys();
PDFResources resources = doc.getResources();
while (e.hasMoreElements()) {
String f = (String) e.nextElement();
resources.addFont(doc.makeFont(f,
((Font)
fonts.get(f)).fontName(),
((Font)
fonts.get(f)).encoding()
)
);
}
}
}