Title: Apache(tm) FOP News

#Apache&trade; FOP News

## 13 May 2020: Apache&trade; FOP 2.5 Released { #news-2020-05-13}
<item date="2020-05-13" title="Apache&trade; FOP 2.5 Released">
Apache&trade; FOP 2.5 contains bug fixes and a number of new features. See [Release Notes](2.5/releaseNotes_2.5.html) for a list of the most important changes.
</item>
## 13 May 2020: Apache&trade; FOP-PDF-Images 2.5 Released { #news-2020-05-13}
<item date="2020-05-13" title="Apache&trade; FOP-PDF-Images 2.5 Released">
Apache&trade; FOP-PDF-Images 2.5 contains bug fixes and a number of new features. See [Release Notes](fop-pdf-images.html) for a list of the most important changes.
</item>
## 5 Nov 2019: Apache&trade; FOP 2.4 Released { #news-2019-11-05}
<item date="2019-11-05" title="Apache&trade; FOP 2.4 Released">
Apache&trade; FOP 2.4 contains bug fixes and a number of new features. See [Release Notes](2.4/releaseNotes_2.4.html) for a list of the most important changes.
</item>
## 5 Nov 2019: Apache&trade; FOP-PDF-Images 2.4 Released { #news-2019-11-05}
<item date="2019-11-05" title="Apache&trade; FOP-PDF-Images 2.4 Released">
Apache&trade; FOP-PDF-Images 2.4 contains bug fixes and a number of new features. See [Release Notes](fop-pdf-images.html) for a list of the most important changes.
</item>
## 24 May 2018: Apache&trade; FOP 2.3 Released { #news-2018-05-24}
<item date="2018-05-24" title="Apache&trade; FOP 2.3 Released">
Apache&trade; FOP 2.3 contains bug fixes and a number of new features. See [Release Notes](2.3/releaseNotes_2.3.html) for a list of the most important changes.
</item>
## 24 May 2018: Apache&trade; FOP-PDF-Images 2.3 Released { #news-2018-05-24}
<item date="2018-05-24" title="Apache&trade; FOP-PDF-Images 2.3 Released">
Apache&trade; FOP-PDF-Images 2.3 contains bug fixes and a number of new features. See [Release Notes](fop-pdf-images.html) for a list of the most important changes.
</item>
## 10 Apr 2017: Apache&trade; FOP 2.2 Released { #news-2017-04-10}
<item date="2017-04-10" title="Apache&trade; FOP 2.2 Released">
Apache&trade; FOP 2.2 contains bug fixes and a number of new features. See [Release Notes](2.2/releaseNotes_2.2.html) for a list of the most important changes.
</item>
## 10 Apr 2017: Apache&trade; FOP-PDF-Images 2.2 Released { #news-2017-04-10}
<item date="2017-04-10" title="Apache&trade; FOP-PDF-Images 2.2 Released">
Apache&trade; FOP-PDF-Images 2.2 contains bug fixes and a number of new features. See [Release Notes](fop-pdf-images.html) for a list of the most important changes.
</item>
## 14 Jan 2016: Apache&trade; FOP 2.1 Released { #news-2016-01-14}
<item date="2016-01-14" title="Apache&trade; FOP 2.1 Released">
Apache&trade; FOP 2.1 contains bug fixes and a number of new features. See [Release Notes](2.1/releaseNotes_2.1.html) for a list of the most important changes.
</item>
## 3 Jun 2015: Apache&trade; FOP 2.0 Released { #news-2015-06-03}
<item date="2015-06-03" title="Apache&trade; FOP 2.0 Released">
Apache&trade; FOP 2.0 contains bug fixes and a number of new features. See [Release Notes](2.0/releaseNotes_2.0.html) for a list of the most important changes.
</item>
## 20 Oct 2012: Apache&trade; FOP 1.1 Released { #news-2012-10-20}
<item date="2012-10-20" title="Apache&trade; FOP 1.1 Released">
Apache&trade; FOP 1.1 contains bug fixes and a number of new features. See [Release Notes](1.1/releaseNotes_1.1.html) for a list of the most important changes.
</item>
## 12 Oct 2012: New committer { #news-2012-10-12}
<item date="2012-10-12" title="New committer">
Welcome Luis Bernardo!
</item>
## 07 Jul 2012: Apache&trade; FOP 1.1-RC1 Available { #news-2012-07-02}
<item date="2012-07-02" title="Apache&trade; FOP 1.1-RC1 Available">
This is a candidate release for an upcoming FOP Version 1.1 (stable) release. release of the new FOP codebase. This release contains bug fixes and new features.
</item>
## 07 Feb 2012: PDF-images plugin donated to ASF { #news-2012-02-07}
<item date="2012-02-07" title="PDF-images plugin donated to ASF">
The PDF-images plugin, is donated by Jeremias M&auml;rki to ASF and becomes an XMLGraphics sub-project.
</item>
## 24 Feb 2012: New committer { #news-2012-02-24}
<item date="2012-02-24" title="New committer">
Welcome Glenn Adams!
</item>
## 17 Nov 2011: New committer { #news-2011-11-17}
<item date="2011-11-17" title="New committer">
Welcome Mehdi Houshmand!
</item>
## 28 Apr 2011: New committer { #news-2011-04-28}
<item date="2011-04-28" title="New committer">
Welcome Peter Hancock!
</item>
## 21 Jul 2010: Apache&trade; FOP 1.0 Released { #news-2010-07-21}
<item date="2010-07-21" title="Apache&trade; FOP 1.0 Released">
The Apache&trade; 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 [Release Notes](1.0/releaseNotes_1.0.html) for a list of the most important changes.
</item>
## 14 Dec 2009: New committer { #news-2009-12-14}
<item date="2009-12-14" title="New committer">
Welcome Pascal Sancho!
</item>
## 5 Aug 2008: Apache&trade; FOP 0.95 Released { #news-2008-08-05}
<item date="2008-08-05" title="Apache&trade; FOP 0.95 Released">
The Apache&trade; 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 [Release Notes](0.95/releaseNotes_0.95.html) for a list of the most important changes.
</item>
## 16 Mar 2008: Apache&trade; FOP 0.95beta Released { #news-2008-03-16}
<item date="2008-03-16" title="Apache&trade; FOP 0.95beta Released">
The Apache&trade; 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 [Release Notes](0.95/releaseNotes_0.95beta.html) for a list of the most important changes.
</item>
## 30 Oct 2007: New committer { #news-2007-10-30}
<item date="2007-10-30" title="New committer">
Welcome Max Berger!
</item>
## 15 Oct 2007: New Committer { #news-2007-10-15}
<item date="2007-10-15" title="New Committer">
Welcome Adrian Cumiskey!
</item>
## 24 Aug 2007: Apache&trade; FOP 0.94 Released { #news-2007-08-24}
<item date="2007-08-24" title="Apache&trade; FOP 0.94 Released">
The Apache&trade; 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 Release Notes for a list of the most important changes.
</item>
## 26 Jan 2007: New Committer { #news-2007-01-26}
<item date="2007-01-26" title="New Committer">
Welcome Jay Bryant!
</item>
## 9 Jan 2007: Apache&trade; FOP 0.93 released { #news-2007-01-09}
<item date="2007-01-09" title="Apache&trade; FOP 0.93 released">
The Apache&trade; 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.
</item>
## 16 Oct 2006: New Committer { #news-2006-10-16}
<item date="2006-10-16" title="New Committer">
Welcome Vincent Hennebert!
</item>
## 18 Apr 2006: Apache&trade; FOP 0.92 beta released { #news-2006-04-18}
<item date="2006-04-18" title="Apache&trade; FOP 0.92 beta released">
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!
</item>
## 23 Dec 2005: Apache&trade; FOP 0.91 beta released { #news-2005-12-23}
<item date="2005-12-23" title="Apache&trade; FOP 0.91 beta released">
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!
</item>
## 22 Nov 2005: Apache&trade; FOP 0.90 alpha 1 released { #news-2005-11-22}
<item date="2005-11-22" title="Apache&trade; FOP 0.90 alpha 1 released">
The Apache&trade; 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.

