$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

[TEMPORARY]

Until the above referenced instructions are updated, one of the following
may be used to build FOP:

Building with Maven (preferred)

% mvn clean install

Building with Ant (deprecated)

% ant -f fop/build.xml clean all

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

[TEMPORARY]

Note that FOP command line scripts and build results from ant will be found
under the ./fop sub-directory.

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

Version 2.3
===========

Major Changes in Version 2.3
----------------------------

* Support for unicode Surrogate pairs
* OTF fonts not working on Mac Preview

This release also contains a number of bug fixes.

Version 2.2
===========

Major Changes in Version 2.2
----------------------------

* PCL Color support
* Allow generation of bold/italic versions of fonts for PDF
* Allow to convert OTF fonts to Type 1 for Postscript
* Deduplicate PDF content streams
* Update to PDFBox 2
* Transition from Ant to Maven Build Process

This release also contains a number of bug fixes.

Version 2.1
===========

Major Changes in Version 2.1
----------------------------

* Add PreloaderRawPNG to handle images ImageIO cant
* Support Barcode4J page number
* Support CMYK JPEG in AFP
* Support IPD change on last page
* Support PDF/UA
* Support TrueType fonts in PCL
* Support Truetype for AFP
* Support for PDF/A-3

This release also contains a number of bug fixes.

Version 2.0
===========

Java 6 or later is the minimum runtime environment needed.

Because of changes to the API, the version number has been bumped to 2.0.

Major Changes in Version 2.0
----------------------------

* Side float support
* Whitespace Management Extension
* fo:inline-container partial support
* Improved support for complex scripts
* PDF Linearization
* Support OpenType CFF fonts
* Subset support for Type 1 fonts
* Support for AES 256 PDF encryption
* SVG graphics can use FOP custom fonts

This release also contains a number of bug fixes.

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
