$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 a 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.
Note that not all parts of the XSL 1.1 specification have yet 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: examples/fo/advanced/K3.README
- DejaVu LGC Serif font (TrueType)
  File: test/resources/fonts/DejaVuLGCSerif.ttf
  Info: test/resources/fonts/DejaVuLGCSerif.LICENSE

    
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 1.1
===========

This release of Apache FOP primarily addresses bug fixes and also adds a number
of new features. See below for details.

Compliance
----------

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

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

A detailed list of known issues in this release is available at
http://xmlgraphics.apache.org/fop/1.1/knownissues_overview.html.

Major Changes in Version 1.1
----------------------------

* Adds support for complex scripts.
* Adds support for TTF fonts in PostScript.
* Adds support for PDF Object Streams.
* Adds support for PDF 128-bit encryption.

A more detailed list of changes in this release is available at
http://xmlgraphics.apache.org/fop/1.1/changes_1.1.html.

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

Version 1.0
===========

This is a production grade release of Apache FOP.
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/1.0/knownissues_overview.html.

Major Changes in Version 1.0
----------------------------

* Added support for addressing all glyphs available in a Type 1 font
* Added support for auto-configuring TrueType Collections. XML font
  metrics files for *.ttc fonts are not required anymore.
* Added support for rendering pages using Java Printing System.
* Support character-by-character font-selection strategy on
  fo:character element.
* Implemented word-by-ford font-selection strategy on text.
* AFP Output: Various enhancements
* FOP now creates ToUnicode CMaps for single-byte fonts that don't use
  built-in encodings
* Introduced a new, additional intermediate format optimized for
  performance. See the intermediate format documentation for details.
* Added an initial set of extensions for prepress support.
* Added limited support for different page widths within a page-sequence.
* Added support for TrueType fonts with symbol character maps (like
  "Wingdings" and "Symbol").
* Added an event handling framework which allows to get better feedback
  from within FOP with the ability to customize problem management.

The long list of changes in this release is available at
http://xmlgraphics.apache.org/fop/1.0/changes_1.0.html.

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

Version 0.95
============

This is a production grade release of Apache FOP.
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.95/knownissues_overview.html.

Major Changes in Version 0.95
-----------------------------

* Add new fox:external-document extension element that allows to insert whole
  documents into a page-sequence (JM)
* Add support for background on fo:table-column and fo:table-header/footer/body
  elements (VH)
* Add support for conditional borders in tables (VH)
* Add support for scale-down-to-fit and scale-up-to-fit (JM)
* Fix various bugs and performance problems with external graphics by
  introducing a new image loading framework (JM)

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

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

Changes since Version 0.95beta
------------------------------
Please refer to the list of changes on the web:
http://xmlgraphics.apache.org/fop/changes.html


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
