$Id$

==============================================================================
  APACHE FOP  -  README
==============================================================================

Contents of this file:
 - What is FOP?
 - Legal Information
 - Where to get help?
 - How do I build FOP?
 - How do I run FOP?
 - Release Notes

==============================================================================


What is FOP?
---------------

Apache FOP is the world's first print formatter driven by XSL formatting 
objects. It is a Java application that reads a formatting object tree 
conforming to the XSL 1.1 Recommendation (05 December 2006) and then turns it 
into a PDF document, certain other output formats or allows you to preview it 
directly on screen. Some parts of the XSL 1.1 specification (work in progress!)
have also been implemented.

Apache FOP is part of Apache's XML Graphics project. The homepage of Apache 
FOP is http://xmlgraphics.apache.org/fop/.
    
    
Legal Information
---------------------

Apache FOP is published under the Apache License version 2.0. For the license
text, please see the following files:
- LICENSE
- NOTICE

Legal information on libraries used by Apache FOP can be found in the 
"lib/README.txt" file.

Here is a list of files included in Apache FOP but not published under Apache
License version 2.0:
- sRGB IEC61966-2.1 color profile
  File: src/java/org/apache/fop/pdf/sRGB Color Space Profile.icm
  Info: src/java/org/apache/fop/pdf/sRGB Color Space Profile.icm.LICENSE.txt
- K3 3 of 9 barcode font (TrueType)
  File: examples/fo/advanced/K3.TTF
  Info: example/fo/advanced/K3.README

    
Where to get help?
---------------------    
    
http://xmlgraphics.apache.org/fop/gethelp.html
    
A mailing list where you can get all your questions about FOP answered is at 
fop-users@xmlgraphics.apache.org. You can subscribe by sending an empty mail 
to fop-users-subscribe@xmlgraphics.apache.org.

Before you post any questions, please have a look at the FAQ at 
http://xmlgraphics.apache.org/fop/faq.html and FO help page at 
http://xmlgraphics.apache.org/fop/fo.html.

Please report bugs to bugzilla at http://issues.apache.org/bugzilla/


How do I build FOP?
----------------------

If you've downloaded a binary distribution, you don't need to build
FOP.

Otherwise, please follow the instructions found here:
http://xmlgraphics.apache.org/fop/stable/compiling.html


How do I run FOP?
--------------------

Simply by typing "fop" on the command-line. Without any parameters you
will receive a screen with instruction on how to call FOP from the
command-line.

For more details, see:
http://xmlgraphics.apache.org/fop/stable/running.html

==============================================================================
  RELEASE NOTES
==============================================================================

Version 0.94
============

This is the second production grade release of the new FOP codebase.
It contains many bug fixes and new features. See below for details.

Compliance
----------

This release implements the XSL 1.0 and 1.1 recommendations to a high
degree of compliance. See the compliance page
http://xmlgraphics.apache.org/fop/compliance.html for a detailed
overview.

Known issues
------------

The known issues of this release are listed at
http://xmlgraphics.apache.org/fop/0.94/knownissues_overview.html.

Major Changes in Version 0.94
-----------------------------

* Add support for font auto-detection (JM) Thanks to Adrian Cumiskey
* Add support for the border-collapsing model in tables (VH, JM)
* Add support for named destinations in PDF (JB)
* Add support for UAX#14 type line breaking (MM)

The long list of changes in this release is available at
http://xmlgraphics.apache.org/fop/0.94/changes_0.94.html.

The long list of changes in this and earlier releases is available at
http://xmlgraphics.apache.org/fop/changes.html.


Version 0.93
============

This is the first production grade release of the new FOP codebase.

* It contains the new API first introduced in release 0.92
  beta. The preceding API has been removed.
* This release again contains many bug fixes and new features. See
  below for details.

Compliance
----------

This release implements the XSL 1.0 and 1.1 recommendations to a high
degree of compliance. See the compliance page
http://xmlgraphics.apache.org/fop/compliance.html for a detailed
overview.

Known issues
------------

The known issues of this release are listed at
http://xmlgraphics.apache.org/fop/knownissues.html.

Upgrading
---------

You may experience different behaviour compared to version
0.20.5. Please consult the "Upgrading" page
(http://xmlgraphics.apache.org/fop/stable/upgrading.html) for
details.

Major Changes in Version 0.93
-----------------------------

* Added support for the use of Open Type fonts (BD)
* Support for the rgb-icc() function and for a proprietary cmyk()
  function (for device CMYK colors only through the PDF renderer so
  far). (JM) Thanks to Peter Coppens. Fixes 40729.
* Enabled Copy/Paste from PDF content in Acrobat Reader for
  text using embedded TrueType fonts. (BD) Thanks to Adam Strzelecki,
  Victor Mote. Fixes 5535.
* Added support for PDF/A-1b and PDF/X-3:2003. (Note: this may still
  be a bit incomplete. Feedback is welcome!)
* The Java2DRenderer (and therefore the print and bitmap renderers) is
  now offering the same quality as the PDF and PS renderers. Note:
  There can still be little differences between PDF and Print/PNG/TIFF
  because the latter uses a different font metrics source.
* Automatic support for all fonts available to the Java2D subsystem
  for all Java2D-descendant renderers (TIFF, PNG, print, AWT).

The long list of changes in this release is available at
http://xmlgraphics.apache.org/fop/0.93/changes_0.93.html.

The long list of changes in this and earlier releases is available at
http://xmlgraphics.apache.org/fop/changes.html.

The Apache FOP team asks you for your continued feedback on the
software.  We're also interested in success stories with the new
release. So if the latest version works fine for you, please tell us!
And if it doesn't, you may tell us as well, of course. ;-)

Release notes for older FOP versions can be found on:
http://xmlgraphics.apache.org/fop/relnotes.html
