blob: 8f19b614d44da0bb714ea73a983f3240a04bf58d [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- ====================================================================== -->
<!-- author vincent.hardy@eng.sun.com -->
<!-- author cjolif@ilog.fr -->
<!-- version $Id: faq.xml 388441 2006-03-24 07:50:03Z cam $ -->
<!-- ====================================================================== -->
<!DOCTYPE faqs PUBLIC "-//APACHE//DTD FAQ V2.0//EN" "http://forrest.apache.org/dtd/faq-v20.dtd">
<faqs>
<title>Frequently Asked Questions</title>
<part id="part-general">
<title>General questions</title>
<faq id="what-is-batik">
<question>What is Batik?</question>
<answer>
<p>
Batik is a Java-based toolkit for applications or applets that want
to use images in the <a href="site:svg11">Scalable
Vector Graphics (SVG)</a> format for various purposes, such as
display, generation or manipulation.
</p>
</answer>
</faq>
<faq id="what-is-svg">
<question>What is SVG?</question>
<answer>
<p>
<a href="site:svg11">SVG</a> (Scalable Vector
Graphics) is an open-standard language for describing
two-dimensional (2D) graphics in XML. It is a Recommendation from the
<a href="http://www.w3.org/">W3C</a>. SVG lets you describe rich images
with features such as gradients, transparency, filter effects and animation.
</p>
<p>
SVG has three types of graphic objects: shapes (e.g., paths consisting
of straight lines and curves), images and text. Graphical objects can be grouped,
styled, transformed and composited (e.g., drawn with transparency). SVG has a
large set of static features which includes nested transformations, clipping
paths, masking and filter effects.
</p>
<p>
In addition, SVG images can be dynamic and interactive. A rich set of event
handlers such as for mouse movement and clicks can be assigned to any SVG
graphical object. These handlers can invoke scripts, which, in response to an
event, can dynamically modify the SVG graphic through the SVG Document Object Model
(DOM) API, allowing, for example scripts to change the color or location of graphical
elements.
</p>
<p>
SVG graphical elements can be animated through scripting. Alternatively,
animation sequences can be expressed directly in XML because SVG leverages the
<a href="site:smil">SMIL Animation</a>
specification for multimedia, another
<a href="http://www.w3.org/">W3C</a> specification.
</p>
</answer>
</faq>
<faq id="what-can-i-do">
<question>What can I do with Batik?</question>
<answer>
<p>
Batik contains several <a href="site:architecture">core modules</a>
which can be used independently or jointly to <strong>generate SVG
content</strong> (see the <a href="site:generator">SVG Generator</a>
and <a href="site:dom-api">SVG DOM</a> implementation documentation)
<strong>view SVG content</strong> (see the <a href="site:swing">JSVGCanvas</a>)
or <strong>convert to and from the SVG format</strong> (see the
<a href="site:transcoder">SVG Transcoder</a> page).
</p>
<p>
In addition, Batik contains
<a href="using/architecture.html#lowLevelComponents">low level
modules</a>, such as an object-oriented Graphic Vector Toolkit
(GVT), a set of low level parsers specific to the SVG syntax and a
set of <a href="site:extending">extensions</a> to the Java 2D API
(such as sophisticated fill types and filter effects).
</p>
<p>
Finally, Batik comes with <a href="site:tools">packaged applications</a> to help developers get
familiar with the code and be quickly able to use the various modules: Squiggle, an
<a href="site:browser">SVG browser</a> (in the
<code>org.apache.batik.apps.svgbrowser</code> package) an
<a href="site:rasterizer">SVG rasterizer</a> (in the
<code>org.apache.batik.apps.rasterizer</code> package), a
<a href="site:font-converter">Font converter</a> (in the
<code>org.apache.batik.apps.ttf2svg package</code>) and an
<a href="site:pretty-printer">SVG pretty printer</a> (in the
<code>org.apache.batik.apps.svgpp package</code>).</p>
<p>
Squiggle, the <a href="site:browser">SVG browser</a> can display SVG
documents and lets the user zoom, pan and rotate any SVG document,
view the SVG source, link between SVG documents, view a tree
representation of the SVG DOM and more. One important component of
the SVG viewer is the <code>org.apache.batik.swing.JSVGCanvas</code>
component, which can be plugged in to any Java application or applet
to provide SVG viewing capability.
</p>
<p>
The <a href="site:rasterizer">SVG rasterizer</a>
lets the user convert
SVG files to raster formats such as JPEG, PNG or TIFF . It
contains an extensible mechanism so that arbitrary raster
formats can be added. For example, the rasterizer lets you
create one SVG file with a special effect (e.g., shadows,
gradients, etc.), turn it into a PNG image, then modify the
SVG source (e.g., modify a piece of text or a color), and
generate another PNG image from it. This way, you can easily
generate a series of images sharing a common theme or look and
feel to post on a web site. (Note that the rasterizer can also
be used on a web server to do this conversion automatically).
</p>
<p>
The <a href="site:font-converter">SVG Font Converter</a>
lets the user easily create
an <a href="http://www.w3.org/TR/SVG11/fonts.html">SVG
Font</a> for a set of characters from a TrueType Font
file. That SVG Font definition can be embedded in a document
using the characters. This allows users to create SVG
documents that are self contained and do not rely on system
fonts, and guarantees that the SVG file will be displayed
exactly as it was authored on all platforms.
</p>
<p>
The <a href="site:pretty-printer">SVG Pretty Printer</a>
is a convenience tool to
pretty print an SVG document, which means that you can
reformat any existing SVG document to produce a nicely
formatted and highly legible version.
</p>
<p>
These applications show that Batik can be used client side
(the browser can be used on any client machine) and server
side (the rasterizer can be used to serve SVG images to client
machines that do not have SVG support).
</p>
</answer>
</faq>
<faq id="why-at-apache">
<question>Why do we have such a project at Apache?</question>
<answer>
<p>
The <a href="http://xmlgraphics.apache.org/charter.html">mission
of the Apache XML Graphics Project</a> is to promote the use of
XML-based graphics by “providing robust, full-featured,
commercial-quality, and freely available software packages for the
conversion of XML to graphical output and for related components”.
Batik as an open source implementation of a key format for today’s
and tomorrow’s web fits well in this mission.
</p>
</answer>
</faq>
<faq id="how-does-batik-relate">
<question>How does Batik relate to other Apache projects?</question>
<answer>
<p>
Batik is used in <a href="http://cocoon.apache.org/">Cocoon</a>
for server side rasterization of SVG images. In addition, the Batik is used in the
<a href="http://xmlgraphics.apache.org/fop/">FOP</a> project to convert
SVG images to PDF format.
</p>
</answer>
</faq>
<faq id="how-did-it-start">
<question>How did it start?</question>
<answer>
<p>
Batik started out because several teams doing SVG related projects decided to join
efforts with the idea that the whole will be greater than the sum of the parts. The
following companies or institutions are part of the team that contributed and/or
created the initial Batik project, during the fall of 2000:
</p>
<ul>
<li><a href="http://www.csiro.au/">CSIRO</a></li>
<li><a href="http://www.ilog.com/">ILOG</a></li>
<li><a href="http://koala.ilog.fr/">Koala Team</a></li>
<li><a href="http://www.kodak.com/">Eastman Kodak Company</a></li>
<li><a href="http://www.sun.com/">Sun Microsystems, Inc.</a></li>
</ul>
<p>
In addition, the Batik project is supported by <a href="http://www.ibm.com/">IBM</a>.
</p>
<p>
We encourage anyone to participate. As with all ASF projects, all efforts are
volunteer-based. We are looking for individuals to work with us on
fulfilling our goals for Batik in the spirit of collaborative open-source
software development.
</p>
</answer>
</faq>
<faq id="what-is-next">
<question>Where is Batik going? What is next?</question>
<answer>
<p>
The SVG implementation is not complete (see the current
<a href="site:status">status</a>), and there is more work to
do to achieve a fully functional viewer.
</p>
<p>
Batik 1.1 supports all static SVG features,
linking and a limited support for scripting, and the 1.5 release
completed support for scripting and dynamic documents.
With Batik 1.6 came many improvements to
the implementation of SVG DOM functions, bug fixes, performance
improvements, and the beginning of some SVG 1.2 support.
Declarative animation and some SVG 1.2 features were introduced
in Batik 1.7beta1. The 1.7 release brought mostly bug fixes.
Completion of remaining SVG 1.1 functionality and the addition
of Further SVG 1.2 functionality should be supported in the 2.0
release.
</p>
<p>
The type of applications (e.g., transcoding applications)
that can or will be added to Batik depends on contributions
and feedback.
</p>
</answer>
</faq>
<faq id="how-can-i-create-svg">
<question>How can I create and author SVG content?</question>
<answer>
<p>
Well, you can always use a plain text editor such as vi or
xemacs, but there are many graphic authoring packages that can
export SVG documents and that will let you author SVG content
visually.
</p>
<p>
You can get a list of tools exporting SVG from the <a
href="http://www.w3.org/Graphics/SVG/SVG-Implementations#edit">SVG
implementation</a> section of the SVG Home page on the W3C
web site. You can also imagine building a tool on top of
Batik: feel free to contribute!
</p>
<p>
Authoring is one way of creating SVG content, and graphic
authoring packages are useful for that purpose. However, there
are many types of graphics which can be generated, such as
stock quotes, statistical data, etc. For these types of
graphics, there are many ways to generate SVG content. For
example, if your data (say stock information) is contained in
an XML document, you could use XSLT to transform your XML data
into SVG. If your data comes from a database and you retrieve
that data in a servlet on a Web server (e.g., using JDBC), you
could use the Java binding for the DOM API to generate an SVG
document from the database data. You could also use Batik’s
SVG generator and use the Java 2D API to generate that
graphic.
</p>
<p>
The following URLs will be useful to learn more about each of
these solutions:
</p>
<ul>
<li><a href="http://xml.apache.org/xalan-j/index.html">Xalan for XSLT</a></li>
<li><a href="http://xml.apache.org/xerces-j/index.html">Xerces</a> and
<a href="http://java.sun.com/xml/download.html">Crimson</a> for the DOM API</li>
<li><a href="site:generator">SVG Generator</a></li>
</ul>
</answer>
</faq>
<faq id="what-other-svg-products-exist">
<question>What other SVG products are out there?</question>
<answer>
<p>
There are many companies supporting SVG and you will find a list of
available implementations on the
<a href="http://www.w3.org/Graphics/SVG/SVG-Implementations">W3C’s SVG
implementation page</a>.
</p>
</answer>
</faq>
<faq id="svg-spec">
<question>Where can I find the SVG specification?</question>
<answer>
<p>
The <a href="site:svg11">SVG specification</a> is
available from the <a href="http://www.w3.org/">W3C web site</a>.
</p>
</answer>
</faq>
<faq id="how-much-does-batik-implement">
<question>How much of SVG does Batik implement?</question>
<answer>
<p>
The <a href="site:status">status page</a> shows how much of the SVG
specification Batik implements by showing which of the tests in the
<a href="status.html#beSuiteStatus">SVG Basic Effectivity test
suite</a> Batik successfully passes.
</p>
</answer>
</faq>
<faq id="benefits-of-svg-being-xml">
<question>What are the benefits of SVG being an XML grammar?</question>
<answer>
<p>
Being an XML grammar means SVG can leverage work done around
XML, and SVG actually leverages other grammars such as
<a href="http://www.w3.org/TR/2001/REC-xlink-20010627/">XLink</a>,
for linking and
<a href="http://www.w3.org/TR/2001/REC-smil-animation-20010904/#AnimationFramework">SMIL</a>
for the animation.
</p>
<p>
Beyond the use and mix with other XML syntaxes, being an XML grammar
lets SVG benefit from the plethora of XML tools that make it so easy
to manipulate, generate, search and edit XML files.
</p>
</answer>
</faq>
<faq id="what-is-in-a-name">
<question>Where does the name come from?</question>
<answer>
<p>
Batik is a highly evolved art tradition that developed in Java
(one of the islands comprising what is now called
Indonesia). Batik is generally thought of as the quintessentially
Indonesian textile. Motifs of flowers, twining plants, leaves,
buds, birds, butterflies, fish, insects and geometric forms are
rich in symbolic association and variety; there are about three
thousand recorded batik patterns.
</p>
<p>
We think that Batik gracefully evokes Java, graphics and
high-quality, terms that constitute the core of the toolkit.
</p>
<p>
<a href="http://www.expat.or.id/info/batik.html">This page</a>
shows examples of what Batik textures look like.
</p>
</answer>
</faq>
</part>
<part id="batik-help">
<title>Getting started with Apache Batik/SVG</title>
<faq id="system-requirements">
<question>What are the system requirements to run Batik?</question>
<answer>
<p>
Batik is written in the Java language and requires a version 1.4
implementation at this time.
</p>
</answer>
</faq>
<faq id="how-to-install">
<question>How do I install Batik?</question>
<answer>
<p>
You will need a <a href="http://java.sun.com/">JRE/JDK</a> version
1.4 or above to run Batik.
</p>
<p>
To install Batik you need to <a href="site:download">download</a>
the binary or source distribution and unzip it on your computer.
</p>
<p>
You can have a look at the <a href="site:install">installation
instructions</a> for more information.
</p>
</answer>
</faq>
<faq id="how-can-i-see-demo">
<question>How can I see a demo?</question>
<answer>
<p>
You can see an online demonstration of Squiggle the SVG
browser on the <a href="site:demo">demo page</a>. Alternatively, you
can <a href="site:download">download</a> Batik or see
<a href="site:browser">screenshots</a> of the Batik SVG viewer,
images created from the <a href="site:rasterizer">rasterizer</a> and
an <a href="site:generator">example</a> of how to use the
<code>SVGGraphics2D</code> generator.
</p>
</answer>
</faq>
<faq id="what-scripting-languages-batik-supports">
<question>What scripting languages can I use in my SVG files?</question>
<answer>
<p>
A limited support of scripting in SVG files is provided with
the current version of Batik (script are executed but dynamic
update is not supported).
</p>
<p>
Batik can recognize the following scripting languages:
</p>
<ul>
<li>
ECMAScript thanks to the
<a href="http://www.mozilla.org/rhino/">Mozilla Rhino</a> JavaScript
engine included in the distribution,
</li>
<li>
Python for which you need to download the
<a href="http://www.jython.org">Jython</a> engine, and
</li>
<li>
Tcl for which you need to download the
<a href="http://dev.scriptics.com/software/java/">Jacl</a> engine.
</li>
</ul>
<p>
To get more information on how to install optional
scripting languages you can have a look at the
<a href="site:install">installation instructions</a>.
</p>
</answer>
</faq>
</part>
<part id="batik-error">
<title>Troubleshooting Apache Batik</title>
<faq id="NoSuchMethodException">
<question>
When I try to run Batik it results in a NoSuchMethodException. What
is the problem?
</question>
<answer>
<p>
There is certainly something wrong with your classpath. Clear your
<code>CLASSPATH</code> environment variable and be sure to remove
all the libraries which use the W3C’s DOM bindings from
<code>jre/lib/ext</code> before running any of the Batik’s
applications.
</p>
</answer>
</faq>
<faq id="display-does-not-update">
<question>
When I change the document in Java it doesn’t update the
display, even if I call repaint?
</question>
<answer>
<p>
There are two common causes for this. The first is that the
<a class="class" href="javadoc/org/apache/batik/swing/JSVGCanvas.html">JSVGCanvas</a>
doesn’t know it’s a dynamic document. Normally
Batik detects this by looking for script elements but when you
modify the document from Java it can’t tell. So call
</p>
<source>myJSVGCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);</source>
<p>
before loading the document (with <code>setURI</code>,
<code>setDocument</code>, <code>setSVGDocument</code>, etc.).
</p>
<p>
The second common reason is that the changes aren’t made in
the
<a class="class" href="javadoc/org/apache/batik/bridge/UpdateManager.html">UpdateManager</a>’s
thread. You can run code in the <code>UpdateManager</code>’s thread
with the following:
</p>
<source>UpdateManager um = JSVGCanvas.getUpdateManager();
um.getUpdateRunnableQueue().invokeLater(Runnable);</source>
<p>
<strong>NOTE:</strong> The update manager only becomes
available after the first rendering completes. You can
be notified when this happens by registering a
<code>GVTTreeRendererListener</code>.
</p>
</answer>
</faq>
<faq id="must-mouseover-to-change">
<question>
When I change the document in Java it only updates if I
move the mouse over the canvas?
</question>
<answer>
<p>
The most common causes for this, is that the changes are not made in
the <code>UpdateManager</code>’s thread. See previous FAQ for
example code to run code in the Update Manager’s thread. Moving the
mouse works because it delivers the mouse move events in the update
thread, and after a runnable completes in the
<code>UpdateManager</code>’s thread it checks if the canvas needs
repainting.
</p>
</answer>
</faq>
<faq id="changes-are-not-rendered">
<question>
When I create new SVG elements or modify some SVG attributes through
the DOM API, from ECMAScript, nothing happens, the changes are not
rendered. Why not?
</question>
<answer>
<p>
A common problem is that script contain the wrong DOM calls
to create elements or modify attributes.
</p>
<p>
SVG elements need to be created in the SVG namespace. For example,
to create a <code>rect</code> element, you should use
</p>
<source>document.createElementNS(svgNS, "rect");</source>
<p>
(where <code>svgNS</code> is equal to
<code>"http://www.w3.org/2000/svg"</code>), which appropriately
creates the <code>rect</code> element in the SVG namespace. A call to
</p>
<source>document.createElement("rect")</source>
<p>
creates an element with the name <code>rect</code> but which does not
belong to the SVG namespace. As such, it is ignored by Batik.
</p>
<p>
Most SVG attributes belong to what is called the “per element type
partition namespace” (see the
<a href="http://www.w3.org/TR/REC-xml-names">Namespaces in XML</a>
specification). The appropriate way to set attributes on an SVG
element is a call to <code>setAttributeNS</code> with a namespace
value of <code>null</code>, for example:
</p>
<source>elt.setAttributeNS(null, "width", "40");</source>
<p>
In the Batik SVG DOM implementation, you can also use a call to
<code>setAttribute</code> and you can write
</p>
<source>elt.setAttribute("width", "40")</source>
<p>
However, it is important to know that some implementations make a
difference between <code>setAttribute(x, y)</code> and
<code>setAttributeNS(null, x, y)</code>, so it is goo practice
to use <code>setAttributeNS</code> which is the only guaranteed
interoperable way of setting attributes in a namespace aware DOM
implementation.
</p>
<p>
Finally, for attributes which belong to a specific namespace, like the
the <code>href</code> attribute on the <code>image</code> element,
you have to use the <code>setAttributeNS</code> method with the
XLink namespace. For example, assuming <code>img</code> references an
<code>image</code> DOM <code>Element</code>, you can modify the
href as follows:
</p>
<source>img.setAttributeNS(xlinkNS, "xlink:href", "myImage.jpg");</source>
<p>
where <code>xlinkNS</code> is equal to
<code>"http://www.w3.org/1999/xlink"</code>.
</p>
<p>
For more information on common authoring pitfalls, see Jonathan Watt’s
<a href="http://jwatt.org/svg/authoring/">SVG Authoring
Guidelines</a>.
</p>
</answer>
</faq>
<faq id="null-updatemanager">
<question>
When I get the UpdateManager from the canvas sometimes
it is null, why?
</question>
<answer>
<p>
The <code>JSVGCanvas</code> is highly asynchronous so when you call
<code>setURI</code>, <code>setDocument</code> or
<code>setSVGDocument</code> they return essentially immediately.
Behind the scenes, the canvas creates the rendering tree and does a
first rendering after dispatching the document <code>SVGLoad</code>
event. Only after this first rendering does the
<code>UpdateManger</code> become available.
</p>
</answer>
</faq>
<faq id="why-updatemanager">
<question>
Why do I have to go through the UpdateManager to
run my code? Can’t you just synchronize the DOM?
</question>
<answer>
<p>
It would be possible to synchronize individual calls to
the DOM, however in general this is almost useless for the
way DOM works. For example creating a single rectangle
element takes approximately 6 individual DOM calls. So
higher level synchronization is needed.
</p>
<p>
The use of a
<a class="class" href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runnable.html">Runnable</a>
is a common way of accomplishing synchronization for a block of code.
This is essentially the approach that Swing takes (all Swing
modification should take place in the Swing thread). It was
considered to use the Swing event thread, but this would lock the
user interface while scripts were working.
</p>
</answer>
</faq>
<faq id="extension-tags-work-with-source-not-binary">
<question>
I can use the Batik extension tags with the source distribution
but not with the binary distribution. What am I missing?
</question>
<answer>
<p>
When running from the source distribution you automatically get the
service provider entries for the Batik extension elements
(such as <code>regularPolygon</code> and <code>star</code>).
We chose not to include these by default in the
binary distribution for the Batik applications.
</p>
<p>
There is a subdirectory called <code>extensions</code> that has jar
files that enable the extended elements from Batik.
</p>
</answer>
</faq>
<faq id="red-circles">
<question>
Why do I get red circles when I view the samples/extensions files?
</question>
<answer>
<p>
You are using the binary distribution. This distribution does not
include support for our example extensions (they are just examples
and other people can do more sophisticated things).
</p>
<p>
If you want to view these examples you need to use the extension
enabled versions of the applications in the <code>extensions</code>
subdirectory.
</p>
</answer>
</faq>
<faq id="dom-modifications-do-not-display">
<question>
I am modifying the DOM after displaying it in the JSVGCanvas,
but my changes aren’t shown (even if I call repaint).
</question>
<answer>
<p>
For efficiency, if Batik loads a static document it doesn’t
set up any dynamic support. Batik normally decides whether a
document is dynamic by checking if it contains any
<code>script</code> elements or event handler attributes. However,
if your Java application is modifying the DOM directly there may be
no script elements. In this case you need to tell Batik to set up
dynamic support regardless.
</p>
<p>
You can inform the <code>JSVGCanvas</code> that a document should
be handled dynamically by calling the <code>setDocumentState</code>
method, just before loading the document:
</p>
<source>JSVGCanvas myCanvas = ...;
myCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
myCanvas.setURI("myFile.svg");</source>
</answer>
</faq>
<faq id="batik-fails-with-fop-on-org.w3c.xxx">
<question>
I am trying to use Batik and FOP together but Batik does not work and
fails on the <code>org.w3c.</code>* packages. What is happening?
</question>
<answer>
<p>
Both FOP and Batik use the <code>org.w3c.</code>* packages.
Depending on the version of FOP and Batik, Batik has been using a
version of these packages which is more recent than the one in the
<code>xml-apis.jar</code> file FOP uses. However, if the
<code>xml-apis.jar</code> file that comes with the FOP distribution
is loaded before the Batik jar files, then the version coming with
FOP takes precedence (i.e., that is the version the Java Virtual
Machine loads). Because that version is incompatible with Batik, you
encounter this problem.
</p>
<p>
The solution is to either repackage the <code>xml-apis.jar</code> file
with the classes in the Batik distribution (you will need the Batik
source distribution to do that), or you will need to make sure the
Batik jars are loaded before FOP’s <code>xml-apis.jar</code>, for
example by putting Batik’s jar file before FOP’s in your classpath.
If you are copying your jar files to <code>.../jre/lib/ext</code>,
you can simply remove the FOP <code>xml-apis.jar</code> file from
that directory.
</p>
</answer>
</faq>
<faq id="how-to-checkout-latest-batik-via-svn">
<question>
How do I checkout the latest SVN version of Batik?
</question>
<answer>
<p>
You just have to follow the instructions on the
<a href="site:download">download page</a>.
</p>
</answer>
</faq>
<faq id="mac-os-x-messed-up-svg-files">
<question>
I’m using Mac OS X, and some of the SVG files I view are messed up
(things appear clipped or out of place). What do I need to do to fix
this?
</question>
<answer>
<p>
As of Mac OS X release 10.1.1 there still appears to be
problems in the Apple implementation of the Java 2D APIs. The
true source of these problems and/or workarounds have yet to be
identified (although the problems appear to be closely tied to a
“gstack underflow” error message from the Apple JVM). We are
interested in finding the source of these problems and
reasonable workarounds, so if you know what causes these errors
the Batik team would be very interested in hearing from you
(either directly or through the user/developer mailing lists).
</p>
<p>
Other things to be aware of on Mac OS X, due to fixes for
other problems with Java 2D under Mac OS X, you may find that
some filtering operations take significantly more memory than on
other platforms. This will be especially true for deeply nested
filter trees (where the result of one filtering operation is
filtered by another filtering operation).
</p>
<p>
Finally a few hints on avoiding problems under Mac OS X. The
bugs seems to be triggered by filters, and pure raster SVG documents
have not been found to cause problems. The use of the
<code>filterRes</code> attribute on the <code>filter</code> element
seems especially problematic. The bug isn’t 100% reproducible, so
while some content exhibits the problem, if you play with the
document enough it will often “fix” itself for a while, then later
it will go back to being broken (which indicates that the problem may
be some sort of race condition in the JVM).
</p>
</answer>
</faq>
<faq id="mac-os-x-batik-demo-crash">
<question>
I cannot run the Batik demo on Mac OS X (10.1.1). The Batik splash
screen hangs. What is happening?
</question>
<answer>
<p>
The Batik <a href="site:demo">demo</a> uses Java Web Start. Java Web
Start (under the <code>Applications/Utilities</code> folder), lets
you start a Java application from a web browser. You can see the
debug traces by enabling the Java console for Java Web Start. If you
do, you will see that there is a
<code>java.lang.NoSuchMethodError</code> exception thrown.
</p>
<p>
This is happening because the Java Web Start jar file
(<code>javaws.jar</code> in <code>/Applications/Utilities/Java Web
Start/Content/MacOS</code>) contains an older version of the DOM
bindings.
</p>
<p>
One work around is to manually patch the <code>javaws.jar</code>
file to remove the DOM bindings so that they do not take precedence
over the Batik ones.
</p>
</answer>
</faq>
</part>
<part id="batik-dev">
<title>How do I contribute to Batik Development?</title>
<faq id="how-can-i-contribute">
<question>How can I contribute to Apache Batik development?</question>
<answer>
<p>
The Batik Project is an open volunteer project in the
spirit of the <a href="http://www.apache.org">Apache
Software Foundation</a> (ASF). This means that there are
many ways to contribute to the project, either with direct
participation (coding, documenting, answering questions,
proposing ideas, reporting bugs, suggesting bug-fixes, etc.)
or by resource donation (publicity, hardware, software,
conference presentations, speeches, etc.). Applications that
use the Batik modules, such as tools or extensions, are of special
interest to the project.
</p>
<p>
The process for contributing to Batik is the same as for other
Java projects at Apache. A formal description of that process
can be found on the <a href="http://jakarta.apache.org/guidelines/index.html">Jakarta</a>
web site. You can also view a list of
<a href="site:contributors">who has contributed to Batik</a>.
</p>
<p>
For direct participation, we suggest that you subscribe to the
<a href="site:mailing-lists">Batik mailing lists</a> and to
checkout the
<a href="http://svn.apache.org/viewcvs.cgi/xmlgraphics/batik/">latest
code</a>.
</p>
</answer>
</faq>
<faq id="submit-patches">
<question>How do I submit patches or bug fixes?</question>
<answer>
<p>
You can submit bug fixes and patches to the
<a href="mailto:batik-dev@xmlgraphics.apache.org">Batik developers</a>
mailing list and you can enter bugs in
<a href="site:bugs">Bugzilla</a>.
</p>
</answer>
</faq>
</part>
</faqs>