diff options
Diffstat (limited to 'src/java/org/apache/fop/render')
36 files changed, 1466 insertions, 528 deletions
diff --git a/src/java/org/apache/fop/render/AbstractRenderer.java b/src/java/org/apache/fop/render/AbstractRenderer.java index 50c314f15..e2d314885 100644 --- a/src/java/org/apache/fop/render/AbstractRenderer.java +++ b/src/java/org/apache/fop/render/AbstractRenderer.java @@ -69,18 +69,13 @@ import org.apache.fop.fonts.FontInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -// Avalon -import org.apache.avalon.framework.configuration.Configurable; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; - /** * Abstract base class for all renderers. The Abstract renderer does all the * top level processing of the area tree and adds some abstract methods to * handle viewports. This keeps track of the current block and inline position. */ public abstract class AbstractRenderer - implements Renderer, Configurable, Constants { + implements Renderer, Constants { /** logging instance */ protected static Log log = LogFactory.getLog("org.apache.fop.render"); @@ -118,12 +113,6 @@ public abstract class AbstractRenderer private Set warnedXMLHandlers; /** - * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration) - */ - public void configure(Configuration conf) throws ConfigurationException { - } - - /** * @see org.apache.fop.render.Renderer#setupFontInfo(FontInfo) */ public abstract void setupFontInfo(FontInfo fontInfo); @@ -805,39 +794,6 @@ public abstract class AbstractRenderer } /** - * Returns the configuration subtree for a specific renderer. - * @param cfg the renderer configuration - * @param namespace the namespace (i.e. the XMLHandler) for which the configuration should - * be returned - * @return the requested configuration subtree, null if there's no configuration - */ - public static Configuration getHandlerConfig(Configuration cfg, String namespace) { - - if (cfg == null || namespace == null) { - return null; - } - - Configuration handlerConfig = null; - - Configuration[] children = cfg.getChildren("xml-handler"); - for (int i = 0; i < children.length; ++i) { - try { - if (children[i].getAttribute("namespace").equals(namespace)) { - handlerConfig = children[i]; - break; - } - } catch (ConfigurationException e) { - // silently pass over configurations without namespace - } - } - if (log.isDebugEnabled()) { - log.debug((handlerConfig == null ? "No" : "") - + "XML handler configuration found for namespace " + namespace); - } - return handlerConfig; - } - - /** * Render the xml document with the given xml namespace. * The Render Context is by the handle to render into the current * rendering target. @@ -851,15 +807,9 @@ public abstract class AbstractRenderer this, namespace); if (handler != null) { try { - //Optional XML handler configuration - Configuration cfg = userAgent.getFactory().getUserRendererConfig(getMimeType()); - if (cfg != null) { - cfg = getHandlerConfig(cfg, namespace); - if (cfg != null) { - ctx.setProperty(RendererContextConstants.HANDLER_CONFIGURATION, cfg); - } - } - + XMLHandlerConfigurator configurator + = new XMLHandlerConfigurator(userAgent); + configurator.configure(ctx, namespace); handler.handleXML(ctx, doc, namespace); } catch (Throwable t) { // could not handle document @@ -887,6 +837,4 @@ public abstract class AbstractRenderer public String getMimeType() { return null; } - } - diff --git a/src/java/org/apache/fop/render/AbstractRendererConfigurator.java b/src/java/org/apache/fop/render/AbstractRendererConfigurator.java new file mode 100644 index 000000000..1e485735b --- /dev/null +++ b/src/java/org/apache/fop/render/AbstractRendererConfigurator.java @@ -0,0 +1,91 @@ +/* + * 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.render; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fop.apps.FOUserAgent; + +/** + * Abstract base classes for renderer-related configurator classes. This class basically just + * provides an accessor to the specific renderer configuration object. + */ +public abstract class AbstractRendererConfigurator { + + /** logger instance */ + protected static Log log = LogFactory.getLog(AbstractRendererConfigurator.class); + + /** fop factory configuration */ + protected FOUserAgent userAgent = null; + + /** + * Default constructor + * @param userAgent user agent + */ + public AbstractRendererConfigurator(FOUserAgent userAgent) { + super(); + this.userAgent = userAgent; + } + + + /** + * Returns the configuration subtree for a specific renderer. + * @param renderer the renderer + * @return the requested configuration subtree, null if there's no configuration + */ + protected Configuration getRendererConfig(Renderer renderer) { + Configuration cfg = userAgent.getFactory().getUserConfig(); + if (cfg == null) { + if (log.isDebugEnabled()) { + log.debug("userconfig is null"); + } + return null; + } + + String mimeType = renderer.getMimeType(); + if (mimeType == null) { + if (log.isInfoEnabled()) { + log.info("renderer mimeType is null"); + } + return null; + } + + Configuration userRendererConfig = null; + + Configuration[] cfgs + = cfg.getChild("renderers").getChildren("renderer"); + for (int i = 0; i < cfgs.length; ++i) { + Configuration child = cfgs[i]; + try { + if (child.getAttribute("mime").equals(mimeType)) { + userRendererConfig = child; + break; + } + } catch (ConfigurationException e) { + // silently pass over configurations without mime type + } + } + log.debug((userRendererConfig == null ? "No u" : "U") + + "ser configuration found for MIME type " + mimeType); + return userRendererConfig; + } +} diff --git a/src/java/org/apache/fop/render/AbstractRendererMaker.java b/src/java/org/apache/fop/render/AbstractRendererMaker.java index 0c6bea631..ab1ddb338 100644 --- a/src/java/org/apache/fop/render/AbstractRendererMaker.java +++ b/src/java/org/apache/fop/render/AbstractRendererMaker.java @@ -29,10 +29,10 @@ public abstract class AbstractRendererMaker { /**
* Instantiates a new renderer.
- * @param ua the user agent
+ * @param userAgent the user agent
* @return the newly instantiated renderer
*/
- public abstract Renderer makeRenderer(FOUserAgent ua);
+ public abstract Renderer makeRenderer(FOUserAgent userAgent);
/**
* @return Indicates whether this renderer requires an OutputStream to work with.
@@ -45,6 +45,16 @@ public abstract class AbstractRendererMaker { public abstract String[] getSupportedMimeTypes();
/**
+ * Returns a renderer config object that can be used to
+ * configure the renderer.
+ * @param userAgent user agent
+ * @return a config object that can be used to configure the renderer
+ */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return null;
+ }
+
+ /**
* Indicates whether a specific MIME type is supported by this renderer.
* @param mimeType the MIME type (ex. "application/pdf")
* @return true if the MIME type is supported
@@ -58,5 +68,4 @@ public abstract class AbstractRendererMaker { }
return false;
}
-
}
diff --git a/src/java/org/apache/fop/render/PrintRenderer.java b/src/java/org/apache/fop/render/PrintRenderer.java index 6a3cdf2c6..f725bd711 100644 --- a/src/java/org/apache/fop/render/PrintRenderer.java +++ b/src/java/org/apache/fop/render/PrintRenderer.java @@ -46,8 +46,27 @@ public abstract class PrintRenderer extends AbstractRenderer { /** list of fonts */ protected List fontList = null; + + /** + * adds a font list to current list of fonts + * @param fontInfoList font list + */ + public void addFontList(List fontInfoList) { + if (this.fontList == null) { + setFontList(fontInfoList); + } else { + this.fontList.addAll(fontInfoList); + } + } /** + * @param fontList list of available fonts + */ + public void setFontList(List fontList) { + this.fontList = fontList; + } + + /** * Set up the font info * * @param inFontInfo font info to set up diff --git a/src/java/org/apache/fop/render/PrintRendererConfigurator.java b/src/java/org/apache/fop/render/PrintRendererConfigurator.java new file mode 100644 index 000000000..d9b922965 --- /dev/null +++ b/src/java/org/apache/fop/render/PrintRendererConfigurator.java @@ -0,0 +1,332 @@ +/* + * 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.render; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Iterator; +import java.util.List; + +import javax.xml.transform.stream.StreamSource; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.commons.io.FileUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.apps.FopFactory; +import org.apache.fop.fonts.CachedFontInfo; +import org.apache.fop.fonts.EmbedFontInfo; +import org.apache.fop.fonts.FontCache; +import org.apache.fop.fonts.FontInfo; +import org.apache.fop.fonts.FontResolver; +import org.apache.fop.fonts.FontSetup; +import org.apache.fop.fonts.FontTriplet; +import org.apache.fop.fonts.FontUtil; +import org.apache.fop.fonts.autodetect.FontFileFinder; +import org.apache.fop.fonts.autodetect.FontInfoFinder; +import org.apache.fop.util.LogUtil; + +/** + * Base Print renderer configurator (mostly handles font configuration) + */ +public class PrintRendererConfigurator extends AbstractRendererConfigurator + implements RendererConfigurator { + + /** have we already autodetected system fonts? */ + private static boolean autodetectedFonts = false; + + /** logger instance */ + protected static Log log = LogFactory.getLog(PrintRendererConfigurator.class); + + /** + * Default constructor + * @param userAgent user agent + */ + public PrintRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Builds a list of EmbedFontInfo objects for use with the setup() method. + * + * @param renderer print renderer + * @throws FOPException if something's wrong with the config data + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = getRendererConfig(renderer); + if (cfg == null) { + return; + } + + PrintRenderer printRenderer = (PrintRenderer)renderer; + FontResolver fontResolver = printRenderer.getFontResolver(); + if (fontResolver == null) { + //Ensure that we have minimal font resolution capabilities + fontResolver = FontSetup.createMinimalFontResolver(); + } + + FopFactory factory = userAgent.getFactory(); + boolean strict = factory.validateUserConfigStrictly(); + FontCache fontCache = factory.getFontCache(); + + List fontInfoList = buildFontListFromConfiguration(cfg, + userAgent.getFontBaseURL(), fontResolver, strict, + fontCache); + + if (fontCache != null && fontCache.hasChanged()) { + fontCache.save(); + } + printRenderer.addFontList(fontInfoList); + } + + /** + * Builds a list of EmbedFontInfo objects for use with the setup() method. + * + * @param cfg Configuration object + * @param fontBaseURL the base URL to resolve relative font URLs with + * @param fontResolver the FontResolver to use + * @param strict true if an Exception should be thrown if an error is found. + * @param fontCache the font cache (or null if it is disabled) + * @return a List of EmbedFontInfo objects. + * @throws FOPException If an error occurs while processing the configuration + */ + public static List buildFontListFromConfiguration(Configuration cfg, + String fontBaseURL, FontResolver fontResolver, + boolean strict, FontCache fontCache) throws FOPException { + List fontInfoList = new java.util.ArrayList(); + + Configuration fonts = cfg.getChild("fonts"); + if (fonts != null) { + long start = 0; + if (log.isDebugEnabled()) { + log.debug("Starting font configuration..."); + start = System.currentTimeMillis(); + } + + // native o/s search (autodetect) configuration + boolean autodetectFonts = (fonts.getChild("auto-detect", false) != null); + if (!autodetectedFonts && autodetectFonts) { + // search in font base if it is defined and + // is a directory but don't recurse + FontFileFinder fontFileFinder = new FontFileFinder(); + if (fontBaseURL != null) { + try { + File fontBase = FileUtils.toFile(new URL(fontBaseURL)); + if (fontBase != null) { + //Can only use the font base URL if it's a file URL + addFontInfoListFromFileList( + fontFileFinder.find(fontBase.getAbsolutePath()), + fontInfoList, + fontResolver, + fontCache + ); + } + } catch (IOException e) { + LogUtil.handleException(log, e, strict); + } + } + + // native o/s font directory finder + try { + addFontInfoListFromFileList( + fontFileFinder.find(), + fontInfoList, + fontResolver, + fontCache + ); + } catch (IOException e) { + LogUtil.handleException(log, e, strict); + } + autodetectedFonts = true; + } + + // directory (multiple font) configuration + Configuration[] directories = fonts.getChildren("directory"); + for (int i = 0; i < directories.length; i++) { + boolean recursive = directories[i].getAttributeAsBoolean("recursive", false); + String directory = null; + try { + directory = directories[i].getValue(); + } catch (ConfigurationException e) { + LogUtil.handleException(log, e, strict); + continue; + } + if (directory == null) { + LogUtil.handleException(log, + new FOPException("directory defined without value"), strict); + continue; + } + FontFileFinder fontFileFinder = new FontFileFinder(recursive ? -1 : 1); + try { + addFontInfoListFromFileList( + fontFileFinder.find(directory), + fontInfoList, + fontResolver, + fontCache + ); + } catch (IOException e) { + LogUtil.handleException(log, e, strict); + } + } + + // font file (singular) configuration + Configuration[] font = fonts.getChildren("font"); + for (int i = 0; i < font.length; i++) { + EmbedFontInfo fontInfo = getFontInfoFromConfiguration( + font[i], fontResolver, strict, fontCache); + if (fontInfo != null) { + fontInfoList.add(fontInfo); + } + } + if (log.isDebugEnabled()) { + log.debug("Finished font configuration in " + + (System.currentTimeMillis() - start) + "ms"); + } + } + return fontInfoList; + } + + /** + * Iterates over font file list adding font info to list + * @param fontFileList font file list + * @param fontInfoList font info list + * @param resolver font resolver + */ + private static void addFontInfoListFromFileList( + List fontFileList, List fontInfoList, FontResolver resolver, FontCache fontCache) { + for (Iterator iter = fontFileList.iterator(); iter.hasNext();) { + File fontFile = (File)iter.next(); + // parse font to ascertain font info + FontInfoFinder finder = new FontInfoFinder(); + EmbedFontInfo fontInfo = finder.find(fontFile, resolver, fontCache); + if (fontInfo != null) { + fontInfoList.add(fontInfo); + } + } + } + + /** + * Returns a font info from a font node Configuration definition + * + * @param fontCfg Configuration object (font node) + * @param fontResolver font resolver used to resolve font + * @param strict validate configuration strictly + * @param fontCache the font cache (or null if it is disabled) + * @return font info + * @throws FOPException if something's wrong with the config data + */ + public static EmbedFontInfo getFontInfoFromConfiguration( + Configuration fontCfg, FontResolver fontResolver, boolean strict, FontCache fontCache) + throws FOPException { + String metricsUrl = fontCfg.getAttribute("metrics-url", null); + String embedUrl = fontCfg.getAttribute("embed-url", null); + + if (metricsUrl == null && embedUrl == null) { + LogUtil.handleError(log, "Font configuration without metric-url or embed-url", strict); + return null; + } + if (embedUrl != null) { + StreamSource source = (StreamSource)fontResolver.resolve(embedUrl); + if (source == null) { + LogUtil.handleError(log, + "Failed to resolve font with embed-url '" + embedUrl + "'", strict); + return null; + } + embedUrl = source.getSystemId(); // absolute path/url + } + if (metricsUrl != null) { + StreamSource source = (StreamSource)fontResolver.resolve(metricsUrl); + if (source == null) { + LogUtil.handleError(log, + "Failed to resolve font with metric-url '" + metricsUrl + "'", strict); + return null; + } + metricsUrl = source.getSystemId(); // absolute path/url + } + boolean useKerning = fontCfg.getAttributeAsBoolean("kerning", true); + + EmbedFontInfo fontInfo = null; + Configuration[] tripletCfg = fontCfg.getChildren("font-triplet"); + // no font triplet info + if (tripletCfg.length == 0) { + LogUtil.handleError(log, "font without font-triplet", strict); + + // if not strict try to determine font info from the embed/metrics url + File fontFile = CachedFontInfo.getFileFromUrls(new String[] {embedUrl, metricsUrl}); + if (fontFile != null) { + FontInfoFinder finder = new FontInfoFinder(); + return finder.find(fontFile, fontResolver, fontCache); + } else { + return null; + } + } else { + List tripleList = new java.util.ArrayList(); + for (int j = 0; j < tripletCfg.length; j++) { + try { + String name = tripletCfg[j].getAttribute("name"); + if (name == null) { + LogUtil.handleError(log, "font-triplet without name", strict); + continue; + } + String weightStr = tripletCfg[j].getAttribute("weight"); + if (weightStr == null) { + LogUtil.handleError(log, "font-triplet without weight", strict); + continue; + } + int weight = FontUtil.parseCSS2FontWeight(weightStr); + String style = tripletCfg[j].getAttribute("style"); + if (style == null) { + LogUtil.handleError(log, "font-triplet without style", strict); + continue; + } + tripleList.add(FontInfo.createFontKey(name, style, weight)); + } catch (ConfigurationException e) { + LogUtil.handleException(log, e, strict); + } + } + + fontInfo = new EmbedFontInfo(metricsUrl, useKerning, tripleList, embedUrl); + + if (fontCache != null) { + if (!fontCache.containsFont(fontInfo)) { + fontCache.addFont(fontInfo); + } + } + + if (log.isDebugEnabled()) { + log.debug("Adding font " + fontInfo.getEmbedFile() + + ", metric file " + fontInfo.getMetricsFile()); + for (int j = 0; j < tripleList.size(); ++j) { + FontTriplet triplet = (FontTriplet) tripleList.get(j); + log.debug(" Font triplet " + + triplet.getName() + ", " + + triplet.getStyle() + ", " + + triplet.getWeight()); + } + } + } + return fontInfo; + } + +} diff --git a/src/java/org/apache/fop/render/RendererConfigurator.java b/src/java/org/apache/fop/render/RendererConfigurator.java new file mode 100644 index 000000000..566daf07d --- /dev/null +++ b/src/java/org/apache/fop/render/RendererConfigurator.java @@ -0,0 +1,34 @@ +/* + * 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.render; + +import org.apache.fop.apps.FOPException; + +/** + * Renderer configurator interface + */ +public interface RendererConfigurator { + /** + * Configures a renderer + * @param renderer renderer + * @throws FOPException fop exception + */ + void configure(Renderer renderer) throws FOPException; +} diff --git a/src/java/org/apache/fop/render/RendererContext.java b/src/java/org/apache/fop/render/RendererContext.java index 49f53b327..feffc05ed 100644 --- a/src/java/org/apache/fop/render/RendererContext.java +++ b/src/java/org/apache/fop/render/RendererContext.java @@ -23,7 +23,6 @@ package org.apache.fop.render; import java.util.Map; //FOP -import org.apache.avalon.framework.configuration.Configuration; import org.apache.fop.apps.FOUserAgent; /** @@ -156,17 +155,10 @@ public class RendererContext { return ((Integer)context.getProperty(RendererContextConstants.HEIGHT)).intValue(); } - /** @return the handler configuration */ - public Configuration getHandlerConfiguration() { - return (Configuration)context.getProperty( - RendererContextConstants.HANDLER_CONFIGURATION); - } - /** @return the foreign attributes */ public Map getForeignAttributes() { return (Map)context.getProperty(RendererContextConstants.FOREIGN_ATTRIBUTES); - } - + } } } diff --git a/src/java/org/apache/fop/render/RendererFactory.java b/src/java/org/apache/fop/render/RendererFactory.java index 4d3f3a12c..d81f900e0 100644 --- a/src/java/org/apache/fop/render/RendererFactory.java +++ b/src/java/org/apache/fop/render/RendererFactory.java @@ -25,9 +25,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; -import org.apache.avalon.framework.container.ContainerUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -185,18 +182,9 @@ public class RendererFactory { } Renderer rend = maker.makeRenderer(userAgent); rend.setUserAgent(userAgent); - String mimeType = rend.getMimeType(); //Always use main MIME type for this - Configuration userRendererConfig = null; - if (mimeType != null) { - userRendererConfig - = userAgent.getFactory().getUserRendererConfig(mimeType); - } - if (userRendererConfig != null) { - try { - ContainerUtil.configure(rend, userRendererConfig); - } catch (ConfigurationException e) { - throw new FOPException(e); - } + RendererConfigurator configurator = maker.getConfigurator(userAgent); + if (configurator != null) { + configurator.configure(rend); } return rend; } diff --git a/src/java/org/apache/fop/render/XMLHandlerConfigurator.java b/src/java/org/apache/fop/render/XMLHandlerConfigurator.java new file mode 100644 index 000000000..bf63329d7 --- /dev/null +++ b/src/java/org/apache/fop/render/XMLHandlerConfigurator.java @@ -0,0 +1,92 @@ +/* + * 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.render; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; + +/** + * Configurator for XMLHandler objects. + */ +public class XMLHandlerConfigurator extends AbstractRendererConfigurator { + + /** logger instance */ + protected static Log log = LogFactory.getLog(XMLHandlerConfigurator.class); + + /** + * Default constructor + * @param userAgent the user agent + */ + public XMLHandlerConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Returns the configuration subtree for a specific renderer. + * @param cfg the renderer configuration + * @param namespace the namespace (i.e. the XMLHandler) for which the configuration should + * be returned + * @return the requested configuration subtree, null if there's no configuration + */ + private Configuration getHandlerConfig(Configuration cfg, String namespace) { + if (cfg == null || namespace == null) { + return null; + } + Configuration handlerConfig = null; + + Configuration[] children = cfg.getChildren("xml-handler"); + for (int i = 0; i < children.length; ++i) { + try { + if (children[i].getAttribute("namespace").equals(namespace)) { + handlerConfig = children[i]; + break; + } + } catch (ConfigurationException e) { + // silently pass over configurations without namespace + } + } + if (log.isDebugEnabled()) { + log.debug((handlerConfig == null ? "No" : "") + + "XML handler configuration found for namespace " + namespace); + } + return handlerConfig; + } + + /** + * Configures renderer context by setting the handler configuration on it. + * @param context the RendererContext (contains the user agent) + * @param ns the Namespace of the foreign object + * @throws FOPException if configuring the target objects fails + */ + public void configure(RendererContext context, String ns) throws FOPException { + //Optional XML handler configuration + Configuration cfg = getRendererConfig(context.getRenderer()); + if (cfg != null) { + cfg = getHandlerConfig(cfg, ns); + if (cfg != null) { + context.setProperty(RendererContextConstants.HANDLER_CONFIGURATION, cfg); + } + } + } +} diff --git a/src/java/org/apache/fop/render/afp/AFPRenderer.java b/src/java/org/apache/fop/render/afp/AFPRenderer.java index 78d8b7d0a..ea1087893 100644 --- a/src/java/org/apache/fop/render/afp/AFPRenderer.java +++ b/src/java/org/apache/fop/render/afp/AFPRenderer.java @@ -33,8 +33,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.MimeConstants; @@ -57,8 +55,6 @@ import org.apache.fop.fo.extensions.ExtensionAttachment; import org.apache.fop.fonts.FontInfo; import org.apache.fop.fonts.FontMetrics; import org.apache.fop.fonts.FontTriplet; -import org.apache.fop.fonts.FontUtil; -import org.apache.fop.fonts.Typeface; import org.apache.fop.fonts.base14.Courier; import org.apache.fop.fonts.base14.Helvetica; import org.apache.fop.fonts.base14.TimesRoman; @@ -76,7 +72,6 @@ import org.apache.fop.render.afp.fonts.AFPFont; import org.apache.fop.render.afp.fonts.CharacterSet; import org.apache.fop.render.afp.fonts.FopCharacterSet; import org.apache.fop.render.afp.fonts.OutlineFont; -import org.apache.fop.render.afp.fonts.RasterFont; import org.apache.fop.render.afp.modca.AFPConstants; import org.apache.fop.render.afp.modca.AFPDataStream; import org.apache.fop.render.afp.modca.ImageObject; @@ -303,195 +298,6 @@ public class AFPRenderer extends AbstractPathOrientedRenderer { } /** - */ - private AFPFontInfo buildFont(Configuration fontCfg, String _path) - throws ConfigurationException { - - Configuration[] triple = fontCfg.getChildren("font-triplet"); - List tripleList = new java.util.ArrayList(); - if (triple.length == 0) { - log.error("Mandatory font configuration element '<font-triplet...' is missing"); - return null; - } - for (int j = 0; j < triple.length; j++) { - int weight = FontUtil.parseCSS2FontWeight(triple[j].getAttribute("weight")); - tripleList.add(new FontTriplet(triple[j].getAttribute("name"), - triple[j].getAttribute("style"), - weight)); - } - - //build the fonts - Configuration afpFontCfg = fontCfg.getChild("afp-font"); - if (afpFontCfg == null) { - log.error("Mandatory font configuration element '<afp-font...' is missing"); - return null; - } - String path = afpFontCfg.getAttribute("path", _path); - String type = afpFontCfg.getAttribute("type"); - if (type == null) { - log.error("Mandatory afp-font configuration attribute 'type=' is missing"); - return null; - } - String codepage = afpFontCfg.getAttribute("codepage"); - if (codepage == null) { - log.error("Mandatory afp-font configuration attribute 'code=' is missing"); - return null; - } - String encoding = afpFontCfg.getAttribute("encoding"); - if (encoding == null) { - log.error("Mandatory afp-font configuration attribute 'encoding=' is missing"); - return null; - } - - if ("raster".equalsIgnoreCase(type)) { - - String name = afpFontCfg.getAttribute("name", "Unknown"); - - // Create a new font object - RasterFont font = new RasterFont(name); - - Configuration[] rasters = afpFontCfg.getChildren("afp-raster-font"); - if (rasters.length == 0) { - log.error("Mandatory font configuration elements '<afp-raster-font...' are missing"); - return null; - } - for (int j = 0; j < rasters.length; j++) { - Configuration rasterCfg = rasters[j]; - - String characterset = rasterCfg.getAttribute("characterset"); - if (characterset == null) { - log.error("Mandatory afp-raster-font configuration attribute 'characterset=' is missing"); - return null; - } - int size = rasterCfg.getAttributeAsInteger("size"); - String base14 = rasterCfg.getAttribute("base14-font", null); - - if (base14 != null) { - try { - Class clazz = Class.forName("org.apache.fop.fonts.base14." - + base14); - try { - Typeface tf = (Typeface)clazz.newInstance(); - font.addCharacterSet(size, new FopCharacterSet( - codepage, encoding, characterset, size, tf)); - } catch (Exception ie) { - String msg = "The base 14 font class " + clazz.getName() - + " could not be instantiated"; - log.error(msg); - } - } catch (ClassNotFoundException cnfe) { - String msg = "The base 14 font class for " + characterset - + " could not be found"; - log.error(msg); - } - } else { - font.addCharacterSet(size, new CharacterSet( - codepage, encoding, characterset, path)); - } - } - return new AFPFontInfo(font, tripleList); - - } else if ("outline".equalsIgnoreCase(type)) { - - String characterset = afpFontCfg.getAttribute("characterset"); - if (characterset == null) { - log.error("Mandatory afp-font configuration attribute 'characterset=' is missing"); - return null; - } - String name = afpFontCfg.getAttribute("name", characterset); - - CharacterSet characterSet = null; - - String base14 = afpFontCfg.getAttribute("base14-font", null); - - if (base14 != null) { - try { - Class clazz = Class.forName("org.apache.fop.fonts.base14." - + base14); - try { - Typeface tf = (Typeface)clazz.newInstance(); - characterSet = new FopCharacterSet( - codepage, encoding, characterset, 1, tf); - } catch (Exception ie) { - String msg = "The base 14 font class " + clazz.getName() - + " could not be instantiated"; - log.error(msg); - } - } catch (ClassNotFoundException cnfe) { - String msg = "The base 14 font class for " + characterset - + " could not be found"; - log.error(msg); - } - } else { - characterSet = new CharacterSet(codepage, encoding, characterset, path); - } - // Create a new font object - OutlineFont font = new OutlineFont(name, characterSet); - return new AFPFontInfo(font, tripleList); - } else { - log.error("No or incorrect type attribute"); - } - return null; - } - - /** - * Builds a list of AFPFontInfo objects for use with the setup() method. - * @param cfg Configuration object - * @return List the newly created list of fonts - * @throws ConfigurationException if something's wrong with the config data - */ - public List buildFontListFromConfiguration(Configuration cfg) - throws ConfigurationException { - List fontList = new java.util.ArrayList(); - Configuration[] font = cfg.getChild("fonts").getChildren("font"); - for (int i = 0; i < font.length; i++) { - AFPFontInfo afi = buildFont(font[i], null); - if (afi != null) { - if (log.isDebugEnabled()) { - log.debug("Adding font " + afi.getAFPFont().getFontName()); - for (int j = 0; j < afi.getFontTriplets().size(); ++j) { - FontTriplet triplet = (FontTriplet) afi.getFontTriplets().get(j); - log.debug("Font triplet " - + triplet.getName() + ", " - + triplet.getStyle() + ", " - + triplet.getWeight()); - } - } - - fontList.add(afi); - } - } - return fontList; - } - - /** - * Configure the AFP renderer. - * Get the configuration to be used for fonts etc. - * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration) - */ - public void configure(Configuration cfg) throws ConfigurationException { - //Font configuration - this.fontList = buildFontListFromConfiguration(cfg); - Configuration images = cfg.getChild("images"); - if (!"color".equalsIgnoreCase(images.getAttribute("mode", "b+w"))) { - bitsPerPixel = images.getAttributeAsInteger("bits-per-pixel", 8); - switch (bitsPerPixel) { - case 1: - case 4: - case 8: - break; - default: - log.warn("Invalid bits_per_pixel value, must be 1, 4 or 8."); - bitsPerPixel = 8; - break; - } - } else { - colorImages = true; - } - - } - - /** * @see org.apache.fop.render.Renderer#setUserAgent(FOUserAgent) */ public void setUserAgent(FOUserAgent agent) { @@ -1765,5 +1571,22 @@ public class AFPRenderer extends AbstractPathOrientedRenderer { } } + public void setBitsPerPixel(int bitsPerPixel) { + this.bitsPerPixel = bitsPerPixel; + switch (bitsPerPixel) { + case 1: + case 4: + case 8: + break; + default: + log.warn("Invalid bits_per_pixel value, must be 1, 4 or 8."); + bitsPerPixel = 8; + break; + } + } + + public void setColorImages(boolean colorImages) { + this.colorImages = colorImages; + } } diff --git a/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java b/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java new file mode 100644 index 000000000..aebabd97b --- /dev/null +++ b/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java @@ -0,0 +1,241 @@ +/* + * 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.render.afp; + +import java.util.List; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.fonts.FontTriplet; +import org.apache.fop.fonts.FontUtil; +import org.apache.fop.fonts.Typeface; +import org.apache.fop.render.PrintRendererConfigurator; +import org.apache.fop.render.Renderer; +import org.apache.fop.render.afp.fonts.AFPFontInfo; +import org.apache.fop.render.afp.fonts.CharacterSet; +import org.apache.fop.render.afp.fonts.FopCharacterSet; +import org.apache.fop.render.afp.fonts.OutlineFont; +import org.apache.fop.render.afp.fonts.RasterFont; +import org.apache.fop.util.LogUtil; + +/** + * AFP Renderer configurator + */ +public class AFPRendererConfigurator extends PrintRendererConfigurator { + + /** + * Default constructor + * @param userAgent user agent + */ + public AFPRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + private AFPFontInfo buildFont(Configuration fontCfg, String fontPath) + throws ConfigurationException { + + Configuration[] triple = fontCfg.getChildren("font-triplet"); + List tripleList = new java.util.ArrayList(); + if (triple.length == 0) { + log.error("Mandatory font configuration element '<font-triplet...' is missing"); + return null; + } + for (int j = 0; j < triple.length; j++) { + int weight = FontUtil.parseCSS2FontWeight(triple[j].getAttribute("weight")); + tripleList.add(new FontTriplet(triple[j].getAttribute("name"), + triple[j].getAttribute("style"), + weight)); + } + + //build the fonts + Configuration afpFontCfg = fontCfg.getChild("afp-font"); + if (afpFontCfg == null) { + log.error("Mandatory font configuration element '<afp-font...' is missing"); + return null; + } + String path = afpFontCfg.getAttribute("path", fontPath); + String type = afpFontCfg.getAttribute("type"); + if (type == null) { + log.error("Mandatory afp-font configuration attribute 'type=' is missing"); + return null; + } + String codepage = afpFontCfg.getAttribute("codepage"); + if (codepage == null) { + log.error("Mandatory afp-font configuration attribute 'code=' is missing"); + return null; + } + String encoding = afpFontCfg.getAttribute("encoding"); + if (encoding == null) { + log.error("Mandatory afp-font configuration attribute 'encoding=' is missing"); + return null; + } + + if ("raster".equalsIgnoreCase(type)) { + + String name = afpFontCfg.getAttribute("name", "Unknown"); + + // Create a new font object + RasterFont font = new RasterFont(name); + + Configuration[] rasters = afpFontCfg.getChildren("afp-raster-font"); + if (rasters.length == 0) { + log.error( + "Mandatory font configuration elements '<afp-raster-font...' are missing"); + return null; + } + for (int j = 0; j < rasters.length; j++) { + Configuration rasterCfg = rasters[j]; + + String characterset = rasterCfg.getAttribute("characterset"); + if (characterset == null) { + log.error( + "Mandatory afp-raster-font configuration attribute 'characterset=' is missing"); + return null; + } + int size = rasterCfg.getAttributeAsInteger("size"); + String base14 = rasterCfg.getAttribute("base14-font", null); + + if (base14 != null) { + try { + Class clazz = Class.forName("org.apache.fop.fonts.base14." + + base14); + try { + Typeface tf = (Typeface)clazz.newInstance(); + font.addCharacterSet(size, new FopCharacterSet( + codepage, encoding, characterset, size, tf)); + } catch (Exception ie) { + String msg = "The base 14 font class " + clazz.getName() + + " could not be instantiated"; + log.error(msg); + } + } catch (ClassNotFoundException cnfe) { + String msg = "The base 14 font class for " + characterset + + " could not be found"; + log.error(msg); + } + } else { + font.addCharacterSet(size, new CharacterSet( + codepage, encoding, characterset, path)); + } + } + return new AFPFontInfo(font, tripleList); + + } else if ("outline".equalsIgnoreCase(type)) { + + String characterset = afpFontCfg.getAttribute("characterset"); + if (characterset == null) { + log.error("Mandatory afp-font configuration attribute 'characterset=' is missing"); + return null; + } + String name = afpFontCfg.getAttribute("name", characterset); + + CharacterSet characterSet = null; + + String base14 = afpFontCfg.getAttribute("base14-font", null); + + if (base14 != null) { + try { + Class clazz = Class.forName("org.apache.fop.fonts.base14." + + base14); + try { + Typeface tf = (Typeface)clazz.newInstance(); + characterSet = new FopCharacterSet( + codepage, encoding, characterset, 1, tf); + } catch (Exception ie) { + String msg = "The base 14 font class " + clazz.getName() + + " could not be instantiated"; + log.error(msg); + } + } catch (ClassNotFoundException cnfe) { + String msg = "The base 14 font class for " + characterset + + " could not be found"; + log.error(msg); + } + } else { + characterSet = new CharacterSet(codepage, encoding, characterset, path); + } + // Create a new font object + OutlineFont font = new OutlineFont(name, characterSet); + return new AFPFontInfo(font, tripleList); + } else { + log.error("No or incorrect type attribute"); + } + return null; + } + + /** + * Builds a list of AFPFontInfo objects for use with the setup() method. + * @param cfg Configuration object + * @return List the newly created list of fonts + * @throws ConfigurationException if something's wrong with the config data + */ + private List buildFontListFromConfiguration(Configuration cfg) + throws ConfigurationException { + List fontList = new java.util.ArrayList(); + Configuration[] font = cfg.getChild("fonts").getChildren("font"); + for (int i = 0; i < font.length; i++) { + AFPFontInfo afi = buildFont(font[i], null); + if (afi != null) { + if (log.isDebugEnabled()) { + log.debug("Adding font " + afi.getAFPFont().getFontName()); + for (int j = 0; j < afi.getFontTriplets().size(); ++j) { + FontTriplet triplet = (FontTriplet) afi.getFontTriplets().get(j); + log.debug(" Font triplet " + + triplet.getName() + ", " + + triplet.getStyle() + ", " + + triplet.getWeight()); + } + } + + fontList.add(afi); + } + } + return fontList; + } + + /** + * Configure the AFP renderer. + * @param renderer AFP renderer + * @throws FOPException fop exception + * @see org.apache.fop.render.PrintRendererConfigurator#configure(Renderer) + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = super.getRendererConfig(renderer); + if (cfg != null) { + AFPRenderer afpRenderer = (AFPRenderer)renderer; + try { + List fontList = buildFontListFromConfiguration(cfg); + afpRenderer.setFontList(fontList); + } catch (ConfigurationException e) { + LogUtil.handleException(log, e, + userAgent.getFactory().validateUserConfigStrictly()); + } + + Configuration images = cfg.getChild("images"); + if (!"color".equalsIgnoreCase(images.getAttribute("mode", "b+w"))) { + afpRenderer.setBitsPerPixel(images.getAttributeAsInteger("bits-per-pixel", 8)); + } else { + afpRenderer.setColorImages(true); + } + } + } +} diff --git a/src/java/org/apache/fop/render/afp/AFPRendererMaker.java b/src/java/org/apache/fop/render/afp/AFPRendererMaker.java index 2d6d5711d..70bbe9076 100644 --- a/src/java/org/apache/fop/render/afp/AFPRendererMaker.java +++ b/src/java/org/apache/fop/render/afp/AFPRendererMaker.java @@ -23,6 +23,7 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.MimeConstants; import org.apache.fop.render.AbstractRendererMaker; import org.apache.fop.render.Renderer; +import org.apache.fop.render.RendererConfigurator; /** * RendererMaker for the AFP Renderer. @@ -35,10 +36,15 @@ public class AFPRendererMaker extends AbstractRendererMaker { /**@see org.apache.fop.render.AbstractRendererMaker */ - public Renderer makeRenderer(FOUserAgent ua) { + public Renderer makeRenderer(FOUserAgent userAgent) { return new AFPRenderer(); } + /** @see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */ + public RendererConfigurator getConfigurator(FOUserAgent userAgent) { + return new AFPRendererConfigurator(userAgent); + } + /** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */ public boolean needsOutputStream() { return true; diff --git a/src/java/org/apache/fop/render/awt/AWTRenderer.java b/src/java/org/apache/fop/render/awt/AWTRenderer.java index 6a50c0294..e83d8d220 100644 --- a/src/java/org/apache/fop/render/awt/AWTRenderer.java +++ b/src/java/org/apache/fop/render/awt/AWTRenderer.java @@ -38,6 +38,7 @@ import java.io.IOException; import org.apache.fop.apps.FOPException; import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.apps.FopFactoryConfigurator; import org.apache.fop.apps.MimeConstants; import org.apache.fop.area.Area; import org.apache.fop.area.PageViewport; @@ -149,10 +150,10 @@ public class AWTRenderer extends Java2DRenderer implements Pageable { pageWidth = (int) Math.round(bounds.getWidth() / 1000f); pageHeight = (int) Math.round(bounds.getHeight() / 1000f); double scaleX = scaleFactor - * (25.4 / FOUserAgent.DEFAULT_TARGET_RESOLUTION) + * (25.4 / FopFactoryConfigurator.DEFAULT_TARGET_RESOLUTION) / userAgent.getTargetPixelUnitToMillimeter(); double scaleY = scaleFactor - * (25.4 / FOUserAgent.DEFAULT_TARGET_RESOLUTION) + * (25.4 / FopFactoryConfigurator.DEFAULT_TARGET_RESOLUTION) / userAgent.getTargetPixelUnitToMillimeter(); int bitmapWidth = (int) ((pageWidth * scaleX) + 0.5); int bitmapHeight = (int) ((pageHeight * scaleY) + 0.5); diff --git a/src/java/org/apache/fop/render/bitmap/TIFFRenderer.java b/src/java/org/apache/fop/render/bitmap/TIFFRenderer.java index c96c82259..5c22c8f34 100644 --- a/src/java/org/apache/fop/render/bitmap/TIFFRenderer.java +++ b/src/java/org/apache/fop/render/bitmap/TIFFRenderer.java @@ -32,9 +32,6 @@ import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; - import org.apache.commons.logging.Log; import org.apache.xmlgraphics.image.GraphicsUtil; @@ -77,12 +74,12 @@ public class TIFFRenderer extends Java2DRenderer { //private static final String COMPRESSION_NONE = "NONE"; //private static final String COMPRESSION_JPEG = "JPEG"; - private static final String COMPRESSION_PACKBITS = "PackBits"; + public static final String COMPRESSION_PACKBITS = "PackBits"; //private static final String COMPRESSION_DEFLATE = "Deflate"; //private static final String COMPRESSION_LZW = "LZW"; //private static final String COMPRESSION_ZLIB = "ZLib"; - private static final String COMPRESSION_CCITT_T6 = "CCITT T.6"; //CCITT Group 4 - private static final String COMPRESSION_CCITT_T4 = "CCITT T.4"; //CCITT Group 3 + public static final String COMPRESSION_CCITT_T6 = "CCITT T.6"; //CCITT Group 4 + public static final String COMPRESSION_CCITT_T4 = "CCITT T.4"; //CCITT Group 3 /** ImageWriter parameters */ private ImageWriterParams writerParams; @@ -115,30 +112,6 @@ public class TIFFRenderer extends Java2DRenderer { writerParams.setResolution(dpi); } - /** - * Configure the TIFF renderer. Get the configuration to be used for - * compression - * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration) - */ - public void configure(Configuration cfg) throws ConfigurationException { - super.configure(cfg); - - //set compression - String name = cfg.getChild("compression").getValue(COMPRESSION_PACKBITS); - //Some compression formats need a special image format: - if (name.equalsIgnoreCase(COMPRESSION_CCITT_T6)) { - bufferedImageType = BufferedImage.TYPE_BYTE_BINARY; - } else if (name.equalsIgnoreCase(COMPRESSION_CCITT_T4)) { - bufferedImageType = BufferedImage.TYPE_BYTE_BINARY; - } else { - bufferedImageType = BufferedImage.TYPE_INT_ARGB; - } - if (!"NONE".equalsIgnoreCase(name)) { - writerParams.setCompressionMethod(name); - } - log.info("TIFF compression set to " + name); - } - /** @see org.apache.fop.render.Renderer#startRenderer(java.io.OutputStream) */ public void startRenderer(OutputStream outputStream) throws IOException { this.outputStream = outputStream; @@ -253,4 +226,12 @@ public class TIFFRenderer extends Java2DRenderer { "Method 'remove' is not supported."); } } + + public void setBufferedImageType(int bufferedImageType) { + this.bufferedImageType = bufferedImageType; + } + + public ImageWriterParams getWriterParams() { + return writerParams; + } } diff --git a/src/java/org/apache/fop/render/bitmap/TIFFRendererConfigurator.java b/src/java/org/apache/fop/render/bitmap/TIFFRendererConfigurator.java new file mode 100644 index 000000000..2e4e29691 --- /dev/null +++ b/src/java/org/apache/fop/render/bitmap/TIFFRendererConfigurator.java @@ -0,0 +1,72 @@ +/* + * 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.render.bitmap; + +import java.awt.image.BufferedImage; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.render.PrintRendererConfigurator; +import org.apache.fop.render.Renderer; + +/** + * TIFF Renderer configurator + */ +public class TIFFRendererConfigurator extends PrintRendererConfigurator { + + /** + * Default constructor + * @param userAgent user agent + */ + public TIFFRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Configure the TIFF renderer. Get the configuration to be used for + * compression + * @param renderer tiff renderer + * @throws FOPException fop exception + * @see org.apache.fop.render.PrintRendererConfigurator#configure(Renderer) + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = super.getRendererConfig(renderer); + if (cfg != null) { + TIFFRenderer tiffRenderer = (TIFFRenderer)renderer; + //set compression + String name = cfg.getChild("compression").getValue(TIFFRenderer.COMPRESSION_PACKBITS); + //Some compression formats need a special image format: + if (name.equalsIgnoreCase(TIFFRenderer.COMPRESSION_CCITT_T6)) { + tiffRenderer.setBufferedImageType(BufferedImage.TYPE_BYTE_BINARY); + } else if (name.equalsIgnoreCase(TIFFRenderer.COMPRESSION_CCITT_T4)) { + tiffRenderer.setBufferedImageType(BufferedImage.TYPE_BYTE_BINARY); + } else { + tiffRenderer.setBufferedImageType(BufferedImage.TYPE_INT_ARGB); + } + if (!"NONE".equalsIgnoreCase(name)) { + tiffRenderer.getWriterParams().setCompressionMethod(name); + } + if (log.isInfoEnabled()) { + log.info("TIFF compression set to " + name); + } + } + } +} diff --git a/src/java/org/apache/fop/render/bitmap/TIFFRendererMaker.java b/src/java/org/apache/fop/render/bitmap/TIFFRendererMaker.java index ee2ba75fd..5e9f18261 100644 --- a/src/java/org/apache/fop/render/bitmap/TIFFRendererMaker.java +++ b/src/java/org/apache/fop/render/bitmap/TIFFRendererMaker.java @@ -23,6 +23,7 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
/**
* RendererMaker for the TIFF Renderer.
@@ -31,12 +32,16 @@ public class TIFFRendererMaker extends AbstractRendererMaker { private static final String[] MIMES = new String[] {MimeConstants.MIME_TIFF};
-
- /** @see org.apache.fop.render.AbstractRendererMaker */
- public Renderer makeRenderer(FOUserAgent ua) {
+ /** @see org.apache.fop.render.AbstractRendererMaker#makeRenderer(FOUserAgent) */
+ public Renderer makeRenderer(FOUserAgent userAgent) {
return new TIFFRenderer();
}
+ /** @see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new TIFFRendererConfigurator(userAgent);
+ }
+
/** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */
public boolean needsOutputStream() {
return true;
diff --git a/src/java/org/apache/fop/render/java2d/FontSetup.java b/src/java/org/apache/fop/render/java2d/FontSetup.java index ceda8f16c..e1dffd0e7 100644 --- a/src/java/org/apache/fop/render/java2d/FontSetup.java +++ b/src/java/org/apache/fop/render/java2d/FontSetup.java @@ -139,52 +139,52 @@ public class FontSetup { // fontInfo.addMetrics("F17", new BauerBodoniBoldItalic()); /* any is treated as serif */ - fontInfo.addFontProperties("F5", "any", "normal", Font.NORMAL); - fontInfo.addFontProperties("F6", "any", "italic", Font.NORMAL); - fontInfo.addFontProperties("F6", "any", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F7", "any", "normal", Font.BOLD); - fontInfo.addFontProperties("F8", "any", "italic", Font.BOLD); - fontInfo.addFontProperties("F8", "any", "oblique", Font.BOLD); + fontInfo.addFontProperties("F5", "any", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "any", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "any", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F7", "any", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "any", "italic", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "any", "oblique", Font.WEIGHT_BOLD); - fontInfo.addFontProperties("F1", "sans-serif", "normal", Font.NORMAL); - fontInfo.addFontProperties("F2", "sans-serif", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F2", "sans-serif", "italic", Font.NORMAL); - fontInfo.addFontProperties("F3", "sans-serif", "normal", Font.BOLD); - fontInfo.addFontProperties("F4", "sans-serif", "oblique", Font.BOLD); - fontInfo.addFontProperties("F4", "sans-serif", "italic", Font.BOLD); - fontInfo.addFontProperties("F5", "serif", "normal", Font.NORMAL); - fontInfo.addFontProperties("F6", "serif", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F6", "serif", "italic", Font.NORMAL); - fontInfo.addFontProperties("F7", "serif", "normal", Font.BOLD); - fontInfo.addFontProperties("F8", "serif", "oblique", Font.BOLD); - fontInfo.addFontProperties("F8", "serif", "italic", Font.BOLD); - fontInfo.addFontProperties("F9", "monospace", "normal", Font.NORMAL); - fontInfo.addFontProperties("F10", "monospace", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F10", "monospace", "italic", Font.NORMAL); - fontInfo.addFontProperties("F11", "monospace", "normal", Font.BOLD); - fontInfo.addFontProperties("F12", "monospace", "oblique", Font.BOLD); - fontInfo.addFontProperties("F12", "monospace", "italic", Font.BOLD); + fontInfo.addFontProperties("F1", "sans-serif", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F2", "sans-serif", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F2", "sans-serif", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F3", "sans-serif", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F4", "sans-serif", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F4", "sans-serif", "italic", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F5", "serif", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "serif", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "serif", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F7", "serif", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "serif", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "serif", "italic", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F9", "monospace", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F10", "monospace", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F10", "monospace", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F11", "monospace", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F12", "monospace", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F12", "monospace", "italic", Font.WEIGHT_BOLD); - fontInfo.addFontProperties("F1", "Helvetica", "normal", Font.NORMAL); - fontInfo.addFontProperties("F2", "Helvetica", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F2", "Helvetica", "italic", Font.NORMAL); - fontInfo.addFontProperties("F3", "Helvetica", "normal", Font.BOLD); - fontInfo.addFontProperties("F4", "Helvetica", "oblique", Font.BOLD); - fontInfo.addFontProperties("F4", "Helvetica", "italic", Font.BOLD); - fontInfo.addFontProperties("F5", "Times", "normal", Font.NORMAL); - fontInfo.addFontProperties("F6", "Times", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F6", "Times", "italic", Font.NORMAL); - fontInfo.addFontProperties("F7", "Times", "normal", Font.BOLD); - fontInfo.addFontProperties("F8", "Times", "oblique", Font.BOLD); - fontInfo.addFontProperties("F8", "Times", "italic", Font.BOLD); - fontInfo.addFontProperties("F9", "Courier", "normal", Font.NORMAL); - fontInfo.addFontProperties("F10", "Courier", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F10", "Courier", "italic", Font.NORMAL); - fontInfo.addFontProperties("F11", "Courier", "normal", Font.BOLD); - fontInfo.addFontProperties("F12", "Courier", "oblique", Font.BOLD); - fontInfo.addFontProperties("F12", "Courier", "italic", Font.BOLD); - fontInfo.addFontProperties("F13", "Symbol", "normal", Font.NORMAL); - fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", Font.NORMAL); + fontInfo.addFontProperties("F1", "Helvetica", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F2", "Helvetica", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F2", "Helvetica", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F3", "Helvetica", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F4", "Helvetica", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F4", "Helvetica", "italic", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F5", "Times", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "Times", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "Times", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F7", "Times", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "Times", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "Times", "italic", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F9", "Courier", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F10", "Courier", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F10", "Courier", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F11", "Courier", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F12", "Courier", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F12", "Courier", "italic", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F13", "Symbol", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", Font.WEIGHT_NORMAL); // Custom type 1 fonts step 2/2 // fontInfo.addFontProperties("F15", "OMEP", "normal", FontInfo.NORMAL); @@ -192,20 +192,20 @@ public class FontSetup { // fontInfo.addFontProperties("F17", "BauerBodoni", "italic", FontInfo.BOLD); /* for compatibility with PassiveTex */ - fontInfo.addFontProperties("F5", "Times-Roman", "normal", Font.NORMAL); - fontInfo.addFontProperties("F6", "Times-Roman", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F6", "Times-Roman", "italic", Font.NORMAL); - fontInfo.addFontProperties("F7", "Times-Roman", "normal", Font.BOLD); - fontInfo.addFontProperties("F8", "Times-Roman", "oblique", Font.BOLD); - fontInfo.addFontProperties("F8", "Times-Roman", "italic", Font.BOLD); - fontInfo.addFontProperties("F5", "Times Roman", "normal", Font.NORMAL); - fontInfo.addFontProperties("F6", "Times Roman", "oblique", Font.NORMAL); - fontInfo.addFontProperties("F6", "Times Roman", "italic", Font.NORMAL); - fontInfo.addFontProperties("F7", "Times Roman", "normal", Font.BOLD); - fontInfo.addFontProperties("F8", "Times Roman", "oblique", Font.BOLD); - fontInfo.addFontProperties("F8", "Times Roman", "italic", Font.BOLD); + fontInfo.addFontProperties("F5", "Times-Roman", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "Times-Roman", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "Times-Roman", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F7", "Times-Roman", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "Times-Roman", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "Times-Roman", "italic", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F5", "Times Roman", "normal", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "Times Roman", "oblique", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F6", "Times Roman", "italic", Font.WEIGHT_NORMAL); + fontInfo.addFontProperties("F7", "Times Roman", "normal", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "Times Roman", "oblique", Font.WEIGHT_BOLD); + fontInfo.addFontProperties("F8", "Times Roman", "italic", Font.WEIGHT_BOLD); fontInfo.addFontProperties("F9", "Computer-Modern-Typewriter", - "normal", Font.NORMAL); + "normal", Font.WEIGHT_NORMAL); configureInstalledAWTFonts(fontInfo, graphics, LAST_PREDEFINED_FONT_NUMBER + 1); } @@ -252,9 +252,9 @@ public class FontSetup { FontMetricsMapper metric = new FontMetricsMapper(family, fontStyle, graphics); fontInfo.addMetrics(fontKey, metric); - int weight = Font.NORMAL; + int weight = Font.WEIGHT_NORMAL; if ((fontStyle & java.awt.Font.BOLD) != 0) { - weight = Font.BOLD; + weight = Font.WEIGHT_BOLD; } String style = "normal"; if ((fontStyle & java.awt.Font.ITALIC) != 0) { diff --git a/src/java/org/apache/fop/render/java2d/Java2DRenderer.java b/src/java/org/apache/fop/render/java2d/Java2DRenderer.java index 2bb3711bb..7d837e699 100644 --- a/src/java/org/apache/fop/render/java2d/Java2DRenderer.java +++ b/src/java/org/apache/fop/render/java2d/Java2DRenderer.java @@ -53,10 +53,9 @@ import java.util.Stack; import org.w3c.dom.Document; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.fop.apps.FOPException; import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.apps.FopFactoryConfigurator; import org.apache.fop.area.CTM; import org.apache.fop.area.PageViewport; import org.apache.fop.area.Trait; @@ -73,7 +72,6 @@ import org.apache.fop.fonts.Typeface; import org.apache.fop.image.FopImage; import org.apache.fop.image.ImageFactory; import org.apache.fop.image.XMLImage; -import org.apache.fop.pdf.PDFAMode; import org.apache.fop.render.AbstractPathOrientedRenderer; import org.apache.fop.render.Graphics2DAdapter; import org.apache.fop.render.RendererContext; @@ -151,19 +149,6 @@ public abstract class Java2DRenderer extends AbstractPathOrientedRenderer implem } /** - * @see org.apache.fop.render.AbstractRenderer#configure( - * org.apache.avalon.framework.configuration.Configuration) - */ - public void configure(Configuration cfg) throws ConfigurationException { - super.configure(cfg); - - String s = cfg.getChild(JAVA2D_TRANSPARENT_PAGE_BACKGROUND, true).getValue(null); - if (s != null) { - this.transparentPageBackground = "true".equalsIgnoreCase(s); - } - } - - /** * @see org.apache.fop.render.Renderer#setUserAgent(org.apache.fop.apps.FOUserAgent) */ public void setUserAgent(FOUserAgent foUserAgent) { @@ -305,10 +290,10 @@ public abstract class Java2DRenderer extends AbstractPathOrientedRenderer implem + pageHeight + ")"); double scaleX = scaleFactor - * (25.4 / FOUserAgent.DEFAULT_TARGET_RESOLUTION) + * (25.4 / FopFactoryConfigurator.DEFAULT_TARGET_RESOLUTION) / userAgent.getTargetPixelUnitToMillimeter(); double scaleY = scaleFactor - * (25.4 / FOUserAgent.DEFAULT_TARGET_RESOLUTION) + * (25.4 / FopFactoryConfigurator.DEFAULT_TARGET_RESOLUTION) / userAgent.getTargetPixelUnitToMillimeter(); int bitmapWidth = (int) ((pageWidth * scaleX) + 0.5); int bitmapHeight = (int) ((pageHeight * scaleY) + 0.5); @@ -1023,4 +1008,8 @@ public abstract class Java2DRenderer extends AbstractPathOrientedRenderer implem //not necessary in Java2D } + public void setTransparentPageBackground(boolean transparentPageBackground) { + this.transparentPageBackground = transparentPageBackground; + } + } diff --git a/src/java/org/apache/fop/render/java2d/Java2DRendererConfigurator.java b/src/java/org/apache/fop/render/java2d/Java2DRendererConfigurator.java new file mode 100644 index 000000000..6732a10fe --- /dev/null +++ b/src/java/org/apache/fop/render/java2d/Java2DRendererConfigurator.java @@ -0,0 +1,57 @@ +/* + * 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.render.java2d; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.render.PrintRendererConfigurator; +import org.apache.fop.render.Renderer; + +/** + * Configurerer for Java 2D renderer + */ +public class Java2DRendererConfigurator extends PrintRendererConfigurator { + + /** + * Default constructor + * @param userAgent user agent + */ + public Java2DRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Configure the Java 2D renderer. + * @param renderer java 2d renderer + * @throws FOPException fop exception + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = super.getRendererConfig(renderer); + if (cfg != null) { + Java2DRenderer java2dRenderer = (Java2DRenderer)renderer; + String value = cfg.getChild( + Java2DRenderer.JAVA2D_TRANSPARENT_PAGE_BACKGROUND, true).getValue(null); + if (value != null) { + java2dRenderer.setTransparentPageBackground("true".equalsIgnoreCase(value)); + } + } + } +} diff --git a/src/java/org/apache/fop/render/pcl/PCLRenderer.java b/src/java/org/apache/fop/render/pcl/PCLRenderer.java index 596dc06d3..733212e48 100644 --- a/src/java/org/apache/fop/render/pcl/PCLRenderer.java +++ b/src/java/org/apache/fop/render/pcl/PCLRenderer.java @@ -53,8 +53,6 @@ import org.w3c.dom.Document; import org.apache.xmlgraphics.java2d.GraphicContext; // FOP -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.fop.apps.FOPException; @@ -143,31 +141,8 @@ public class PCLRenderer extends PrintRenderer { public PCLRenderer() { } - /** - * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration) - */ - public void configure(Configuration cfg) throws ConfigurationException { - super.configure(cfg); - String rendering = cfg.getChild("rendering").getValue(null); - if ("quality".equalsIgnoreCase(rendering)) { - this.qualityBeforeSpeed = true; - } else if ("speed".equalsIgnoreCase(rendering)) { - this.qualityBeforeSpeed = false; - } else if (rendering != null) { - throw new ConfigurationException( - "Valid values for 'rendering' are 'quality' and 'speed'. Value found: " - + rendering); - } - String textRendering = cfg.getChild("text-rendering").getValue(null); - if ("bitmap".equalsIgnoreCase(textRendering)) { - this.allTextAsBitmaps = true; - } else if ("auto".equalsIgnoreCase(textRendering)) { - this.allTextAsBitmaps = false; - } else if (textRendering != null) { - throw new ConfigurationException( - "Valid values for 'text-rendering' are 'auto' and 'bitmap'. Value found: " - + textRendering); - } + public void setQualityBeforeSpeed(boolean qualityBeforeSpeed) { + this.qualityBeforeSpeed = qualityBeforeSpeed; } /** @@ -1499,6 +1474,10 @@ public class PCLRenderer extends PrintRenderer { handleIOTrouble(ioe); } } + + public void setAllTextAsBitmaps(boolean allTextAsBitmaps) { + this.allTextAsBitmaps = allTextAsBitmaps; + } diff --git a/src/java/org/apache/fop/render/pcl/PCLRendererConfigurator.java b/src/java/org/apache/fop/render/pcl/PCLRendererConfigurator.java new file mode 100644 index 000000000..814b6837c --- /dev/null +++ b/src/java/org/apache/fop/render/pcl/PCLRendererConfigurator.java @@ -0,0 +1,74 @@ +/* + * 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.render.pcl; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.render.PrintRendererConfigurator; +import org.apache.fop.render.Renderer; + +/** + * PCL Renderer configurator + */ +public class PCLRendererConfigurator extends PrintRendererConfigurator { + + /** + * Default constructor + * @param userAgent user agent + */ + public PCLRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Configure the TIFF renderer. Get the configuration to be used for + * compression + * @param renderer PCL renderer + * @throws FOPException fop exception + * @see org.apache.fop.render.PrintRendererConfigurator#configure(Renderer) + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = super.getRendererConfig(renderer); + if (cfg != null) { + PCLRenderer pclRenderer = (PCLRenderer)renderer; + String rendering = cfg.getChild("rendering").getValue(null); + if ("quality".equalsIgnoreCase(rendering)) { + pclRenderer.setQualityBeforeSpeed(true); + } else if ("speed".equalsIgnoreCase(rendering)) { + pclRenderer.setQualityBeforeSpeed(false); + } else if (rendering != null) { + throw new FOPException( + "Valid values for 'rendering' are 'quality' and 'speed'. Value found: " + + rendering); + } + String textRendering = cfg.getChild("text-rendering").getValue(null); + if ("bitmap".equalsIgnoreCase(textRendering)) { + pclRenderer.setAllTextAsBitmaps(true); + } else if ("auto".equalsIgnoreCase(textRendering)) { + pclRenderer.setAllTextAsBitmaps(false); + } else if (textRendering != null) { + throw new FOPException( + "Valid values for 'text-rendering' are 'auto' and 'bitmap'. Value found: " + + textRendering); + } + } + } +} diff --git a/src/java/org/apache/fop/render/pcl/PCLRendererMaker.java b/src/java/org/apache/fop/render/pcl/PCLRendererMaker.java index aa0bc292b..b7b395341 100644 --- a/src/java/org/apache/fop/render/pcl/PCLRendererMaker.java +++ b/src/java/org/apache/fop/render/pcl/PCLRendererMaker.java @@ -23,6 +23,7 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
/**
* RendererMaker for the PCL Renderer.
@@ -31,14 +32,19 @@ public class PCLRendererMaker extends AbstractRendererMaker { private static final String[] MIMES = new String[] {
MimeConstants.MIME_PCL,
- MimeConstants.MIME_PCL_ALT};
+ MimeConstants.MIME_PCL_ALT
+ };
-
- /**@see org.apache.fop.render.AbstractRendererMaker */
- public Renderer makeRenderer(FOUserAgent ua) {
+ /**@see org.apache.fop.render.AbstractRendererMaker#makeRenderer(FOUserAgent) */
+ public Renderer makeRenderer(FOUserAgent userAgent) {
return new PCLRenderer();
}
+ /** @see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new PCLRendererConfigurator(userAgent);
+ }
+
/** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */
public boolean needsOutputStream() {
return true;
@@ -48,5 +54,4 @@ public class PCLRendererMaker extends AbstractRendererMaker { public String[] getSupportedMimeTypes() {
return MIMES;
}
-
}
diff --git a/src/java/org/apache/fop/render/pdf/PDFRenderer.java b/src/java/org/apache/fop/render/pdf/PDFRenderer.java index 7d584c036..73c38878e 100644 --- a/src/java/org/apache/fop/render/pdf/PDFRenderer.java +++ b/src/java/org/apache/fop/render/pdf/PDFRenderer.java @@ -41,8 +41,6 @@ import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; // Avalon -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.commons.io.IOUtils; // FOP @@ -69,7 +67,6 @@ import org.apache.fop.area.inline.WordArea; import org.apache.fop.area.inline.SpaceArea; import org.apache.fop.fonts.Typeface; import org.apache.fop.fonts.Font; -import org.apache.fop.fonts.FontSetup; import org.apache.fop.image.FopImage; import org.apache.fop.image.ImageFactory; import org.apache.fop.image.XMLImage; @@ -86,7 +83,6 @@ import org.apache.fop.pdf.PDFFilterList; import org.apache.fop.pdf.PDFGoTo; import org.apache.fop.pdf.PDFICCBasedColorSpace; import org.apache.fop.pdf.PDFICCStream; -import org.apache.fop.pdf.PDFGoTo; import org.apache.fop.pdf.PDFInfo; import org.apache.fop.pdf.PDFLink; import org.apache.fop.pdf.PDFMetadata; @@ -266,38 +262,6 @@ public class PDFRenderer extends AbstractPathOrientedRenderer { public PDFRenderer() { } - /** - * Configure the PDF renderer. - * Get the configuration to be used for pdf stream filters, - * fonts etc. - * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration) - */ - public void configure(Configuration cfg) throws ConfigurationException { - //PDF filters - this.filterMap = PDFFilterList.buildFilterMapFromConfiguration(cfg); - - //Font configuration - List cfgFonts = FontSetup.buildFontListFromConfiguration(cfg, this); - if (this.fontList == null) { - this.fontList = cfgFonts; - } else { - this.fontList.addAll(cfgFonts); - } - - String s = cfg.getChild(PDF_A_MODE, true).getValue(null); - if (s != null) { - this.pdfAMode = PDFAMode.valueOf(s); - } - s = cfg.getChild(PDF_X_MODE, true).getValue(null); - if (s != null) { - this.pdfXMode = PDFXMode.valueOf(s); - } - s = cfg.getChild(KEY_OUTPUT_PROFILE, true).getValue(null); - if (s != null) { - this.outputProfileURI = s; - } - } - private boolean booleanValueOf(Object obj) { if (obj instanceof Boolean) { return ((Boolean)obj).booleanValue(); @@ -1891,5 +1855,21 @@ public class PDFRenderer extends AbstractPathOrientedRenderer { public String getMimeType() { return MIME_TYPE; } + + public void setAMode(PDFAMode mode) { + this.pdfAMode = mode; + } + + public void setXMode(PDFXMode mode) { + this.pdfXMode = mode; + } + + public void setOutputProfileURI(String outputProfileURI) { + this.outputProfileURI = outputProfileURI; + } + + public void setFilterMap(Map filterMap) { + this.filterMap = filterMap; + } } diff --git a/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java b/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java new file mode 100644 index 000000000..5c5894d3b --- /dev/null +++ b/src/java/org/apache/fop/render/pdf/PDFRendererConfigurator.java @@ -0,0 +1,134 @@ +/* + * 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.render.pdf; + +import java.util.List; +import java.util.Map; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.pdf.PDFAMode; +import org.apache.fop.pdf.PDFFilterList; +import org.apache.fop.pdf.PDFXMode; +import org.apache.fop.render.PrintRendererConfigurator; +import org.apache.fop.render.Renderer; +import org.apache.fop.util.LogUtil; + +/** + * PDF renderer configurator + */ +public class PDFRendererConfigurator extends PrintRendererConfigurator { + + /** + * Default constructor + * @param userAgent user agent + */ + public PDFRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Configure the PDF renderer. + * Get the configuration to be used for pdf stream filters, + * fonts etc. + * @param renderer pdf renderer + * @throws FOPException fop exception + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = super.getRendererConfig(renderer); + if (cfg != null) { + PDFRenderer pdfRenderer = (PDFRenderer)renderer; + //PDF filters + try { + Map filterMap = buildFilterMapFromConfiguration(cfg); + if (filterMap != null) { + pdfRenderer.setFilterMap(filterMap); + } + } catch (ConfigurationException e) { + LogUtil.handleException(log, e, false); + } + + super.configure(renderer); + + String s = cfg.getChild(PDFRenderer.PDF_A_MODE, true).getValue(null); + if (s != null) { + pdfRenderer.setAMode(PDFAMode.valueOf(s)); + } + s = cfg.getChild(PDFRenderer.PDF_X_MODE, true).getValue(null); + if (s != null) { + pdfRenderer.setXMode(PDFXMode.valueOf(s)); + } + s = cfg.getChild(PDFRenderer.KEY_OUTPUT_PROFILE, true).getValue(null); + if (s != null) { + pdfRenderer.setOutputProfileURI(s); + } + } + } + + /** + * Builds a filter map from an Avalon Configuration object. + * @param cfg the Configuration object + * @return Map the newly built filter map + * @throws ConfigurationException if a filter list is defined twice + */ + public static Map buildFilterMapFromConfiguration(Configuration cfg) + throws ConfigurationException { + Map filterMap = new java.util.HashMap(); + Configuration[] filterLists = cfg.getChildren("filterList"); + for (int i = 0; i < filterLists.length; i++) { + Configuration filters = filterLists[i]; + String type = filters.getAttribute("type", null); + Configuration[] filt = filters.getChildren("value"); + List filterList = new java.util.ArrayList(); + for (int j = 0; j < filt.length; j++) { + String name = filt[j].getValue(); + filterList.add(name); + } + + if (type == null) { + type = PDFFilterList.DEFAULT_FILTER; + } + + if (!filterList.isEmpty() && log.isDebugEnabled()) { + StringBuffer debug = new StringBuffer("Adding PDF filter"); + if (filterList.size() != 1) { + debug.append("s"); + } + debug.append(" for type ").append(type).append(": "); + for (int j = 0; j < filterList.size(); j++) { + if (j != 0) { + debug.append(", "); + } + debug.append(filterList.get(j)); + } + log.debug(debug.toString()); + } + + if (filterMap.get(type) != null) { + throw new ConfigurationException("A filterList of type '" + + type + "' has already been defined"); + } + filterMap.put(type, filterList); + } + return filterMap; + } +} diff --git a/src/java/org/apache/fop/render/pdf/PDFRendererMaker.java b/src/java/org/apache/fop/render/pdf/PDFRendererMaker.java index 0f8d8bc14..00fc1a88f 100644 --- a/src/java/org/apache/fop/render/pdf/PDFRendererMaker.java +++ b/src/java/org/apache/fop/render/pdf/PDFRendererMaker.java @@ -23,6 +23,7 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
/**
* RendererMaker for the PDF Renderer.
@@ -31,12 +32,16 @@ public class PDFRendererMaker extends AbstractRendererMaker { private static final String[] MIMES = new String[] {MimeConstants.MIME_PDF};
-
- /**@see org.apache.fop.render.AbstractRendererMaker */
- public Renderer makeRenderer(FOUserAgent ua) {
+ /** @see org.apache.fop.render.AbstractRendererMaker#makeRenderer(FOUserAgent) */
+ public Renderer makeRenderer(FOUserAgent userAgent) {
return new PDFRenderer();
}
+ /** @see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new PDFRendererConfigurator(userAgent);
+ }
+
/** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */
public boolean needsOutputStream() {
return true;
diff --git a/src/java/org/apache/fop/render/print/PrintRendererMaker.java b/src/java/org/apache/fop/render/print/PrintRendererMaker.java index 046427682..6ad2cb3d1 100644 --- a/src/java/org/apache/fop/render/print/PrintRendererMaker.java +++ b/src/java/org/apache/fop/render/print/PrintRendererMaker.java @@ -22,7 +22,9 @@ package org.apache.fop.render.print; import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
+import org.apache.fop.render.PrintRendererConfigurator;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
/**
* RendererMaker for the Print Renderer.
@@ -31,12 +33,16 @@ public class PrintRendererMaker extends AbstractRendererMaker { private static final String[] MIMES = new String[] {MimeConstants.MIME_FOP_PRINT};
-
- /**@see org.apache.fop.render.AbstractRendererMaker */
- public Renderer makeRenderer(FOUserAgent ua) {
+ /**@see org.apache.fop.render.AbstractRendererMaker#makeRenderer(FOUserAgent) */
+ public Renderer makeRenderer(FOUserAgent userAgent) {
return new PrintRenderer();
}
+ /** @see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new PrintRendererConfigurator(userAgent);
+ }
+
/** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */
public boolean needsOutputStream() {
return false;
diff --git a/src/java/org/apache/fop/render/ps/NativeTextHandler.java b/src/java/org/apache/fop/render/ps/NativeTextHandler.java index 47f7fb0b8..5cda145b9 100644 --- a/src/java/org/apache/fop/render/ps/NativeTextHandler.java +++ b/src/java/org/apache/fop/render/ps/NativeTextHandler.java @@ -159,7 +159,7 @@ public class NativeTextHandler implements TextHandler { } int fontSize = 1000 * f.getSize(); String style = f.isItalic() ? "italic" : "normal"; - int weight = f.isBold() ? Font.BOLD : Font.NORMAL; + int weight = f.isBold() ? Font.WEIGHT_BOLD : Font.WEIGHT_NORMAL; FontTriplet triplet = fontInfo.findAdjustWeight(fontFamily, style, weight); if (triplet == null) { diff --git a/src/java/org/apache/fop/render/ps/PSRenderer.java b/src/java/org/apache/fop/render/ps/PSRenderer.java index 68c6cc86c..ad5b0b3ce 100644 --- a/src/java/org/apache/fop/render/ps/PSRenderer.java +++ b/src/java/org/apache/fop/render/ps/PSRenderer.java @@ -35,8 +35,6 @@ import java.util.Map; import javax.xml.transform.Source; // FOP -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -61,7 +59,6 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.fo.Constants; import org.apache.fop.fo.extensions.ExtensionAttachment; import org.apache.fop.fonts.Font; -import org.apache.fop.fonts.FontSetup; import org.apache.fop.fonts.LazyFont; import org.apache.fop.fonts.Typeface; import org.apache.fop.image.EPSImage; @@ -146,24 +143,6 @@ public class PSRenderer extends AbstractPathOrientedRenderer implements ImageAda private Map formResources; /** - * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration) - */ - public void configure(Configuration cfg) throws ConfigurationException { - super.configure(cfg); - this.autoRotateLandscape = cfg.getChild(AUTO_ROTATE_LANDSCAPE).getValueAsBoolean(false); - this.languageLevel = cfg.getChild(LANGUAGE_LEVEL).getValueAsInteger(this.languageLevel); - this.twoPassGeneration = cfg.getChild(OPTIMIZE_RESOURCES).getValueAsBoolean(false); - - //Font configuration - List cfgFonts = FontSetup.buildFontListFromConfiguration(cfg, this); - if (this.fontList == null) { - this.fontList = cfgFonts; - } else { - this.fontList.addAll(cfgFonts); - } - } - - /** * @see org.apache.fop.render.Renderer#setUserAgent(FOUserAgent) */ public void setUserAgent(FOUserAgent agent) { diff --git a/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java b/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java new file mode 100644 index 000000000..c7b5a025b --- /dev/null +++ b/src/java/org/apache/fop/render/ps/PSRendererConfigurator.java @@ -0,0 +1,56 @@ +/* + * 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.render.ps; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.render.PrintRendererConfigurator; +import org.apache.fop.render.Renderer; + +/** + * Postscript renderer config + */ +public class PSRendererConfigurator extends PrintRendererConfigurator { + + /** + * Default constructor + * @param userAgent user agent + */ + public PSRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Configure the PS renderer. + * @param renderer postscript renderer + * @throws FOPException fop exception + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = super.getRendererConfig(renderer); + if (cfg != null) { + super.configure(renderer); + + PSRenderer psRenderer = (PSRenderer)renderer; + psRenderer.setAutoRotateLandscape( + cfg.getChild("auto-rotate-landscape").getValueAsBoolean(false)); + } + } +} diff --git a/src/java/org/apache/fop/render/ps/PSRendererMaker.java b/src/java/org/apache/fop/render/ps/PSRendererMaker.java index 45f7663aa..0db4281d0 100644 --- a/src/java/org/apache/fop/render/ps/PSRendererMaker.java +++ b/src/java/org/apache/fop/render/ps/PSRendererMaker.java @@ -23,6 +23,7 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
/**
* RendererMaker for the PostScript Renderer.
@@ -31,12 +32,16 @@ public class PSRendererMaker extends AbstractRendererMaker { private static final String[] MIMES = new String[] {MimeConstants.MIME_POSTSCRIPT};
-
- /** @see org.apache.fop.render.AbstractRendererMaker */
- public Renderer makeRenderer(FOUserAgent ua) {
+ /** @see org.apache.fop.render.AbstractRendererMaker#makeRenderer(FOUserAgent) */
+ public Renderer makeRenderer(FOUserAgent userAgent) {
return new PSRenderer();
}
+ /** @see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new PSRendererConfigurator(userAgent);
+ }
+
/** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */
public boolean needsOutputStream() {
return true;
@@ -46,5 +51,4 @@ public class PSRendererMaker extends AbstractRendererMaker { public String[] getSupportedMimeTypes() {
return MIMES;
}
-
}
diff --git a/src/java/org/apache/fop/render/ps/PSTextPainter.java b/src/java/org/apache/fop/render/ps/PSTextPainter.java index 78efd56b9..f4796fd2b 100644 --- a/src/java/org/apache/fop/render/ps/PSTextPainter.java +++ b/src/java/org/apache/fop/render/ps/PSTextPainter.java @@ -367,8 +367,8 @@ public class PSTextPainter implements TextPainter { private int getWeight(AttributedCharacterIterator aci) { Float taWeight = (Float)aci.getAttribute(TextAttribute.WEIGHT); return ((taWeight != null) && (taWeight.floatValue() > 1.0)) - ? Font.BOLD - : Font.NORMAL; + ? Font.WEIGHT_BOLD + : Font.WEIGHT_NORMAL; } private Font makeFont(AttributedCharacterIterator aci) { @@ -402,7 +402,7 @@ public class PSTextPainter implements TextPainter { } } } - FontTriplet triplet = fontInfo.fontLookup("any", style, Font.NORMAL); + FontTriplet triplet = fontInfo.fontLookup("any", style, Font.WEIGHT_NORMAL); int fsize = (int)(fontSize.floatValue() * 1000); return fontInfo.getFontInstance(triplet, fsize); } @@ -411,7 +411,7 @@ public class PSTextPainter implements TextPainter { final String style = getStyle(aci); final int weight = getWeight(aci); int fStyle = java.awt.Font.PLAIN; - if (weight == Font.BOLD) { + if (weight == Font.WEIGHT_BOLD) { fStyle |= java.awt.Font.BOLD; } if ("italic".equals(style)) { diff --git a/src/java/org/apache/fop/render/txt/TXTRenderer.java b/src/java/org/apache/fop/render/txt/TXTRenderer.java index 85d3dd797..cec1dbc4b 100644 --- a/src/java/org/apache/fop/render/txt/TXTRenderer.java +++ b/src/java/org/apache/fop/render/txt/TXTRenderer.java @@ -27,8 +27,6 @@ import java.io.OutputStream; import java.util.List; import java.util.Map; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.fop.apps.FOPException; import org.apache.fop.area.Area; import org.apache.fop.area.CTM; @@ -115,12 +113,6 @@ public class TXTRenderer extends AbstractPathOrientedRenderer { public String getMimeType() { return "text/plain"; } - - /** @see org.apache.fop.render.AbstractRenderer */ - public void configure(Configuration conf) throws ConfigurationException { - super.configure(conf); - this.encoding = conf.getChild("encoding", true).getValue(null); - } /** * Sets the encoding of the target file. diff --git a/src/java/org/apache/fop/render/txt/TXTRendererConfigurator.java b/src/java/org/apache/fop/render/txt/TXTRendererConfigurator.java new file mode 100644 index 000000000..ab655c92e --- /dev/null +++ b/src/java/org/apache/fop/render/txt/TXTRendererConfigurator.java @@ -0,0 +1,53 @@ +/* + * 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.render.txt; + +import org.apache.avalon.framework.configuration.Configuration; +import org.apache.fop.apps.FOPException; +import org.apache.fop.apps.FOUserAgent; +import org.apache.fop.render.PrintRendererConfigurator; +import org.apache.fop.render.Renderer; + +/** + * TXT Renderer configurator + */ +public class TXTRendererConfigurator extends PrintRendererConfigurator { + + /** + * Default constructor + * @param userAgent user agent + */ + public TXTRendererConfigurator(FOUserAgent userAgent) { + super(userAgent); + } + + /** + * Configure the PS renderer. + * @param renderer TXT renderer + * @throws FOPException fop exception + */ + public void configure(Renderer renderer) throws FOPException { + Configuration cfg = super.getRendererConfig(renderer); + if (cfg != null) { + TXTRenderer txtRenderer = (TXTRenderer)renderer; + txtRenderer.setEncoding(cfg.getChild("encoding", true).getValue(null)); + } + } +} diff --git a/src/java/org/apache/fop/render/txt/TXTRendererMaker.java b/src/java/org/apache/fop/render/txt/TXTRendererMaker.java index 5c1b812b6..8a92ed11d 100644 --- a/src/java/org/apache/fop/render/txt/TXTRendererMaker.java +++ b/src/java/org/apache/fop/render/txt/TXTRendererMaker.java @@ -23,6 +23,7 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
/**
* RendererMaker for the Plain Text Renderer.
@@ -31,12 +32,16 @@ public class TXTRendererMaker extends AbstractRendererMaker { private static final String[] MIMES = new String[] {MimeConstants.MIME_PLAIN_TEXT};
-
- /**@see org.apache.fop.render.AbstractRendererMaker */
- public Renderer makeRenderer(FOUserAgent ua) {
+ /**@see org.apache.fop.render.AbstractRendererMaker#makeRenderer(FOUserAgent) */
+ public Renderer makeRenderer(FOUserAgent userAgent) {
return new TXTRenderer();
}
+ /**@see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new TXTRendererConfigurator(userAgent);
+ }
+
/** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */
public boolean needsOutputStream() {
return true;
@@ -46,5 +51,4 @@ public class TXTRendererMaker extends AbstractRendererMaker { public String[] getSupportedMimeTypes() {
return MIMES;
}
-
}
diff --git a/src/java/org/apache/fop/render/xml/XMLRenderer.java b/src/java/org/apache/fop/render/xml/XMLRenderer.java index cccdb6d71..b95ea7e18 100644 --- a/src/java/org/apache/fop/render/xml/XMLRenderer.java +++ b/src/java/org/apache/fop/render/xml/XMLRenderer.java @@ -41,8 +41,6 @@ import org.xml.sax.SAXException; import org.xml.sax.ext.LexicalHandler; import org.xml.sax.helpers.AttributesImpl; -import org.apache.avalon.framework.configuration.Configuration; -import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.fop.util.QName; import org.apache.fop.apps.FOPException; import org.apache.fop.apps.FOUserAgent; @@ -83,7 +81,6 @@ import org.apache.fop.area.inline.WordArea; import org.apache.fop.fo.Constants; import org.apache.fop.fo.extensions.ExtensionAttachment; import org.apache.fop.fonts.FontInfo; -import org.apache.fop.fonts.FontSetup; import org.apache.fop.fonts.FontTriplet; import org.apache.fop.render.PrintRenderer; import org.apache.fop.render.Renderer; @@ -140,22 +137,6 @@ public class XMLRenderer extends PrintRenderer { } /** - * Configure the XML renderer. - * Get the configuration to be used for fonts etc. - * @see org.apache.avalon.framework.configuration.Configurable#configure(Configuration) - */ - public void configure(Configuration cfg) throws ConfigurationException { - super.configure(cfg); - //Font configuration - List cfgFonts = FontSetup.buildFontListFromConfiguration(cfg, this); - if (this.fontList == null) { - this.fontList = cfgFonts; - } else { - this.fontList.addAll(cfgFonts); - } - } - - /** * @see org.apache.fop.render.Renderer#setUserAgent(FOUserAgent) */ public void setUserAgent(FOUserAgent agent) { diff --git a/src/java/org/apache/fop/render/xml/XMLRendererMaker.java b/src/java/org/apache/fop/render/xml/XMLRendererMaker.java index 1be56f39a..582cfb9be 100644 --- a/src/java/org/apache/fop/render/xml/XMLRendererMaker.java +++ b/src/java/org/apache/fop/render/xml/XMLRendererMaker.java @@ -22,7 +22,9 @@ package org.apache.fop.render.xml; import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.AbstractRendererMaker;
+import org.apache.fop.render.PrintRendererConfigurator;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.RendererConfigurator;
/**
* RendererMaker for the Area Tree XML Renderer.
@@ -31,12 +33,16 @@ public class XMLRendererMaker extends AbstractRendererMaker { private static final String[] MIMES = new String[] {MimeConstants.MIME_FOP_AREA_TREE};
-
- /**@see org.apache.fop.render.AbstractRendererMaker */
- public Renderer makeRenderer(FOUserAgent ua) {
+ /**@see org.apache.fop.render.AbstractRendererMaker#makeRenderer(FOUserAgent) */
+ public Renderer makeRenderer(FOUserAgent userAgent) {
return new XMLRenderer();
}
+ /**@see org.apache.fop.render.AbstractRendererMaker#getConfigurator(FOUserAgent) */
+ public RendererConfigurator getConfigurator(FOUserAgent userAgent) {
+ return new PrintRendererConfigurator(userAgent);
+ }
+
/** @see org.apache.fop.render.AbstractRendererMaker#needsOutputStream() */
public boolean needsOutputStream() {
return true;
|