
                  A  P  A  C  H  E     B  A  T  I  K

  What is it?
  -----------

  Batik is a Java based toolkit for applications which handle
  images in the Scalable Vector Graphics (SVG) format for
  various purposes, such as viewing, generation or
  manipulation. 

  The project's ambition is to give developers a set of core
  modules which can be used together or individually to
  support specific SVG solutions. Examples of modules are
  an SVG parser, an SVG generator and an SVG DOM
  implementation. Another ambition of the Batik project is to
  make it highly extensible (for example, Batik allows the
  developer to handle custom SVG tags). Even though the
  goal of the project is to provide a set of core modules, one
  of the deliveries is a full fledged SVG Viewer
  implementation which validates the various modules and
  their inter-operability. 

  In a nutshell, Batik provides building blocks that developers
  can assemble in various ways in their Java technology
  applications to generate, parse, view or convert SVG
  contents. For example, Batik contains a Swing component
  that can add SVG viewing capability to all Java technology
  applications. Batik can also be used to generate SVG on a
  client or on a server, and Batik can convert SVG content
  into other formats such as JPEG or PNG. Batik's goal is to
  make it easy for application developers to handle SVG
  content for various purposes, client-side or server-side.


  Where is it?
  ------------

  The home page for the Apache Batik project can be found in the Apache XML 
  Project web site (http://xml.apache.org/batik/). There you also find 
  information on how to download the latest release as well as all the other 
  information you might need regarding this project.


  Requirements
  ------------

   o  A Java 1.3 or later compatible virtual machine for your operating system.

  Optional Libraries
  ------------------

  By default, Batik includes a scripting engine for ECMAScript. It is possible
  to add support for additional scripting languages (Python and TCL)
  
  See : http://xml.apache.org/batik/install.html#optionalComponents for details.
 
  Installation Instructions and Documentation
  -------------------------------------------

  Read the Install page at http://xml.apache.org/batik for the installation instructions.

  Look for the most updated documentation on the Apache Batik web site under
  the Apache XML Project (http://xml.apache.org/batik/).


  Licensing and legal issues
  --------------------------

  For legal and licensing issues, please read the LICENSE file.

  Thanks for using Apache Batik.

                                           The Apache XML Project
                                           http://xml.apache.org/
