git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@755894 13f79535-47bb-0310-9956-ffa450edef68pull/37/head
@@ -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); | |||
} |
@@ -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( |
@@ -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(); | |||
} | |||
} |
@@ -25,6 +25,7 @@ import junit.framework.TestSuite; | |||
import org.apache.fop.fonts.TrueTypeAnsiTestCase; | |||
import org.apache.fop.image.loader.batik.ImageLoaderTestCase; | |||
import org.apache.fop.image.loader.batik.ImagePreloaderTestCase; | |||
import org.apache.fop.intermediate.IFMimickingTestCase; | |||
import org.apache.fop.render.pdf.PDFAConformanceTestCase; | |||
import org.apache.fop.render.pdf.PDFCMapTestCase; | |||
import org.apache.fop.render.pdf.PDFEncodingTestCase; | |||
@@ -54,6 +55,7 @@ public class StandardTestSuite { | |||
suite.addTest(RichTextFormatTestSuite.suite()); | |||
suite.addTest(new TestSuite(ImageLoaderTestCase.class)); | |||
suite.addTest(new TestSuite(ImagePreloaderTestCase.class)); | |||
suite.addTest(new TestSuite(IFMimickingTestCase.class)); | |||
//$JUnit-END$ | |||
return suite; | |||
} |
@@ -0,0 +1,120 @@ | |||
/* | |||
* 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.intermediate; | |||
import java.io.File; | |||
import javax.xml.transform.ErrorListener; | |||
import javax.xml.transform.Transformer; | |||
import javax.xml.transform.TransformerException; | |||
import javax.xml.transform.TransformerFactory; | |||
import javax.xml.transform.dom.DOMResult; | |||
import javax.xml.transform.sax.SAXResult; | |||
import javax.xml.transform.stream.StreamSource; | |||
import junit.framework.TestCase; | |||
import org.apache.fop.apps.FOUserAgent; | |||
import org.apache.fop.apps.Fop; | |||
import org.apache.fop.apps.FopFactory; | |||
import org.apache.fop.apps.MimeConstants; | |||
import org.apache.fop.events.Event; | |||
import org.apache.fop.events.EventFormatter; | |||
import org.apache.fop.events.EventListener; | |||
import org.apache.fop.render.intermediate.IFContext; | |||
import org.apache.fop.render.intermediate.IFDocumentHandler; | |||
import org.apache.fop.render.intermediate.IFSerializer; | |||
/** | |||
* This test checks the correct mimicking of a different output format. | |||
*/ | |||
public class IFMimickingTestCase extends TestCase { | |||
/** | |||
* Tests IF document handler mimicking. | |||
* @throws Exception if an error occurs | |||
*/ | |||
public void testMimicking() throws Exception { | |||
FopFactory fopFactory = FopFactory.newInstance(); | |||
File configFile = new File("test/test-no-xml-metrics.xconf"); | |||
fopFactory.setUserConfig(configFile); | |||
//Set up XMLRenderer to render to a DOM | |||
DOMResult domResult = new DOMResult(); | |||
FOUserAgent userAgent = fopFactory.newFOUserAgent(); | |||
userAgent.getEventBroadcaster().addEventListener(new EventListener() { | |||
public void processEvent(Event event) { | |||
if (event.getEventGroupID().equals("org.apache.fop.fonts.FontEventAdapter")) { | |||
fail("There must be no font-related event! Got: " | |||
+ EventFormatter.format(event)); | |||
} | |||
} | |||
}); | |||
//Create an instance of the target renderer so the XMLRenderer can use its font setup | |||
IFDocumentHandler targetHandler = userAgent.getRendererFactory().createDocumentHandler( | |||
userAgent, MimeConstants.MIME_PDF); | |||
//Setup painter | |||
IFSerializer serializer = new IFSerializer(); | |||
serializer.setContext(new IFContext(userAgent)); | |||
serializer.mimicDocumentHandler(targetHandler); | |||
serializer.setResult(domResult); | |||
userAgent.setDocumentHandlerOverride(serializer); | |||
Fop fop = fopFactory.newFop(userAgent); | |||
//minimal-pdf-a.fo uses the Gladiator font so is an ideal FO file for this test: | |||
StreamSource src = new StreamSource(new File("test/xml/pdf-a/minimal-pdf-a.fo")); | |||
TransformerFactory tFactory = TransformerFactory.newInstance(); | |||
Transformer transformer = tFactory.newTransformer(); | |||
setErrorListener(transformer); | |||
transformer.transform(src, new SAXResult(fop.getDefaultHandler())); | |||
} | |||
/** | |||
* Sets an error listener which doesn't swallow errors like Xalan's default one. | |||
* @param transformer the transformer to set the error listener on | |||
*/ | |||
protected void setErrorListener(Transformer transformer) { | |||
transformer.setErrorListener(new ErrorListener() { | |||
public void error(TransformerException exception) throws TransformerException { | |||
throw exception; | |||
} | |||
public void fatalError(TransformerException exception) throws TransformerException { | |||
throw exception; | |||
} | |||
public void warning(TransformerException exception) throws TransformerException { | |||
//ignore | |||
} | |||
}); | |||
} | |||
} |
@@ -0,0 +1,26 @@ | |||
<?xml version="1.0"?> | |||
<fop version="1.0"> | |||
<!-- Switch off font caching for the purposes of the unit test --> | |||
<use-cache>false</use-cache> | |||
<!-- Base URL for resolving relative URLs --> | |||
<base>./</base> | |||
<!-- Font Base URL for resolving relative font URLs --> | |||
<font-base>./test/resources/fonts</font-base> | |||
<renderers> | |||
<renderer mime="application/pdf"> | |||
<filterList type="content"> | |||
<value>null</value> | |||
</filterList> | |||
<fonts> | |||
<font embed-url="glb12.ttf" kerning="yes"> | |||
<font-triplet name="Gladiator Bold" style="normal" weight="normal"/> | |||
<font-triplet name="Gladiator" style="normal" weight="bold"/> | |||
<font-triplet name="Gladiator" style="normal" weight="normal"/> | |||
</font> | |||
</fonts> | |||
</renderer> | |||
</renderers> | |||
</fop> |