<?xml version="1.0" standalone="no"?>
<!--
  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.
-->
<!-- $Id$ -->
<news>
  <item date="2008-08-05" title="Apache FOP 0.95 Released">
    <p>
      The Apache FOP team is delighted to present you a production grade
      release of the new FOP codebase. This release
      contains many bug fixes and new features. See the <a
        href="0.95/releaseNotes_0.95.html">Release Notes</a> for a list of
      the most important changes.
    </p>
  </item>
  <item date="2008-03-16" title="Apache FOP 0.95beta Released">
    <p>
      The Apache FOP team is delighted to present you a beta version of the
      next production grade release of the new FOP codebase. This release
      contains many bug fixes and new features. See the <a
        href="0.95/releaseNotes_0.95beta.html">Release Notes</a> for a list of
      the most important changes.
    </p>
  </item>
  <item date="2007-10-30" title="New committer">
    <p>Welcome Max Berger!</p>
  </item>
  <item date="2007-10-15" title="New Committer">
    <p>Welcome Adrian Cumiskey!</p>
  </item>
  <item date="2007-08-24" title="Apache FOP 0.94 Released">
    <p>The Apache FOP team is pleased to present you the second production
      grade release of the new FOP codebase. This release contains many bug
      fixes and new features. See the <a
        href="0.94/releaseNotes_0.94.html">Release Notes</a> for a list of
      the most important changes.</p>
  </item>
  <item date="2007-01-26" title="New Committer">
    <p>Welcome Jay Bryant!</p>
  </item>
  <item date="2007-01-09" title="Apache FOP 0.93 released">
    <p>
      The Apache FOP team is proud to present to you the first
      production grade release of the new FOP codebase. This release
      has the new API first introduced in release 0.92 beta. It
      contains again many bug fixes and new features.
    </p>
  </item>
  <item date="2006-10-16" title="New Committer">
    <p>Welcome Vincent Hennebert!</p>
  </item>
  <item date="2006-04-18" title="Apache FOP 0.92 beta released">
    <p>
      A second "beta" grade release of the new FOP codebase with a modified and
      now considered stable API. The release contains many bug fixes as well as
      new features mainly related to even more extensive support of the XSL-FO
      specification. This is expected to be the last "beta" release before we
      go to a 1.0 release!
    </p>
  </item>
  <item date="2005-12-23" title="Apache FOP 0.91 beta released">
    <p>
      One month after the initial release we're happy present a "beta" grade
      release of the new FOP codebase. It's mostly a bug fix release but also
      contains a few new features. Thanks to all those who sent us feedback
      on the initial release!
    </p>
  </item>
  <item date="2005-11-22" title="Apache FOP 0.90 alpha 1 released">
    <p>
      The Apache FOP team is proud to present to you the largely rewritten 
      codebase which is finally in a state where you can start to use it. 
      It has taken over three years to get this far and over two years 
      without a new release from the FOP project.
    </p>
    <p>
      Please see also the 
      <a href="http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200511.mbox/%3c20051123002157.0EB0.JEREMIAS@apache.org%3e">announcement</a>.
      <!-- TODO re-enable and the <link href="relnotes.html#FOP+0.90+alpha+1">release notes</link>.-->
    </p>
  </item>
  <item date="2005-09-08" title="New Committer">
    <p>Welcome Manuel Mall!</p>
  </item>
  <item date="2004-10-20" title="Creation of the Apache XML Graphics project">
    <p>
      The Apache Board of Directors agreed to the creation of the 
      <a href="http://xmlgraphics.apache.org">Apache XML Graphics</a>
      project which will be comprised of Batik and FOP. Both former 
      Apache XML subprojects are in this way complying with the Board's desire
      to improve project oversight. Both project teams also see additional
      benefits of working more closely together.
    </p>
  </item>
  <item date="2004-10-08" title="New Committer">
    <p>Welcome Luca Furini!</p>
  </item>
  <item date="2004-04-24" title="New Committer">
    <p>Welcome Simon Pepping!</p>
  </item>
  <item date="2004-03-07" title="New Committer">
    <p>Welcome Web Maestro Clay Leeds!</p>
  </item>
  <item date="2004-01-10" title="New Committers">
    <p>Welcome Chris Bowditch and Andreas Delmelle!</p>
  </item>
  <item date="2004-01-04" title="New Committer">
    <p>Welcome Finn Bock!</p>
  </item>
  <item date="2003-11-29" title="New Committer">
    <p>Welcome Peter Herweg!</p>
  </item>
  <item date="2003-07-18" title="Apache FOP 0.20.5 released">
    <p>Changes since 0.20.4 include:</p>
    <ul>
      <li>Added support for PDF encryption</li>
      <li>Perfomance tuning</li>
      <li>Fixed link hotspot positioning</li>
      <li>Fixed multi-threading issues</li>
      <li>Added support for CCITT Group 4 encoded TIFF files</li>
      <li>Dynamic JAI support</li>
      <li>Added autoselecting portrait/landscape for PCL and PS Renderer</li>
      <li>Added continued-label extension for tables</li>
      <li>Improved AWT Font-measuring/rendering</li>
      <li>Improved marker handling</li>
      <li>Fixed problem with jpegs with icc profile and acrobat reader 5</li>
      <li>Added a fontBaseDir property</li>
      <li>TXTRenderer output encoding</li>
      <li>border-spacing support</li>
      <li>and a lot more bugfixes</li>
    </ul>
    <p>
      See also the full text of the
      <a href="http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=fop-dev@xml.apache.org&amp;msgNo=6067">
        announcement</a>.
      <!-- TODO re-enable  and the <link href="relnotes.html#FOP+0.20.5">release notes</link>.-->
    </p>
  </item>
  <item date="2003-06-29" title="New Committer">
    <p>Welcome Glen Mazza!</p>
  </item>
  <item date="2003-05-23" title="Apache FOP 0.20.5 Release Candidate 3 available">
    <p>
      See the full text of the <a
        href="http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=fop-dev@xml.apache.org&amp;msgNo=5429">announcement</a>.
    </p>
  </item>
  <item date="2003-02-18" title="Apache FOP 0.20.5 Release Candidate 2 available">
    <p>
      See the full text of the <a
        href="http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=fop-dev@xml.apache.org&amp;msgNo=4509">announcement</a>.
    </p>
  </item>
  <item date="2003-02-02" title="New XML PMC">
    <p>
      Jeremias Maerki and Peter B. West are now representing FOP on the XML PMC.
    </p>
  </item>
  <item date="2003-01-28" title="FOP logo contest">
    <p>We are looking for a new logo. FOP logo
      contest is started!</p>
  </item>
  <item date="2002-12-23" title="Official FOP Wiki">
    <p>
      See <a href="http://wiki.apache.org/xmlgraphics-fop/FOPProjectPages"
        >FOP project pages</a> at the ApacheWiki.
    </p>
  </item>
  <item date="2002-12-10" title="FOP 0.20.5 Release Candidate available">
    <p>
      See the full text of the <a
        href="http://marc.theaimsgroup.com/?l=fop-user&amp;m=103954279712704&amp;w=2"
        >announcement</a>.
    </p>
  </item>
  <item date="2002-11-23" title="EXLSFO project has been created">
    <p>
      The EXSLFO project is a community effort to define functional extensions
      to thet XSL Formatting Objects specification. See the
      <a href="http://exslfo.sourceforge.net">EXSLFO website</a> for details.
    </p>
  </item>
  <item date="2002-11-22" title="New Committer">
    <p>Welcome Victor Mote!</p>
  </item>
  <item date="2002-11-09" title="New Committer">
    <p>Welcome Oleg Tkachenko!</p>
  </item>
</news>