<?xml version="1.0"?>
<!DOCTYPE document SYSTEM "./dtd/document-v10.dtd">

<!-- ========================================================================= -->
<!-- Copyright (C) The Apache Software Foundation. All rights reserved.        -->
<!--                                                                           -->
<!-- This software is published under the terms of the Apache Software License -->
<!-- version 1.1, a copy of which has been included with this distribution in  -->
<!-- the LICENSE file.                                                         -->
<!-- ========================================================================= -->

<!-- ========================================================================= -->
<!-- author vincent.hardy@eng.sun.com                                          -->
<!-- version $Id$ -->
<!-- ========================================================================= -->
<document>
    <header>
        <title>Batik SVG Toolkit</title>
        <subtitle>SVG Tools in Java</subtitle>
        <authors>
            <person name="Vincent Hardy" email="vincent.hardy@eng.sun.com"/>
            <person name="Thierry Kormann" email="tkormann@apache.org"/>
            <person name="Stephane Hillion" email="stephane@hillion.org"/>
        </authors>
    </header>

    <body>
        <s1 title="Batik Overview">
        <figure src="images/splash.png" alt="Batik release 1.5beta3" />

        <p>
        Batik is a Java(tm) technology based toolkit for applications or applets that want 
        to use images in the <link href="http://www.w3.org/TR/SVG/">Scalable Vector
        Graphics (SVG)</link> format for various purposes, such as
        viewing, generation or manipulation.
        </p>
	 <ul>
		<li><link href="#BatikApplications">Applications of Batik</link></li>
		<li><link href="#SVGSpecification">The SVG Specification</link></li>
		<li><link href="#BatikStatus">What is Batik's Implementation Status?</link></li>
            		<li><link href="#DownloadBatik">Downloading the Batik distribution (source and binary)</link></li>
		<li><link href="#projectAndProductExamples">Examples of projects and products using Batik</link></li>
	</ul>
        <p>
        The project's ambition is to give developers a set of 
        <link href="architecture.html#coreComponents">core 
        modules</link> which can be used together or individually to support 
        specific SVG solutions. Examples of 
        <link href="architecture.html">modules</link>
        are the 
        <link href="architecture.html#lowLevelComponents">SVG Parser</link>, 
        the <link href="svggen.html">SVG Generator</link> and 
        the <link href="domapi.html">SVG DOM</link>. Another ambition for 
        the Batik project is to make it highly 
        <link href="extendingBatik.html">extensible</link> 
        (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 deliverables is a full fledged 
        <link href="svgviewer.html">SVG browser</link> implementation 
        which validates the various modules and their inter-operability. 
        </p>

        </s1>

        <anchor id="BatikApplications" />
        <s1 title="Applications of Batik">
        <p><img src="images/batikUses.jpg" alt="Batik use cases" />
        With Batik, you can manipulate SVG documents anywhere Java is
        available. You can also use the various 
        <link href="architecture.html">Batik modules</link> to
        <link href="svggen.html">generate</link>, 
        <link href="domapi.html">manipulate</link>, 
        <link href="rasterizerTutorial.html">transcode</link> and search SVG 
        images in your applications or applets.
        </p>
        <p>
        Batik makes it easy for Java based applications or applets to 
        deal with SVG content. For example, using Batik's 
        <link href="svggen.html">SVG generator module</link>, 
        a Java application or applets can very easily export its
        graphics into the SVG format. Using Batik's SVG processor and
        SVG Viewing component, an application or applet can very
        easily integrate SVG viewing capabilities.  Another
        possibility is to use Batik's modules to convert SVG to
        various formats, such as raster images (JPEG,PNG or Tiff).
        </p>
        <p>
        Batik provides <link href="architecture.html">core modules</link> 
        for handling and processing SVG files. See 
        <link href="#projectAndProductExamples">examples of projects and
        products using Batik</link> for real-life example of how Batik is
        already integrated in projects and products.
        </p>
        <p>
        Batik provides building blocks that developers can assemble in
        various ways in their Java technology applications or applets
        to generate, parse, view or convert SVG contents.  Batik can
        also be used to generate SVG on a client or on a server, and
        Batik can <link href="svgrasterizer.html">convert SVG
        content</link> convert SVG content into other formats such as
        JPEG, PNG or Tiff or other formats (<link
        href="rasterizerTutorial.html">transcoder API</link>).
        Batik's goal is to make it easy for developers to handle SVG
        content for various purposes, client-side or server-side, as
        illustrated in the diagram.
        </p>
         </s1>

        <anchor id="SVGSpecification" />
        <s1 title="The SVG Specification">
        <p>
        Scalable Vector Graphics, SVG, is a <link href="http://www.w3.org">W3C</link>
        recommendation. It defines an XML grammar for rich 2D graphics
        which includes features such as transparency, arbitrary geometry, filter
        effects (shadows, lighting effects, etc...), scripting and animation.
        </p>
        <p>
        The <link href="http://www.w3.org/TR/SVG/">SVG specification</link> states:</p>
        <p>This specification defines the features and syntax for Scalable Vector Graphics (SVG).
	SVG is a language for describing two-dimensional graphics in XML [<link href="http://www.w3.org/TR/REC-xml">XML10</link>]. SVG allows for three types 
	of graphic objects: vector graphic shapes (e.g., paths consisting of straight lines and curves), 
	images and text. Graphical objects can be grouped, styled, transformed and composited into previously 
	rendered objects. The feature set includes nested transformations, clipping paths, alpha masks, 
	filter effects and template objects.</p>
	<p>SVG drawings can be interactive and dynamic. Animations can be defined and triggered either declaratively
	(i.e., by embedding SVG animation elements in SVG content) or via scripting.</p>
         </s1>

        <anchor id="BatikStatus" />
        <s1 title="Batik's Implementation Status">
        <p>
        The latest revision of Batik is a conformant <link href="http://www.w3.org/TR/SVG11/conform.html#ConformingSVGViewers">static
        SVG implementation</link> and supports <link href="http://www.w3.org/TR/SVG11/interact.html">interactivity</link>, 
        <link href="http://www.w3.org/TR/SVG11/linking.html">linking</link> and 
        <link href="http://www.w3.org/TR/SVG11/script.html">scripting</link> features of the SVG specification. 
        The Batik project does not support declarative <link href="http://www.w3.org/TR/SVG11/animate.html">animation</link> 
        and there is currently no plan to add support for SMIL Animation to the Batik project.</p>

        <p>
        See the  <link href="status.html">status</link> page for a detailed description of the set of SVG features
        Batik supports.
        </p>
        </s1>
 
        <anchor id="DownloadBatik" />
        <s1 title="Download Batik">
        <p>
        You can get the Batik distribution (<link href="install.html#distributions">source</link> 
        and <link href="install.html#distributions">binary</link>) on the 
        <link href="http://www.apache.org/dyn/closer.cgi/xml/batik">download page</link>.
        </p>
        <note>
        All other libraries needed by Batik are included in the distribution.
        As a consequence the Batik archive is quite big, but
        after you downloaded it, you will not need anything else.
        </note>
        </s1>

        <anchor id="projectAndProductExamples" />
        <s1 title="Examples of projects and products using Batik">
        <p>While it is hard to track projects and products which are using Batik, here are a few
        ones which are known:</p>
        <ul>
        <li><link href="http://luxor-xul.sourceforge.net/index.html">Luxor XUL</link> is a free, open-source XML User Interface Language (XUL) toolkit in Java released under the GNU
GPL that supports hand-picked Mozilla XUL goodies and
also includes a ultra-lightweight, multi-threaded web
server, a portal engine, a scripting engine, a
template engine and much more. Gerard Bauer, the Luxor project lead, has written an extensive
<link href="http://luxor-xul.sourceforge.net/talk/jug-nov-2002/slides.html">SVG presentation</link>.</li>
        <li><link href="http://www.bitflash.com/products/brilliance.asp">BitFlash Brilliance</link> delivers a robust 
        set of graphic-design and source-code editing tools for fast and flexible Mobile
         SVG development. It uses Batik to display SVG Images.</li>
        <li><link href="http://xml.apache.org/fop">The Apache FOP project</link> uses Batik to handle SVG images. It uses the SVG rasterizer and extends the Batik transcoder 
            architecture to offer SVG to PDF conversion.</li>
        <li><link href="http://xml.apache.org/cocoon">The Apache Cocoon project</link> uses Batik to rasterize SVG images. </li>
        <li><link href="http://www.object-refinery.com/jfreechart/index.html">The JFreeChart Project</link> uses Batik to export charts in the SVG format. </li>
        <li><link href="http://www.ilog.com/products/jviews">ILOG JViews Component Suite</link>, a product for advanced visualization, uses and extends the Batik SVG export module. </li>
        <li><link href="http://www2.ilog.com/preview/Discovery/">ILOG Discovery Preview</link>, a free visual data analysis tool letting you visualize and edit data sets in a very wide variety of views (2D graphs and charts, various kinds of treemaps, parallel coordinates, parallel histograms (aka "Table Lens") and much more), uses the Batik SVG export module. </li>
        <li><link href="http://otn.oracle.com/products/jdev/content.html">Oracle Corp.'s JDeveloper9i</link> uses Batik to export class diagrams in SVG. It uses the
        SVG export module (SVGGraphics2D).</li>
        <li><link href="http://www.optimalj.com">OptimalJ</link>, a UML Class Diagram Editor for NetBeans, uses Batik to export SVG. </li>
        <li><link href="http://www.togethersoft.com/products/controlcenter/whats_new.jsp">Together Control Center 5.5</link> uses Batik to export UML diagrams in SVG.</li>
        <li><link href="http://xweb.sf.net">XWeb</link>, a tool to create websites automatically out of XML input. Uses the Batik SVG Rasterizer.</li>
        <li><link href="http://www.elixirtech.com/ElixirReport">ElixirTech's ElixirReport</link> uses 
        Batik for charting and for its SVG component.</li>
        <li><link href="http://lagoon.sourceforge.net/">Lagoon</link>, an XML-based framework for web site maintenance, uses the Batik SVG Rasterizer to render SVG as bitmap graphics for web publishing</li>
        <li><link href="http://burma.free.fr">eDoc</link>, a page layout software, is using the Batik SVG generator to export pages to SVG</li>
        <li><link href="http://www.isacat.net/2002/svolgo/index.htm">Svolgo</link>,a Graph Visualisation/Transformation Framework for the
                Semantic Web Cross-model transformation, node and arc diagrams, representation in SVG. This project uses Batik's SVG DOM implementation.</li>
        <li><link href="http://www.throneworld.com/lords/gms/dev.html">Lords Map</link>, a program to allow players and visitors to view the current map
                of various campaigns. Lord Map uses Batik's SVG DOM and SVG Generator.</li>
        <li><link href="http://bitflux.ch/developer/misc/70/">XML_svg2image, </link> is a PHP class which translates svg files to png or jpeg using Batik</li>
        </ul>
        </s1>
    </body>
</document>
