From 3c5ac0297c39c7cf7280afa95155dbea07e67d4c Mon Sep 17 00:00:00 2001 From: Jeremias Maerki Date: Thu, 19 Mar 2009 10:20:31 +0000 Subject: Bugfix: IFSerializer's mimicking feature didn't work properly. The wrong configuration got selected. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@755894 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/fop/apps/FopFactory.java | 8 +++++--- .../apache/fop/render/PrintRendererConfigurator.java | 3 ++- src/java/org/apache/fop/render/intermediate/IFUtil.java | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) (limited to 'src/java') diff --git a/src/java/org/apache/fop/apps/FopFactory.java b/src/java/org/apache/fop/apps/FopFactory.java index 96c22f964..9ddc164c5 100644 --- a/src/java/org/apache/fop/apps/FopFactory.java +++ b/src/java/org/apache/fop/apps/FopFactory.java @@ -264,9 +264,11 @@ public class FopFactory implements ImageContext { */ public Fop newFop(FOUserAgent userAgent) throws FOPException { if (userAgent.getRendererOverride() == null - && userAgent.getFOEventHandlerOverride() == null) { - throw new IllegalStateException("Either the overriding renderer or the overriding" - + " FOEventHandler must be set when this factory method is used!"); + && userAgent.getFOEventHandlerOverride() == null + && userAgent.getDocumentHandlerOverride() == null) { + throw new IllegalStateException("An overriding renderer," + + " FOEventHandler or IFDocumentHandler must be set on the user agent" + + " when this factory method is used!"); } return newFop(null, userAgent); } diff --git a/src/java/org/apache/fop/render/PrintRendererConfigurator.java b/src/java/org/apache/fop/render/PrintRendererConfigurator.java index f1a76be1d..3f5a2eb39 100644 --- a/src/java/org/apache/fop/render/PrintRendererConfigurator.java +++ b/src/java/org/apache/fop/render/PrintRendererConfigurator.java @@ -58,6 +58,7 @@ import org.apache.fop.fonts.autodetect.FontInfoFinder; import org.apache.fop.fonts.base14.Base14FontCollection; import org.apache.fop.render.intermediate.IFDocumentHandler; import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator; +import org.apache.fop.render.intermediate.IFUtil; import org.apache.fop.util.LogUtil; /** @@ -471,7 +472,7 @@ public class PrintRendererConfigurator extends AbstractRendererConfigurator List fontCollections = new java.util.ArrayList(); fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled())); - Configuration cfg = super.getRendererConfig(documentHandler.getMimeType()); + Configuration cfg = super.getRendererConfig(IFUtil.getEffectiveMIMEType(documentHandler)); if (cfg != null) { FontResolver fontResolver = new DefaultFontResolver(userAgent); FontEventListener listener = new FontEventAdapter( diff --git a/src/java/org/apache/fop/render/intermediate/IFUtil.java b/src/java/org/apache/fop/render/intermediate/IFUtil.java index 2654eb2a3..58399f3ac 100644 --- a/src/java/org/apache/fop/render/intermediate/IFUtil.java +++ b/src/java/org/apache/fop/render/intermediate/IFUtil.java @@ -172,4 +172,21 @@ public class IFUtil { setupFonts(documentHandler, null); } + /** + * Returns the MIME type of the output format that the given document handler is supposed to + * handle. If the document handler is an {@link IFSerializer} it returns the MIME type of the + * document handler it is mimicking. + * @param documentHandler the document handler + * @return the effective MIME type + */ + public static String getEffectiveMIMEType(IFDocumentHandler documentHandler) { + if (documentHandler instanceof IFSerializer) { + IFDocumentHandler mimic = ((IFSerializer)documentHandler).getMimickedDocumentHandler(); + if (mimic != null) { + return mimic.getMimeType(); + } + } + return documentHandler.getMimeType(); + } + } -- cgit v1.2.3