소스 검색

Common base class for all of FOP's transcoders.


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@196176 13f79535-47bb-0310-9956-ffa450edef68
tags/Root_Temp_KnuthStylePageBreaking
Jeremias Maerki 21 년 전
부모
커밋
e41db6d94a
1개의 변경된 파일317개의 추가작업 그리고 0개의 파일을 삭제
  1. 317
    0
      src/java/org/apache/fop/svg/AbstractFOPTranscoder.java

+ 317
- 0
src/java/org/apache/fop/svg/AbstractFOPTranscoder.java 파일 보기

@@ -0,0 +1,317 @@
/*
* $Id$
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
*/
package org.apache.fop.svg;

import java.awt.Dimension;
import java.awt.geom.AffineTransform;
import java.awt.geom.Dimension2D;

import org.xml.sax.EntityResolver;

import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.avalon.framework.logger.Logger;
import org.apache.batik.bridge.UserAgent;
import org.apache.batik.bridge.UserAgentAdapter;
import org.apache.batik.dom.svg.SVGDOMImplementation;
import org.apache.batik.dom.util.DocumentFactory;
import org.apache.batik.transcoder.ErrorHandler;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.XMLAbstractTranscoder;
import org.apache.batik.transcoder.image.ImageTranscoder;
import org.apache.batik.util.SVGConstants;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.DOMImplementation;

/**
* This is the common base class of all of FOP's transcoders.
*/
public abstract class AbstractFOPTranscoder extends XMLAbstractTranscoder
implements LogEnabled {

/**
* The user agent dedicated to this Transcoder.
*/
protected UserAgent userAgent = createUserAgent();

private Logger logger;
private EntityResolver resolver;

/**
* Constructs a new FOP-style transcoder.
*/
public AbstractFOPTranscoder() {
hints.put(KEY_DOCUMENT_ELEMENT_NAMESPACE_URI,
SVGConstants.SVG_NAMESPACE_URI);
hints.put(KEY_DOCUMENT_ELEMENT, SVGConstants.SVG_SVG_TAG);
hints.put(KEY_DOM_IMPLEMENTATION,
SVGDOMImplementation.getDOMImplementation());
}
/**
* Creates and returns the default user agent for this transcoder. Override
* this method if you need non-default behaviour.
* @return UserAgent the newly created user agent
*/
protected UserAgent createUserAgent() {
return new FOPTranscoderUserAgent();
}
/**
* @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(Logger)
*/
public void enableLogging(Logger logger) {
this.logger = logger;
}

/**
* Sets the EntityResolver that should be used when building SVG documents.
* @param resolver the resolver
*/
public void setEntityResolver(EntityResolver resolver) {
this.resolver = resolver;
}
/**
* Returns the logger associated with this transcoder. It returns a
* ConsoleLogger if no logger has been explicitly set.
* @return Logger the logger for the transcoder.
*/
protected final Logger getLogger() {
if (this.logger == null) {
this.logger = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
}
return this.logger;
}
/**
* Creates a <tt>DocumentFactory</tt> that is used to create an SVG DOM
* tree. The specified DOM Implementation is ignored and the Batik
* SVG DOM Implementation is automatically used.
*
* @param domImpl the DOM Implementation (not used)
* @param parserClassname the XML parser classname
* @return the document factory
*/
protected DocumentFactory createDocumentFactory(DOMImplementation domImpl,
String parserClassname) {
final FOPSAXSVGDocumentFactory factory =
new FOPSAXSVGDocumentFactory(parserClassname);
if (this.resolver != null) {
factory.setAdditionalEntityResolver(this.resolver);
}
return factory;
}

// --------------------------------------------------------------------
// FOP's default error handler (for transcoders)
// --------------------------------------------------------------------

/**
* This is the default transcoder error handler for FOP. It logs error
* to an Avalon Logger instead of to System.out. The remaining behaviour
* is the same as Batik's DefaultErrorHandler.
*/
protected class FOPErrorHandler implements ErrorHandler {
/**
* @see org.apache.batik.transcoder.ErrorHandler#error(TranscoderException)
*/
public void error(TranscoderException te)
throws TranscoderException {
getLogger().error(te.getMessage());
}

/**
* @see org.apache.batik.transcoder.ErrorHandler#fatalError(TranscoderException)
*/
public void fatalError(TranscoderException te)
throws TranscoderException {
throw te;
}

/**
* @see org.apache.batik.transcoder.ErrorHandler#warning(TranscoderException)
*/
public void warning(TranscoderException te)
throws TranscoderException {
getLogger().warn(te.getMessage());
}

}

// --------------------------------------------------------------------
// UserAgent implementation
// --------------------------------------------------------------------

/**
* A user agent implementation for FOP's Transcoders.
*/
protected class FOPTranscoderUserAgent extends UserAgentAdapter {

/**
* Returns the default size of this user agent (400x400).
* @return the default viewport size
*/
public Dimension2D getViewportSize() {
return new Dimension(400, 400);
}

/**
* Displays the specified error message using the <tt>ErrorHandler</tt>.
* @param message the message to display
*/
public void displayError(String message) {
try {
getErrorHandler().error(new TranscoderException(message));
} catch (TranscoderException ex) {
throw new RuntimeException();
}
}

/**
* Displays the specified error using the <tt>ErrorHandler</tt>.
* @param e the exception to display
*/
public void displayError(Exception e) {
try {
getErrorHandler().error(new TranscoderException(e));
} catch (TranscoderException ex) {
throw new RuntimeException();
}
}

/**
* Displays the specified message using the <tt>ErrorHandler</tt>.
* @param message the message to display
*/
public void displayMessage(String message) {
getLogger().info(message);
}

/**
* Returns the pixel to millimeter conversion factor specified in the
* <tt>TranscodingHints</tt> or 0.3528 if any.
* @return the pixel unit to millimeter factor
*/
public float getPixelUnitToMillimeter() {
Object key = ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER;
if (getTranscodingHints().containsKey(key)) {
return ((Float)getTranscodingHints().get(key)).floatValue();
} else {
// return 0.3528f; // 72 dpi
return 0.26458333333333333333333333333333f; // 96dpi
}
}

/**
* Returns the user language specified in the
* <tt>TranscodingHints</tt> or "en" (english) if any.
* @return the languages for the transcoder
*/
public String getLanguages() {
Object key = ImageTranscoder.KEY_LANGUAGE;
if (getTranscodingHints().containsKey(key)) {
return (String)getTranscodingHints().get(key);
} else {
return "en";
}
}

/**
* Get the media for this transcoder. Which is always print.
* @return PDF media is "print"
*/
public String getMedia() {
return "print";
}

/**
* Returns the user stylesheet specified in the
* <tt>TranscodingHints</tt> or null if any.
* @return the user style sheet URI specified in the hints
*/
public String getUserStyleSheetURI() {
return (String)getTranscodingHints()
.get(ImageTranscoder.KEY_USER_STYLESHEET_URI);
}

/**
* Returns the XML parser to use from the TranscodingHints.
* @return the XML parser class name
*/
public String getXMLParserClassName() {
Object key = KEY_XML_PARSER_CLASSNAME;
if (getTranscodingHints().containsKey(key)) {
return (String)getTranscodingHints().get(key);
} else {
return XMLResourceDescriptor.getXMLParserClassName();
}
}

/**
* Check if the XML parser is validating.
* @return true if the XML parser is validating
*/
public boolean isXMLParserValidating() {
return false;
}

/**
* Unsupported operation.
* @return null since this is unsupported
*/
public AffineTransform getTransform() {
return null;
}
}
}

Loading…
취소
저장