[![Apache XML Graphics Project Logo](/images/apache-xml-graphics.gif "Apache XML Graphics Project")](/)

# Apache Batik
  - [Overview](/batik/)
  - [License](/batik/license.html)
  - [Download](/batik/download.html)
  - [Notes](/batik/install.html)
  - [Status](/batik/status.html)
  - [Demo](/batik/demo-static.html)
  - [FAQs](/batik/faq.html)
  - [Batik Wiki](https://cwiki.apache.org/confluence/display/XMLGRAPHICSBATIK)
  - [Mailing lists](/batik/mailing-lists.html)
  - [Contributors](/batik/contributors.html)
  - [Bug database](https://issues.apache.org/jira/issues/?jql=project%20%3D%20BATIK%20AND%20resolution%20%3D%20Unresolved%20AND%20status%20in%20%28Open%2C%20%22In%20Progress%22%2C%20Reopened%29%20ORDER%20BY%20priority%20DESC)
  - [Projects using Batik](/batik/uses.html)
  - ## Batik Tools
    - [Overview](/batik/tools/)
    - [Browser](/batik/tools/browser.html)
    - [Rasterizer](/batik/tools/rasterizer.html)
    - [Font converter](/batik/tools/font-converter.html)
    - [Pretty printer](/batik/tools/pretty-printer.html)
  - ## Using Batik
    - [Overview](/batik/using/)
    - [Architecture](/batik/using/architecture.html)
    - [Javadoc APIs](/batik/javadoc/)
    - [DOM API](/batik/using/dom-api.html)
    - [Parsers](/batik/using/parsers.html)
    - ### Scripting
      - [Scripting with ECMAScript](/batik/using/scripting/ecmascript.html)
      - [Scripting with Java](/batik/using/scripting/java.html)
      - [Scripting with Security](/batik/using/scripting/security.html)
    - [SVG generator](/batik/using/svg-generator.html)
    - [Swing components](/batik/using/swing.html)
    - [Transcoder API](/batik/using/transcoder.html)
    - [Extending Batik](/batik/using/extending.html)
  - ## Development
    - [Overview](/batik/dev/)
    - [Branches](/batik/dev/branches.html)
    - [SVG 1.2 support](/batik/dev/svg12.html)
    - [Test infrastructure](/batik/dev/test.html)

# Apache&trade; XML Graphics
  - ### Project Overview
    - [Who We Are](/team.html)
    - [Legal Stuff](/legal.html)
    - [Project Charter](/charter.html)
    - [Mailing Lists](/mail.html)
    - [Code Repositories](/repo.html)
    - [ASF Sponsorship Program](https://www.apache.org/foundation/sponsorship.html)
    - [ASF Thanks](https://www.apache.org/foundation/thanks.html)
    - [Licenses](https://www.apache.org/licenses/)
    - [Apache XML Graphics Security](/security.html)
    - [ASF Security](https://www.apache.org/security/)

# Sub Projects
  - [Apache FOP](/fop/)
  - [Apache XML Graphics Commons](/commons/)

## Search Apache XML Graphics

<form name="search" id="search" action="https://www.google.com/search" method="get">
  <input value="xmlgraphics.apache.org" name="sitesearch" type="hidden"/>
  <input type="text" name="q" id="query" />
  <input type="submit" id="submit" value="Search" />
</form>

### ApacheCon N. America

<a title="ApacheCon North America" href="https://www.apachecon.com"><img class="apachecon_logo" alt="ApacheCon North America" src="https://www.apachecon.com/images/landingpage/apachecon-logo.png" width="200" /></a><br /><br />

  * **[ApacheCon NA](https://www.apachecon.com/)**

Hope to see you there!

### ApacheCon Europe

<a title="ApacheCon Europe" href="https://www.apachecon.com"><img class="apachecon_logo" alt="ApacheCon Europe" src="https://www.apachecon.com/images/landingpage/apachecon-logo.png" width="200" /></a><br /><br />

  * **[ApacheCon Europe](https://www.apachecon.com/)**

Hope to see you there!

<a title="Apache Software Foundation" href="https://www.apache.org"><img id="asf_logo_url" alt="Apache Software Foundation " src="/images/asf_logo_url.png" width="200" /></a><br /><br />

<a title="Support the Apache Software Foundation" href="https://donate.apache.org/"><img id="asf_support_url" alt="Support the Apache Software Foundation " src="https://blogs.apache.org/foundation/mediaresource/d67ca611-a57c-462d-ac23-95063f81d175" width="200" /></a>

<script>
$(document).ready(function () {
    $('#navigation :header').click(function () {
        var text = $(this).siblings('ul');
        if (text.is(':hidden')) {
            text.slideDown('200');
        } else {
            text.slideUp('200');
        }
    });
    if ($('#navigation :header').siblings('ul')) {
    $('#navigation :header').append(' &raquo;');
    }
  $('#navigation > ul > li ul').hide();
  var str=location.href.toLowerCase();
  $("#navigation li a").each(function() {
    if (str.indexOf(this.href.toLowerCase()) > -1) {
      $(this).parents().slideDown('200');
       $("li.highlight").removeClass("highlight");
       $(this).parent().addClass("highlight");
    }
  });
})
</script>