Fop

What is FOP?

FOP is the world's first print formatter driven by XSL formatting objects. It is a Java application that reads a formatting object tree and then turns it into a PDF document. The formatting object tree, can be in the form of an XML document (output by an XSLT engine like XT or Xalan) or can be passed in memory as a DOM Document or (in the case of XT) SAX events.

The latest version of Fop is 0.15 and it supports the xsl:fo candidate release. You can download Fop including a precompiled version, the source code and many example files to get you started. Pointers to introductions into xsl:fo can be found in the section specifications. Please be aware, that Fop is at the moment not a full implementation of the basic conformance level of the xsl:fo standard. You can find a list of supported flow objects and properties in the section Features and in section Limitations in what way this support is limited.

FOP is part of Apache's XML project. The homepage of FOP is http://xml.apache.org/fop. A list of known bugs, the committers to this project and the tasks they are working on can be found in the file Status in the root of your Fop distribution.

FOP Objectives

The goals of the Apache XML FOP Project are to deliver an XSL FO->PDF formatter that is compliant to at least the Basic conformance level described in the 27 March 2000 XSL WD, and that complies with the 11 March 1999 Portable Document Format Specification (Version 1.3) from Adobe Systems.

Conformance to the XML 1.0 Recommendation, XSLT 1.0 Recommendation and the XML Namespaces Recommendation is understood. Other relevant documents, such as the XPath and XLink Working Drafts, are referenced as necessary. The FOP Project will attempt to use the latest version of evolving specifications.

Secondary goals of the FOP Project (also, "FOP") are desirable requirements that also have a high priority.

One secondary goal of the FOP Project is to deliver a follow-on version of the formatter that is compliant to the Extended conformance level described in the XSL FO. Any formatting objects that cannot be translated into PDF will be explicitly identified as such.

Another secondary goal is to promote the conversion of SVG into PDF. The most natural mechanism for doing so is within fo:instream-foreign-object FO's. The powerful graphics offered by both SVG and PDF are a natural fit, and it is desirable that FOP natively supports an SVG content processor for the fo:instream-foreign-object.

A final secondary goal is the continued refinement of the FOP design and implementation. In particular, maintaining the separation between formatting and rendering, continuing to support the AWT Viewer renderer (backend), and providing new renderers, are all desirable objectives.