<?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 Announcement</title>
        <subtitle>Press Release</subtitle>
        <authors>
            <person name="Vincent Hardy" email="vincent.hardy@eng.sun.com"/>
            <person name="Roddy Young" email="roddy@zotgroup.com"/>
        </authors>
    </header>

    <body>
        <s1 title="Batik Press Release">
        <p>
<strong>CONTACT:</strong><br />
<em>Roderic Olvera Young</em><br />
<em>ZOT Group</em><br />
<em>+1.617.542.5335 ext/202</em><br />
<em>press@apache.org</em><br />
</p><p>
APACHE SOFTWARE FOUNDATION RELEASES SCALABLE VECTOR GRAPHICS TOOLKIT
Future of Web Graphics Available as Open Source, 
Java Technology-based Application -- Beta Release of Batik 1.0
</p><p>
http://xml.apache.org/batik/ -- 4 December 2000 -- The Apache Software 
Foundation's XML Project today announced the beta release of Batik 1.0, 
the first cooperatively developed, open source Scalable Vector Graphics (SVG) 
Toolkit based on the Java(tm) platform. The SVG 1.0 specification 
is currently in the W3C Candidate Recommendation review period. Over the 
past few months, contributors from CSIRO Australia, Eastman Kodak Company, 
ILOG, and Sun Microsystems have helped produce the freely-downloadable 
toolkit.
</p><p>

"Apache's Batik provides building blocks that allow developers to generate, 
parse, view and convert SVG content in their Java Technology applications. 
Batik makes it easy for application developers to handle SVG content for 
many purposes both client-side and server-side. Applications can use Batik's 
pluggable GUI component to easily support SVG viewing capabilities and even 
export graphics drawn with the core Java 2D API classes to the SVG format, 
as well as convert SVG content into other formats such as JPEG or PNG," the
 Batik team stated. "In addition, Batik is designed to be extensible. Developers 
can add custom SVG extensions, graphic implementations and converters, such as 
their own custom filter elements, gradient paint implementations or an SVG to 
PDF converter."
</p><p>
   
"W3C's Scalable Vector Graphics (SVG) will transform the Web as we know it, 
by combining the full force of XML with the visual strengths of dynamic, 
well-internationalized, and accessible vector graphic capabilities," enthused 
Chris Lilley, W3C Graphics Activity Lead. "We're pleased to see the arrival 
of Batik, as the combined efforts of a number of seasoned SVG implementers 
will lead towards a fully conforming, open-source SVG implementation which can 
then be embedded in other software solutions."
</p><p>

With Batik's SVG Toolkit, Web developers and designers gain two critical 
qualities for graphical representations: precision and quality. Unlike bitmap 
representations which represent data with pixels, SVG describes graphics 
using shapes, paths and other 2D descriptors. The result is rich, sophisticated 
2D graphic shapes (including expanded fonts, panning, zooming, and dynamic 
or interactive drawings) that can download and stream more quickly. Because 
SVG is XML-based, searching for text in and about the graphic becomes much 
simpler and it can easily integrate older graphic formats. Batik is built 
completely with Java technology code, which means development can be done 
on any operating system that supports the Java platform, including Linux, 
Windows, the Solaris (tm) Operating Environment, and other UNIX based systems. 
The Batik project is working within the software development community to make 
SVG the standard for Web-based graphics.
</p><p>

The Batik team aims to give developers worldwide an easy-to-use set of modules 
that can be used together or individually to support SVG solutions, including 
a full-fledged SVG Viewer Implementation, which validates the various modules 
and their interoperability.

</p><p>
"Batik 1.0 beta represents a significant milestone in solidifying SVG as the 
Web graphics standard," said Jon Ferraiolo, Adobe Systems Senior Computer Scientist, and editor of the SVG specification. "With the Batik toolkit developers can now integrate much of SVG's rich feature set into their offerings and begin empowering professional Web designers with the tools they need to build more compelling, graphically rich sites that truly leverage the benefits of XML. We fully endorse SVG and are working diligently to support it throughout our line of professional Web design and authoring products including Adobe Photoshop, LiveMotion, GoLive, Illustrator and the freely downloadable Adobe SVG Viewer."

</p><p>
"We're proud to participate in the Batik project and see this collaborative initiative as the best way to progress implementations that can exploit the power of SVG. This will
hopefully encourage other developers to adopt SVG across a diverse range of
applications, as the dominant industry standard for 2D graphics," said Ross Ackland, Science and Industry Manager, CSIRO Australia.

</p><p>
"IBM continues to participate in evolving the Internet into a much more dynamic tool for e-business," said Rod Smith, vice president Emerging Technology, IBM. "The Batik open source implementation of the SVG specification underscores the importance of bringing emerging technologies into use at a very rapid pace."

</p><p>
"ILOG believes SVG is the vehicle for creating a richer, more compelling Web experience. With Batik, Apache and the open source community will be making an important contribution toward accelerating the adoption of SVG," said Jean-Fran&#231;ois Abramatic, senior vice president, ILOG research and development. "We're pleased to be an active partner in this effort - a culmination of our involvement in XML and SVG standardization, both as a W3C working group member and implementer with the first commercial graphical user interface toolkit supporting the emerging standard, ILOG JViews."

</p><p>
"Kodak congratulates the Apache Foundation and the Batik project on the first release of its SVG toolkit," said Stephen Shaffer, CTO, Print@Kodak, Eastman Kodak Company.  "Batik will significantly advance SVG as an important element for enabling both graphical and image-intensive creative web-based applications. Because of its open source nature, ISV's will be able to leverage the powerful and extensible framework it provides to develop new classes of creative applications and to deploy SVG in environments not previously possible. Such applications and systems are fundamental to delivering new products and services through our Print@Kodak Internet photofinishing service."  

</p><p>
"The Apache Software Foundation has an excellent track record in bringing to market solid tools and technology implementations required by today's network-centric developers," stated George Paolini, vice president, Technology Evangelism, Sun Microsystems. "Sun has been proud to work closely with this open source group on the Batik project - which is a great example of the synergies between the Java platform's portable code and XML's portable data - as well as other Apache initiatives, and we congratulate everyone involved on so quickly delivering a state-of-the-art toolkit for SVG-based graphics."

</p><p>
The project's name comes from the famous and highly developed art traditions of the Indonesian island of Java. The quintessentially Indonesian textile and its geometric patterns and colorful designs embody high quality graphics -- the thrust behind the Apache-XML-Batik Project.

</p><p>
The Batik Project encourages participation through its mailing list:
http://xml.apache.org/mail.html

</p><p>
For more information about the Batik project please see
<strong>http://xml.apache.org/batik/</strong>

</p><p><em>
About the Apache Software Foundation</em><br /><br />
<em>
The Apache Software Foundation provides organizational, legal and financial support for the Apache open-source software projects. Formed by members of the Apache group, the group still exists beyond the participation of individual volunteers, to enable contributions on intellectual property and financial support, and to provide a vehicle for limiting legal exposure while participating in open-source software projects. For more information on the Apache Software Foundation, please see http://www.apache.org/
</em>
</p>
        </s1>
    </body>
</document>