Please see also the [announcement](http://mail-archives.apache.org/mod_mbox/xmlgraphics-fop-users/200511.mbox/%3c20051123002157.0EB0.JEREMIAS@apache.org%3e).
</item>
## 8 Sep 2005: New Committer { #news-2005-09-08}
<item date="2005-09-08" title="New Committer">
Welcome Manuel Mall!
</item>
## 20 Oct 2004: Creation of the Apache&trade; XML Graphics project { #news-2004-10-20}
<item date="2004-10-20" title="Creation of the Apache&trade; XML Graphics project">
The Apache Board of Directors agreed to the creation of the [Apache&trade; XML Graphics](http://xmlgraphics.apache.org) project which will be comprised of Batik and FOP. Both former Apache&trade; 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.
</item>
## 8 Oct 2004: New Committer { #news-2004-10-08}
<item date="2004-10-08" title="New Committer">
Welcome Luca Furini!
</item>
## 24 Apr 2004: New Committer { #news-2004-04-24}
<item date="2004-04-24" title="New Committer">
Welcome Simon Pepping!
</item>
## 7 Mar 2004: New Committer { #news-2004-03-07}
<item date="2004-03-07" title="New Committer">
Welcome Web Maestro Clay Leeds!
</item>
## 10 Jan 2004: New Committers { #news-2004-01-10}
<item date="2004-01-10" title="New Committers">
Welcome Chris Bowditch and Andreas Delmelle!
</item>
## 4 Jan 2004: New Committer { #news-2004-01-04}
<item date="2004-01-04" title="New Committer">
Welcome Finn Bock!
</item>
## 29 Nov 2003: New Committer { #news-2003-11-29}
<item date="2003-11-29" title="New Committer">
Welcome Peter Herweg!
</item>
## 18 Jul 2003: Apache&trade; FOP 0.20.5 released { #news-2003-07-18}
<item date="2003-07-18" title="Apache&trade; FOP 0.20.5 released">
Changes since 0.20.4 include:


- Added support for PDF encryption

- Perfomance tuning

- Fixed link hotspot positioning

- Fixed multi-threading issues

- Added support for CCITT Group 4 encoded TIFF files

- Dynamic JAI support

- Added autoselecting portrait/landscape for PCL and PS Renderer

- Added continued-label extension for tables

- Improved AWT Font-measuring/rendering

- Improved marker handling

- Fixed problem with jpegs with icc profile and acrobat reader 5

- Added a fontBaseDir property

- TXTRenderer output encoding

- border-spacing support

- and a lot more bugfixes

See also the full text of the [announcement](http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=fop-dev@xml.apache.org&msgNo=6067).
</item>
## 29 Jun 2003: New Committer { #news-2003-06-29}
<item date="2003-06-29" title="New Committer">
Welcome Glen Mazza!
</item>
## 23 May 2003: Apache&trade; FOP 0.20.5 Release Candidate 3 available { #news-2003-05-23}
<item date="2003-05-23" title="Apache&trade; FOP 0.20.5 Release Candidate 3 available">
See the full text of the [announcement](http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=fop-dev@xml.apache.org&msgNo=5429).
</item>
## 18 Feb 2003: Apache&trade; FOP 0.20.5 Release Candidate 2 available { #news-2003-02-18}
<item date="2003-02-18" title="Apache&trade; FOP 0.20.5 Release Candidate 2 available">
See the full text of the [announcement](http://mail-archives.apache.org/eyebrowse/ReadMsg?listName=fop-dev@xml.apache.org&msgNo=4509).
</item>
## 2 Feb 2003: New XML PMC { #news-2003-02-02}
<item date="2003-02-02" title="New XML PMC">
Jeremias Maerki and Peter B. West are now representing FOP on the XML PMC.
</item>
## 28 Jan 2003: FOP logo contest { #news-2003-01-28}
<item date="2003-01-28" title="FOP logo contest">
We are looking for a new logo. FOP logo contest is started!
</item>
## 23 Dec 2002: Official FOP Wiki { #news-2002-12-23}
<item date="2002-12-23" title="Official FOP Wiki">
See [FOP project pages](https://cwiki.apache.org/confluence/display/XMLGRAPHICSFOP/FOPProjectPages) at the ApacheWiki.
</item>
## 10 Dec 2002: FOP 0.20.5 Release Candidate available { #news-2002-12-10}
<item date="2002-12-10" title="FOP 0.20.5 Release Candidate available">
See the full text of the [announcement](http://marc.theaimsgroup.com/?l=fop-user&m=103954279712704&w=2).
</item>
## 23 Nov 2002: EXLSFO project has been created { #news-2002-11-23}
<item date="2002-11-23" title="EXLSFO project has been created">
The EXSLFO project is a community effort to define functional extensions to thet XSL Formatting Objects specification. See the [EXSLFO website](http://exslfo.sourceforge.net) for details.
</item>
## 22 Nov 2002: New Committer { #news-2002-11-22}
<item date="2002-11-22" title="New Committer">
Welcome Victor Mote!
</item>
## 9 Nov 2002: New Committer { #news-2002-11-09}
<item date="2002-11-09" title="New Committer">
Welcome Oleg Tkachenko!
</item>