diff options
Diffstat (limited to 'src/java/org/apache/fop/render/pdf')
3 files changed, 158 insertions, 39 deletions
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;
|