From: Keiron Liddle Date: Tue, 23 Jul 2002 11:06:51 +0000 (+0000) Subject: cleaned up the font state a bit X-Git-Tag: Alt-Design-integration-base~491 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=f6a0559f5fe65405fa202434fe514de7a0f372bc;p=xmlgraphics-fop.git cleaned up the font state a bit exception only thrown after setup as exception indicates invalid setup only font name key and size are set on the area tree FontState used as handler to get metric info git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@195024 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/org/apache/fop/apps/LayoutHandler.java b/src/org/apache/fop/apps/LayoutHandler.java index d716982fe..aae36e2ea 100644 --- a/src/org/apache/fop/apps/LayoutHandler.java +++ b/src/org/apache/fop/apps/LayoutHandler.java @@ -100,6 +100,10 @@ public class LayoutHandler extends StructureHandler { try { renderer.setupFontInfo(fontInfo); + // check that the "any,normal,400" font exists + if(!fontInfo.isSetupValid()) { + throw new SAXException(new FOPException("no default font defined by OutputConverter")); + } renderer.startRenderer(outputStream); } catch (IOException e) { throw new SAXException(e); diff --git a/src/org/apache/fop/area/Trait.java b/src/org/apache/fop/area/Trait.java index dede23a57..8aecae835 100644 --- a/src/org/apache/fop/area/Trait.java +++ b/src/org/apache/fop/area/Trait.java @@ -21,10 +21,8 @@ public class Trait implements Serializable { public static final Integer ID_LINK = new Integer(0); public static final Integer INTERNAL_LINK = new Integer(1); //resolved public static final Integer EXTERNAL_LINK = new Integer(2); - public static final Integer FONT_FAMILY = new Integer(3); + public static final Integer FONT_NAME = new Integer(3); public static final Integer FONT_SIZE = new Integer(4); - public static final Integer FONT_WEIGHT = new Integer(5); - public static final Integer FONT_STYLE = new Integer(6); public static final Integer COLOR = new Integer(7); public static final Integer ID_AREA = new Integer(8); public static final Integer BACKGROUND = new Integer(9); @@ -42,8 +40,6 @@ public class Trait implements Serializable { public static final Integer PADDING_BEFORE = new Integer(21); public static final Integer PADDING_AFTER = new Integer(22); - public static final Integer FONT_STATE = new Integer(100); - static HashMap s_hmTraitInfo; private static class TraitInfo { @@ -64,14 +60,10 @@ public class Trait implements Serializable { new TraitInfo("internal-link", String.class)); s_hmTraitInfo.put(EXTERNAL_LINK, new TraitInfo("external-link", String.class)); - s_hmTraitInfo.put(FONT_FAMILY, + s_hmTraitInfo.put(FONT_NAME, new TraitInfo("font-family", String.class)); s_hmTraitInfo.put(FONT_SIZE, new TraitInfo("font-size", Integer.class)); - s_hmTraitInfo.put(FONT_WEIGHT, - new TraitInfo("font-weight", Integer.class)); - s_hmTraitInfo.put(FONT_STYLE, - new TraitInfo("font-style", String.class)); s_hmTraitInfo.put(COLOR, new TraitInfo("color", String.class)); s_hmTraitInfo.put(ID_AREA, @@ -104,9 +96,6 @@ public class Trait implements Serializable { new TraitInfo("padding-before", Integer.class)); s_hmTraitInfo.put(PADDING_AFTER, new TraitInfo("padding-after", Integer.class)); - - s_hmTraitInfo.put(FONT_STATE, - new TraitInfo("font-state", FontState.class)); } public static String getTraitName(Object traitCode) { diff --git a/src/org/apache/fop/fo/PropertyManager.java b/src/org/apache/fop/fo/PropertyManager.java index 71a902539..2599cb0df 100644 --- a/src/org/apache/fop/fo/PropertyManager.java +++ b/src/org/apache/fop/fo/PropertyManager.java @@ -14,6 +14,7 @@ import org.apache.fop.datatypes.FODimension; import org.apache.fop.fo.TextInfo; // should be somewhere else probably... import org.apache.fop.layout.FontState; import org.apache.fop.layout.FontInfo; +import org.apache.fop.layout.FontMetric; import org.apache.fop.layout.BorderAndPadding; import org.apache.fop.layout.MarginProps; import org.apache.fop.layout.MarginInlineProps; @@ -68,7 +69,7 @@ public class PropertyManager { } - public FontState getFontState(FontInfo fontInfo) throws FOPException { + public FontState getFontState(FontInfo fontInfo) { if (fontState == null) { if (fontInfo == null) { fontInfo = m_fontInfo; @@ -78,14 +79,33 @@ public class PropertyManager { } String fontFamily = properties.get("font-family").getString(); String fontStyle = properties.get("font-style").getString(); - String fontWeight = properties.get("font-weight").getString(); + String fw = properties.get("font-weight").getString(); + int fontWeight = 400; + if(fw.equals("bolder")) { + // +100 from inherited + } else if(fw.equals("lighter")) { + // -100 from inherited + } else { + try { + fontWeight = Integer.parseInt(fw); + } catch(NumberFormatException nfe) { + } + } + fontWeight = ((int)fontWeight / 100) * 100; + if(fontWeight < 100) { + fontWeight = 100; + } else if(fontWeight > 900) { + fontWeight = 900; + } + // NOTE: this is incomplete. font-size may be specified with // various kinds of keywords too int fontSize = properties.get("font-size").getLength().mvalue(); int fontVariant = properties.get("font-variant").getEnum(); - // fontInfo is same for the whole FOP run but set in all FontState - fontState = new FontState(fontInfo, fontFamily, fontStyle, - fontWeight, fontSize, fontVariant); + String fname = fontInfo.fontLookup(fontFamily, fontStyle, + fontWeight); + FontMetric metrics = fontInfo.getMetricsFor(fname); + fontState = new FontState(fname, metrics, fontSize); } return fontState; } @@ -299,13 +319,7 @@ public class PropertyManager { public TextInfo getTextLayoutProps(FontInfo fontInfo) { if (textInfo == null) { textInfo = new TextInfo(); - try { textInfo.fs = getFontState(fontInfo); - } catch (FOPException fopex) { - /* log.error("Error setting FontState for characters: " + - fopex.getMessage());*/ - // Now what should we do ??? - } textInfo.color = properties.get("color").getColorType(); textInfo.verticalAlign = diff --git a/src/org/apache/fop/fo/Title.java b/src/org/apache/fop/fo/Title.java index ccbcaac83..9122296db 100644 --- a/src/org/apache/fop/fo/Title.java +++ b/src/org/apache/fop/fo/Title.java @@ -44,7 +44,7 @@ public class Title extends ToBeImplementedElement { BackgroundProps bProps = propMgr.getBackgroundProps(); // Common Font Properties - //FontState fontState = propMgr.getFontState(structHandler.getFontInfo()); + FontState fontState = propMgr.getFontState(structHandler.getFontInfo()); // Common Margin Properties-Inline MarginInlineProps mProps = propMgr.getMarginInlineProps(); diff --git a/src/org/apache/fop/layout/FontInfo.java b/src/org/apache/fop/layout/FontInfo.java index c8b6fa955..a6df5f54a 100644 --- a/src/org/apache/fop/layout/FontInfo.java +++ b/src/org/apache/fop/layout/FontInfo.java @@ -9,9 +9,19 @@ package org.apache.fop.layout; import java.util.HashMap; -import org.apache.fop.apps.FOPException; - +/** + * The fontinfo for the layout and rendering of a fo document. + * This stores the list of available fonts that are setup by + * the renderer. The font name can be retrieved for the + * family style and weight. + * Currently font supported font-variant small-caps is not + * implemented. + */ public class FontInfo { + public static final String DEFAULT_FONT = "any,normal,400"; + public static final int NORMAL = 400; + public static final int BOLD = 700; + HashMap usedFonts; HashMap triplets; // look up a font-triplet to find a font-name HashMap fonts; // look up a font-name to get a font (that implements FontMetric at least) @@ -22,8 +32,12 @@ public class FontInfo { this.usedFonts = new HashMap(); } + public boolean isSetupValid() { + return triplets.containsKey(DEFAULT_FONT); + } + public void addFontProperties(String name, String family, String style, - String weight) { + int weight) { /* * add the given family, style and weight as a lookup for the font * with the given name @@ -39,56 +53,92 @@ public class FontInfo { this.fonts.put(name, metrics); } + /** + * Lookup a font. + * Locate the font name for a given familyi, style and weight. + * The font name can then be used as a key as it is unique for + * the associated document. + * This also adds the font to the list of used fonts. + */ public String fontLookup(String family, String style, - String weight) throws FOPException { - return fontLookup(createFontKey(family, style, weight)); - } + int weight) { + String key; + // first try given parameters + key = createFontKey(family, style, weight); + String f = (String)triplets.get(key); + if(f == null) { + // then adjust weight, favouring normal or bold + f = findAdjustWeight(family, style, weight); + + // then try any family with orig weight + if(f == null) { + key = createFontKey("any", style, weight); + f = (String)triplets.get(key); + } - public String fontLookup(String key) throws FOPException { - - String f = (String)this.triplets.get(key); - if (f == null) { - int i = key.indexOf(','); - String s = "any" + key.substring(i); - f = (String)this.triplets.get(s); - if (f == null) { - f = (String)this.triplets.get("any,normal,normal"); - if (f == null) { - throw new FOPException("no default font defined by OutputConverter"); - } - //log.error("defaulted font to any,normal,normal"); + // then try any family with adjusted weight + if(f == null) { + f = findAdjustWeight(family, style, weight); } - //log.error("unknown font " + key - // + " so defaulted font to any"); + + // then use default + f = (String)triplets.get(DEFAULT_FONT); + } usedFonts.put(f, fonts.get(f)); return f; } - public boolean hasFont(String family, String style, String weight) { + /** + * Find a font with a given family and style by trying + * different font weights according to the spec. + */ + public String findAdjustWeight(String family, String style, + int weight) { + String key; + String f = null; + int newWeight = weight; + if(newWeight < 400) { + while(f == null && newWeight > 0) { + newWeight -= 100; + key = createFontKey(family, style, newWeight); + f = (String)triplets.get(key); + } + } else if(newWeight == 500) { + key = createFontKey(family, style, 400); + f = (String)triplets.get(key); + } else if(newWeight > 500) { + while(f == null && newWeight < 1000) { + newWeight += 100; + key = createFontKey(family, style, newWeight); + f = (String)triplets.get(key); + } + newWeight = weight; + while(f == null && newWeight > 400) { + newWeight -= 100; + key = createFontKey(family, style, newWeight); + f = (String)triplets.get(key); + } + } + if(f == null) { + key = createFontKey(family, style, 400); + f = (String)triplets.get(key); + } + + return f; + } + + public boolean hasFont(String family, String style, int weight) { String key = createFontKey(family, style, weight); - return this.triplets.get(key) != null; + return this.triplets.containsKey(key); } /** * Creates a key from the given strings */ public static String createFontKey(String family, String style, - String weight) { - int i; - - try { - i = Integer.parseInt(weight); - } catch (NumberFormatException e) { - i = 0; - } - - if (i > 600) - weight = "bold"; - else if (i > 0) - weight = "normal"; - + int weight) { return family + "," + style + "," + weight; } @@ -96,13 +146,18 @@ public class FontInfo { return this.fonts; } + /** + * This is used by the renderers to retrieve all the + * fonts used in the document. + * This is for embedded font or creating a list of used fonts. + */ public HashMap getUsedFonts() { return this.usedFonts; } - public FontMetric getMetricsFor(String fontName) throws FOPException { + public FontMetric getMetricsFor(String fontName) { usedFonts.put(fontName, fonts.get(fontName)); return (FontMetric)fonts.get(fontName); } - } + diff --git a/src/org/apache/fop/layout/FontState.java b/src/org/apache/fop/layout/FontState.java index 147e1198d..3ff676bd7 100644 --- a/src/org/apache/fop/layout/FontState.java +++ b/src/org/apache/fop/layout/FontState.java @@ -9,18 +9,16 @@ package org.apache.fop.layout; import java.util.HashMap; -import org.apache.fop.apps.FOPException; import org.apache.fop.fo.properties.FontVariant; import org.apache.fop.render.pdf.CodePointMapping; public class FontState { - private FontInfo _fontInfo; private String _fontName; private int _fontSize; private String _fontFamily; private String _fontStyle; - private String _fontWeight; + private int _fontWeight; private int _fontVariant; private FontMetric _metric; @@ -28,17 +26,10 @@ public class FontState { private static HashMap EMPTY_HASHMAP = new HashMap(); - public FontState(FontInfo fontInfo, String fontFamily, String fontStyle, - String fontWeight, int fontSize, - int fontVariant) throws FOPException { - _fontInfo = fontInfo; - _fontFamily = fontFamily; - _fontStyle = fontStyle; - _fontWeight = fontWeight; + public FontState(String key, FontMetric met, int fontSize) { _fontSize = fontSize; - _fontName = fontInfo.fontLookup(fontFamily, fontStyle, fontWeight); - _metric = fontInfo.getMetricsFor(_fontName); - _fontVariant = fontVariant; + _fontName = key; + _metric = met; } public int getAscender() { @@ -61,26 +52,6 @@ public class FontState { return _fontSize; } - public String getFontWeight() { - return _fontWeight; - } - - public String getFontFamily() { - return _fontFamily; - } - - public String getFontStyle() { - return _fontStyle; - } - - public int getFontVariant() { - return _fontVariant; - } - - public FontInfo getFontInfo() { - return _fontInfo; - } - public int getXHeight() { return _metric.getXHeight(_fontSize) / 1000; } diff --git a/src/org/apache/fop/layoutmgr/TextBPLayoutManager.java b/src/org/apache/fop/layoutmgr/TextBPLayoutManager.java index 45466c1d6..08052e9ec 100644 --- a/src/org/apache/fop/layoutmgr/TextBPLayoutManager.java +++ b/src/org/apache/fop/layoutmgr/TextBPLayoutManager.java @@ -527,8 +527,8 @@ public class TextBPLayoutManager extends AbstractBPLayoutManager { curWordArea.info.blOffset = true; curWordArea.setWord(str); - //curWordArea.addTrait(new Trait(Trait.FONT_STATE, textInfo.fs)); - curWordArea.addTrait(Trait.FONT_STATE, textInfo.fs); + curWordArea.addTrait(Trait.FONT_NAME, textInfo.fs.getFontName()); + curWordArea.addTrait(Trait.FONT_SIZE, new Integer(textInfo.fs.getFontSize())); return curWordArea; } diff --git a/src/org/apache/fop/layoutmgr/TextLayoutManager.java b/src/org/apache/fop/layoutmgr/TextLayoutManager.java index a8a31096c..0cfcc3da3 100644 --- a/src/org/apache/fop/layoutmgr/TextLayoutManager.java +++ b/src/org/apache/fop/layoutmgr/TextLayoutManager.java @@ -247,7 +247,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager { curWordArea.setWord(str); // curWordArea.addTrait(new Trait(Trait.FONT_STATE, textInfo.fs)); - curWordArea.addTrait(Trait.FONT_STATE, textInfo.fs); + //curWordArea.addTrait(Trait.FONT_STATE, textInfo.fs); return curWordArea; } diff --git a/src/org/apache/fop/render/awt/FontSetup.java b/src/org/apache/fop/render/awt/FontSetup.java index e0e6d0669..341279178 100644 --- a/src/org/apache/fop/render/awt/FontSetup.java +++ b/src/org/apache/fop/render/awt/FontSetup.java @@ -102,83 +102,74 @@ public class FontSetup { // fontInfo.addMetrics("F17", new BauerBodoniBoldItalic()); /* 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"); - fontInfo.addFontProperties("F13", "Symbol", "normal", "normal"); - fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", "normal"); + fontInfo.addFontProperties("F5", "any", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "any", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "any", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "any", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "any", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "any", "oblique", FontInfo.BOLD); + + fontInfo.addFontProperties("F1", "sans-serif", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "sans-serif", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "sans-serif", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F3", "sans-serif", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "sans-serif", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "sans-serif", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F5", "serif", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "serif", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "serif", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "serif", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "serif", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "serif", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F9", "monospace", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "monospace", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "monospace", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F11", "monospace", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "monospace", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "monospace", "italic", FontInfo.BOLD); + + fontInfo.addFontProperties("F1", "Helvetica", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "Helvetica", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "Helvetica", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F3", "Helvetica", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "Helvetica", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "Helvetica", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F5", "Times", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "Times", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F9", "Courier", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "Courier", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "Courier", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F11", "Courier", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "Courier", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "Courier", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F13", "Symbol", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", FontInfo.NORMAL); // Custom type 1 fonts step 2/2 - // fontInfo.addFontProperties("F15", "OMEP", "normal", "normal"); - // fontInfo.addFontProperties("F16", "Garamond-LightCondensed", "normal", "normal"); - // fontInfo.addFontProperties("F17", "BauerBodoni", "italic", "bold"); + // fontInfo.addFontProperties("F15", "OMEP", "normal", FontInfo.NORMAL); + // fontInfo.addFontProperties("F16", "Garamond-LightCondensed", "normal", FontInfo.NORMAL); + // fontInfo.addFontProperties("F17", "BauerBodoni", "italic", FontInfo.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("F5", "Times-Roman", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times-Roman", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times-Roman", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "Times-Roman", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times-Roman", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times-Roman", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F5", "Times Roman", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times Roman", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times Roman", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "Times Roman", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times Roman", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times Roman", "italic", FontInfo.BOLD); fontInfo.addFontProperties("F9", "Computer-Modern-Typewriter", - "normal", "normal"); + "normal", FontInfo.NORMAL); } } - - - - - - - - - diff --git a/src/org/apache/fop/render/pdf/FontSetup.java b/src/org/apache/fop/render/pdf/FontSetup.java index 234c48219..221020bbe 100644 --- a/src/org/apache/fop/render/pdf/FontSetup.java +++ b/src/org/apache/fop/render/pdf/FontSetup.java @@ -60,73 +60,73 @@ public class FontSetup { // fontInfo.addMetrics("F17", new BauerBodoniBoldItalic()); /* 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"); - fontInfo.addFontProperties("F13", "Symbol", "normal", "normal"); - fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", "normal"); + fontInfo.addFontProperties("F5", "any", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "any", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "any", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "any", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "any", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "any", "oblique", FontInfo.BOLD); + + fontInfo.addFontProperties("F1", "sans-serif", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "sans-serif", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "sans-serif", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F3", "sans-serif", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "sans-serif", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "sans-serif", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F5", "serif", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "serif", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "serif", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "serif", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "serif", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "serif", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F9", "monospace", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "monospace", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "monospace", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F11", "monospace", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "monospace", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "monospace", "italic", FontInfo.BOLD); + + fontInfo.addFontProperties("F1", "Helvetica", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "Helvetica", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F2", "Helvetica", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F3", "Helvetica", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "Helvetica", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F4", "Helvetica", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F5", "Times", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "Times", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F9", "Courier", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "Courier", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F10", "Courier", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F11", "Courier", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "Courier", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F12", "Courier", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F13", "Symbol", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", FontInfo.NORMAL); // Custom type 1 fonts step 2/2 - // fontInfo.addFontProperties("F15", "OMEP", "normal", "normal"); - // fontInfo.addFontProperties("F16", "Garamond-LightCondensed", "normal", "normal"); - // fontInfo.addFontProperties("F17", "BauerBodoni", "italic", "bold"); + // fontInfo.addFontProperties("F15", "OMEP", "normal", FontInfo.NORMAL); + // fontInfo.addFontProperties("F16", "Garamond-LightCondensed", "normal", FontInfo.NORMAL); + // fontInfo.addFontProperties("F17", "BauerBodoni", "italic", FontInfo.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("F5", "Times-Roman", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times-Roman", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times-Roman", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "Times-Roman", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times-Roman", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times-Roman", "italic", FontInfo.BOLD); + fontInfo.addFontProperties("F5", "Times Roman", "normal", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times Roman", "oblique", FontInfo.NORMAL); + fontInfo.addFontProperties("F6", "Times Roman", "italic", FontInfo.NORMAL); + fontInfo.addFontProperties("F7", "Times Roman", "normal", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times Roman", "oblique", FontInfo.BOLD); + fontInfo.addFontProperties("F8", "Times Roman", "italic", FontInfo.BOLD); fontInfo.addFontProperties("F9", "Computer-Modern-Typewriter", - "normal", "normal"); + "normal", FontInfo.NORMAL); /* Add configured fonts */ addConfiguredFonts(fontInfo, 15); @@ -169,10 +169,19 @@ public class FontSetup { for (int c = 0; c < triplets.size(); c++) { FontTriplet triplet = (FontTriplet)triplets.get(c); + int weight = 400; + try { + weight = Integer.parseInt(triplet.getWeight()); + weight = ((int)weight/100) * 100; + if(weight < 100) weight = 100; + if(weight > 900) weight = 900; + } catch(NumberFormatException nfe) { + + } fontInfo.addFontProperties(internalName, triplet.getName(), triplet.getStyle(), - triplet.getWeight()); + weight); } } } catch (Exception ex) { diff --git a/src/org/apache/fop/render/pdf/PDFRenderer.java b/src/org/apache/fop/render/pdf/PDFRenderer.java index bb62565ae..ac493e142 100644 --- a/src/org/apache/fop/render/pdf/PDFRenderer.java +++ b/src/org/apache/fop/render/pdf/PDFRenderer.java @@ -25,6 +25,8 @@ import org.apache.fop.area.*; import org.apache.fop.area.inline.*; import org.apache.fop.area.inline.Character; import org.apache.fop.layout.FontState; +import org.apache.fop.layout.FontInfo; +import org.apache.fop.layout.FontMetric; import org.w3c.dom.Document; @@ -224,6 +226,7 @@ public class PDFRenderer extends PrintRenderer { currentStream.add("1 0 0 -1 0 " + (int) Math.round(pageHeight / 1000) + " cm\n"); //currentStream.add("BT\n"); + currentFontName = ""; Page p = page.getPage(); renderPageAreas(p); @@ -274,14 +277,11 @@ public class PDFRenderer extends PrintRenderer { public void renderWord(Word word) { StringBuffer pdf = new StringBuffer(); - FontState fs = null; - - fs = (FontState)word.getTrait(Trait.FONT_STATE); - String name = fs.getFontName(); - int size = fs.getFontSize(); + String name = (String)word.getTrait(Trait.FONT_NAME); + int size = ((Integer)word.getTrait(Trait.FONT_SIZE)).intValue(); // This assumes that *all* CIDFonts use a /ToUnicode mapping - Font f = (Font)fs.getFontInfo().getFonts().get(name); + Font f = (Font)fontInfo.getFonts().get(name); boolean useMultiByte = f.isMultiByte(); // String startText = useMultiByte ? "