Title: Apache(tm) FOP Version 2.6

#Apache&trade; FOP Version 2.6


## Introduction { #intro}

This is Version 2.6 of Apache FOP. FOP 2.6 contains many bug fixes and a number of improvements. To see what has changed since the last release, please visit [Release Notes](releaseNotes_2.6.html).

This release implements a substantial subset of the W3C XSL-FO 1.1 Recommendation. For a detailed overview of FOP's compliance with this recommendation, see [Compliance](../compliance.html).

## Upgrading from an earlier version { #upgrading}

If you're upgrading to this version from an earlier version of FOP, please read the information contained on the [Upgrading page](upgrading.html) !

## Download { #download}

To download this version, please visit the [download page](../download.html).
