git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@755894 13f79535-47bb-0310-9956-ffa450edef68pull/37/head
*/ | */ | ||||
public Fop newFop(FOUserAgent userAgent) throws FOPException { | public Fop newFop(FOUserAgent userAgent) throws FOPException { | ||||
if (userAgent.getRendererOverride() == null | 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); | return newFop(null, userAgent); | ||||
} | } |
import org.apache.fop.fonts.base14.Base14FontCollection; | import org.apache.fop.fonts.base14.Base14FontCollection; | ||||
import org.apache.fop.render.intermediate.IFDocumentHandler; | import org.apache.fop.render.intermediate.IFDocumentHandler; | ||||
import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator; | import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator; | ||||
import org.apache.fop.render.intermediate.IFUtil; | |||||
import org.apache.fop.util.LogUtil; | import org.apache.fop.util.LogUtil; | ||||
/** | /** | ||||
List fontCollections = new java.util.ArrayList(); | List fontCollections = new java.util.ArrayList(); | ||||
fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled())); | fontCollections.add(new Base14FontCollection(fontManager.isBase14KerningEnabled())); | ||||
Configuration cfg = super.getRendererConfig(documentHandler.getMimeType()); | |||||
Configuration cfg = super.getRendererConfig(IFUtil.getEffectiveMIMEType(documentHandler)); | |||||
if (cfg != null) { | if (cfg != null) { | ||||
FontResolver fontResolver = new DefaultFontResolver(userAgent); | FontResolver fontResolver = new DefaultFontResolver(userAgent); | ||||
FontEventListener listener = new FontEventAdapter( | FontEventListener listener = new FontEventAdapter( |
setupFonts(documentHandler, null); | 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(); | |||||
} | |||||
} | } |
import org.apache.fop.fonts.TrueTypeAnsiTestCase; | import org.apache.fop.fonts.TrueTypeAnsiTestCase; | ||||
import org.apache.fop.image.loader.batik.ImageLoaderTestCase; | import org.apache.fop.image.loader.batik.ImageLoaderTestCase; | ||||
import org.apache.fop.image.loader.batik.ImagePreloaderTestCase; | 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.PDFAConformanceTestCase; | ||||
import org.apache.fop.render.pdf.PDFCMapTestCase; | import org.apache.fop.render.pdf.PDFCMapTestCase; | ||||
import org.apache.fop.render.pdf.PDFEncodingTestCase; | import org.apache.fop.render.pdf.PDFEncodingTestCase; | ||||
suite.addTest(RichTextFormatTestSuite.suite()); | suite.addTest(RichTextFormatTestSuite.suite()); | ||||
suite.addTest(new TestSuite(ImageLoaderTestCase.class)); | suite.addTest(new TestSuite(ImageLoaderTestCase.class)); | ||||
suite.addTest(new TestSuite(ImagePreloaderTestCase.class)); | suite.addTest(new TestSuite(ImagePreloaderTestCase.class)); | ||||
suite.addTest(new TestSuite(IFMimickingTestCase.class)); | |||||
//$JUnit-END$ | //$JUnit-END$ | ||||
return suite; | return suite; | ||||
} | } |
/* | |||||
* 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 | |||||
} | |||||
}); | |||||
} | |||||
} |
<?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> |