
                  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 7 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/
