
                  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://xmlgraphics.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://xmlgraphics.apache.org/batik/install.html#optionalComponents for
  details.
 
  Installation Instructions and Documentation
  -------------------------------------------

  Read the Install page at http://xmlgraphics.apache.org/batik/install.html
  for the installation instructions.

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


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

  For legal and licensing issues, please read the LICENSE and NOTICE files.

  Thanks for using Apache Batik.

                                           The Apache XML Graphics Project
                                           http://xmlgraphics.apache.org/
