Improvements of the Accessibility feature Suppress unnecessary "font not found warnings" when generating AFP with raster fonts SVG text in AFP creates miscoded GOCA text Add support for different flow-name of fo:region-body in FOP Tagged PDF performance improvement plus tests Improved AdobeStandardEncoding support in AFM files for type1 fonts Added ant script to get JaCoCo code coverage. Added to build file JUnit target that uses a regex to run all of the test cases. This reduces the risk that some of them are omitted when building FOP. Allow JPEG images to be embedded in an AFP document as is, without being decoded and encoded. Simplification of the build: Reduced code duplication and layout engine tests. Various bugfixes to make PDFDocumentGraphics2D operational again. Bugfix for when the last simple-page-master referenced in a page-sequence-master is not chosen when force-page-count=odd. Upgraded all tests to JUnit 4. Bugfix for color model in IOCA IDE structure parameter for 4- and 8-bit grayscale images. Revision 4. Changes the way PostScript handles Graphics2D images such that if the language is set to level 3, the image is stored as an embedded file which has no length limit. Previously it was stored as an array which has a implementation limit of 65535 elements. PDFFactory responsible for asdigning name to a subset font. Improved support for EBCDIC encoded double byte fonts fo AFP. Corrected typographical errors in AFPBase12FontCollection. Improved fix of a bug relating to PCL painter thread safetly. Previous fix in rev 895012 worked by synchronizing methods of a static instance of Java2DFontMetrics. This fix uses a unique instance for per thread. Fixed a bug in AFP where an ArrayOutofBoundsException is throwqn when embedding a Page Segment. Added support for 128bit encryption in PDF output. Based on work by Michael Rubin. Fixed a bug in AFP where the object area axes of an Include Object was incorrectly set when rotated by 180. Fixed a bug in TTF subsetting where a composite glyph could get remapped more than once resulting in garbled character. Fixed a number of bugs concerning Type 1 and other single-byte fonts (glyph width mismatches and overlapping characters). Fixed a multi-threading bug for SVG images included through svg:image inside SVG documents. Added an IFDocumentHandler filter for triggering rendering events. Created an Event that captures an end page event with the page number. Bugfix: alternative text not working in tagged PDF for TIFF images. Fixed io exception in MODCAParser caused by the improper use of mark() and reset() on the MODCA data input stream. Added unit test. Removed invalid entries in ToUnicode table of CID subset fonts. Fixed mapping of font weights between CSS values and TextAttribute.WEIGHT_*. AFP GOCA: fonts were not embedded from within AFPGraphics2D. AFP GOCA: Changed the way FOP fonts are selected based on Batik's GVT fonts to match the behaviour of PDF/PS output. Added option to place AFP NOPs right before the end of a named page group (page-sequence), rather than after the start. Added option for PostScript output to optimize for file size rather than quality. AFP GOCA: Added option to disable GOCA and to control text painting inside GOCA graphics. AFP GOCA: Work-around for InfoPrint's AFP implementation which seems to lose the character set state over Graphics Data (GAD) boundaries. Bugfix for AFP GOCA segments: they were not properly marked as appended which could lead to graphics state changes in some implementations. Bugzilla 51010: Bookmarks create useless lines in RTF Bugzilla 51008: page-number-citation-last does not work in RTF Added id element to intermediate format to track the origin of content. Bugzilla 50988: Fixed a NullPointerException in case a white-space fo:character was removed due to white-space handling. Bugzilla 50987: Fixed an issue in PDF output where a link was added to the parent tree instead of the related structure element. Bugzilla 50986: Fixed an issue where invalid PDF page content was generated due to incorrect ET/EMC sequences. Fixed regression introduced by Bugzilla 50593: bookmarks pointing to a non-existing internal destination should just trigger a warning. Bugzilla 50965: Fixed a regression in BlockContainerLayoutManager where margins were no longer reset after forced breaks. Implemented non-standard behavior for basic-link areas, such that they take into account the heights of their descendants areas. Bugfix: keep-together does not apply to fo:table-cell. Bugfix: keep-together on a table containing row-spanning cells was not honored. Bugzilla #50196: padding-start ignored when table-header/footer is repeated. Increased maximum possible PDF size from 2GB to around 9GB (hard maximum imposed by the PDF specification). Added support for CIE Lab colors (from XSL-FO 2.0 WD). Initial work on spot colors (aka named colors) for PDF output. Fix to preserve the order of AFP TLEs and NOPs as given in the XSL-FO document. Added support for lookup of alternative glyphs when additional single-byte encodings are used, ex. replacing "Omegagreek" by "Omega" and vice versa. Added support for resolution of relative URIs against a specified xml:base during property refinement. Allow afp:no-operation to also appear under fo:page-sequence and fo:declarations. Bugfix: fix issue in RenderPagesModel.checkPreparedPages() where the same page-sequence is potentially started multiple times. Bugfix: fix performance issue when adding pages, if the total number of pages is significantly large. Bugfix: fix performance issue when adding nodes, if the number of children is significantly large. Bugfix: relative URIs in the configuration file (base, font-base, hyphenation-base) are evaluated relative to the base URI of the configuration file. Bugfix: correct behavior of keep-together.within-line in case there are nested inlines Bugfix: avoid ArrayIndexOutOfBoundsException for codepoints without a linebreak class Bugfix: avoid ClassCastException when using fox:widow-content-limit Bugfix: content after forced break in block-container is not rendered. Fixed adjustment of inline parent area for justified text containing a forward page reference. Fixed behavior when combining hyphenation with preserved linefeeds or whitespace. Replaced magic numbers with constants from UnitConv and GraphicsConstants. Added some support for break-before/-after for RTF output. Added ability to embed an external AFP page segment resource file (AFP output only). Fixed a multi-threading issue when rendering SVG. Fixed retrieval of available BPD for cases spanning columns and multiple pages with differing page masters. Removed old Renderer implementations for those output formats that have a version based on the new DocumentHandler architecture available (AFP, PCL, PDF, PS). Reinstated support for being able to specify a font cache filepath in the fop user configuration. Added convenience support for the flushing of the Fop font cache file from the command line. Added support for PDF File Attachments (Embedded Files). AFP Output: Fixed positioning of Java2D-based images (when GOCA is enabled). AFP Output: Added enhanced dithering functionality for images that are converted to bi-level images. AFP Output: Fix for bitmap images inside an SVG or G2D graphic (printer errors) and positioning fix for bitmaps from G2D graphics. Fix for AWT viewer to correctly track page numbers in continuous display mode. Bugfix for formatting of floating point numbers which could lead to invalid PDFs. Added a save/restoreGraphicsState pair for the initial coordinate system in PDF output for easier post-processing. Added customization ability for the image loading framework from FOP's configuration file. Bugfix for color model in IOCA IDE structure parameter for 4- and 8-bit grayscale images. Initial support for CID-keyed double-byte fonts (Type 0) in AFP output. Added a command-line option '-catalog' to use a catalog resolver for the XML and XSLT files Implement internal character classes if the hyphenation pattern file does not contain them Bugfix: having a special page-master for the last page caused loss of content when normal blocks were mixed with blocks spanning all columns. Added possibility to customize PDF tagging via the ‘role’ property. Bugfix: AFP Renderer: Respect image color settings for svg Bugfix: AFP Renderer: Page Overlays not generated when using Intermediate Format Bugfix: AFP Renderer: Underline is incorrectly placed when reference-orientation != 0 Bugfix: AFP Renderer: Page Segments not positioned correctly when reference-orientation != 0 Added support for TrueType fonts with symbol character maps (like "Wingdings" and "Symbol"). Character for these fonts are usually found in the 0xF020 to 0xF0FF range (a Unicode private use area). Bugfix: Font selection fallbacks did not work in some cases (ex. bold+italic to normal) Bugfix: AFP Renderer: AttributeQualifier Triplet occurs before TLE Value. Bugfix in AFP output: fixed flags in GOCA GBAR order. Bugfix in AFP output: rounding error when computing the CMYK components of a color. Bugfix: when #CMYK pseudo-profile was used in the rgb-icc() function, always the fallback RGB colors were used instead. Bugfix: value of conditional space not always taken into account in the calculation of a table’s height. Added basic accessibility and Tagged PDF support. Added support for encoding CMYK bitmap images (IOCA FS45) and TIFF images as embedded objects. Added support for xmlfile and xsltfile parameters in FOP's Ant Task. BugFix: Maintain valid AFP by providing TLE truncation on Attribute Value Triplet values that are greater than 250 chars in length. Fixed generation of CIDSet object in PDF output. Fixed handling of percentage values for provisional-label-separation. Fixed handling of percentage values for provisional-distance-between-starts. Added support for positioning Page Overlays in AFP Output Added support for specifying referenced fonts per renderer in addition to the general match list. Added support for creating thumbnails or preview bitmaps of fixed size for PNG and TIFF output. Added support for the #CMYK pseudo-profile supported by some commercial XSL implementations on the rgb-icc() function. Added limited support for pages of different inline-progression-dimensions within a page-sequence. Added basic implementation for column-keeps. White-space handling in markers with inline-content throws a NullPointerException in some cases. Dithered Background Shading can produce illegal AFP if objects are very small AFP Output: Added support for IMM Extension on fo:simple-page-master. Added an initial set of extensions for prepress support (fox:bleed, fox:crop-offset, fox:crop-box and fox:scale). This is currently supported only by PDF and Java2D renderers. PCL Output: Added support for specifying the output bin. AFP Output: Added support for embedding external AFP form maps (form defs) using the afp:include-form-map extension. AFP Output: Added support for AFP font embedding. Note: this changes the default behaviour. Like with PDF and PS, all fonts are embedded by default unless matched in the "referenced-fonts" section in the configuration. Bugfix: Error while writing TLE's attribute qualifier in the output. Bugfix: support justified text in AFP Renderer (already working in AFP Painter) AFP Renderer Raster Fonts:
  • added support for fractional font-sizes in the configuration.
  • selection of the smaller font-size, in case two possible fallbacks have the same difference to a requested size.
Bugfix: support PFM Files with no extent table. Bugfix: previously retrieved markers were not cleared if the new marker was empty. Bugfix: for the last character of a Type1 font, always a width of 0 was returned. Changed meaning of ‘-v’ option to ‘verbose’, which will print FOP’s version and proceed. Added a ‘-version’ option to simply print the version then exit, following Java practices. Bugfix: The cells of a table inside a marker were duplicated at every marker retrieval. Bugfix: use the effective color profile supplied by the ImageEncodingHelper, instead of the original one. Bugfix: reset graphic state when a page is finished in PostScript. Added setting to enable dithered painting of filled rectangles in AFP and PCL. Bugfix: footnotes occurring within the forced height of a table row did not appear on the output PDFGraphics2D.writeClip doesn't generate a clip command anymore when the clip path is empty. Added a custom text painter for rendering SVG text using text operators when rendering to PostScript or EPS. Text is no longer painted as shapes, thus creating much smaller files. Fixed a bug that left the PrintRenderer unconfigured even if a configuration was specified for "application/X-fop-print". Fixed the handling of CMYK colors in PDFGraphics2D. Fixed a bug when combining a forced break with a "last" page-master. The restart of the algorithm would start at the index of the penalty corresponding to the last page-break. This has been changed to the index of the first element after the last page-break. Added a command-line tool to list all configured fonts (org.apache.fop.tools.fontlist.FontListMain). Added the possibility to use CachedRenderPagesModel, to conserve memory in case of large documents with a lot of cross-references (area tree will be serialized to disk to avoid keeping it entirely in memory). AFP Fonts: Added support for full URI resolution on configured AFP fonts. AFP Output: Tag Logical Element (TLE) is now also allowed on fo:page-sequence (page group level). Fixed BPD trait and border painting for leaders with leader-pattern="space" (and similar cases). AFP Output: Added support for Invoke Medium Map (IMM). Introduced a new, additional intermediate format optimized for performance. Please see the intermediate format documentation for details. Use temporary directory for the font cache if the user home directory is not write-accessible. AFP Fonts: Fixed interpretation of metric for fonts with fixed metrics and made sure all repeating groups in FNP (Font Position) are processed. AFP Output: Added a configuration option to override the resource level defaults in the code. MinOptMaxUtil.toMinOptMax was converting LengthRangeProperty objects into illegal MinOptMax objects (in some cases opt could be inferior to min). Added extension to disable column balancing before blocks spanning the whole page, in multiple-column documents. AFP Output: Bilevel images in resource groups as generated as hard page segments (instead of image objects) for better interoperability with older IPDS environments and for better printing performance. FOP now creates ToUnicode CMaps for single-byte fonts that don't use built-in encodings to help PDF text extractors interpreting characters. Added support for forcing single-byte encodings for TrueType fonts without creating an XML font metric file (see "encoding-mode" attribute on "font" element) Fixed fo:instream-foreign-object inside fo:marker. Fixed black backgrounds occurring for transparent images in PCL output. Fixed bug that caused AFP Renderer Extensions to be ignored. Fixed a memory-leak in Marker.MarkerAttribute, where an instance was used both as key and value in a WeakHashMap, effectively neutralizing the benefit of using WeakReferences. Solved by extending PropertyCache to work for MarkerAttributes as well. Fixed a multi-threading issue when rendering SVG. AFP Output: An AFPGraphics2D implementation which provides the ability to use Batik to drive the production of AFP Graphics (GOCA) output from SVG. AFP Output: Resource group leveling, external streaming, and de-duplication of images and graphics using IncludeObject and ResourceGroup. AFP Output: Native image embedding support (e.g. JPEG, GIF, TIFF) using ObjectContainer and a MOD:CA Registry implementation. More robust AFP font parsing, although it is still in need of some rework in the future. Added support for SVG 1.2 functionality inside fo:instream-foreign-object. Fixed a bug when combining break-before with a span change. Fixed some multi-threading issues in FontCache.java:
  • remove the unused private readObject()
  • make the changeLock member final (initialization-safety + impossible to reassign)
  • perform the HashMap check for a failed font inside the synchronized block to avoid a race condition
Added PDF /Launch action: references to URIs using the file:// protocol will now generate a /Launch action as opposed to a more general /URI (which doesn't yield the expected result for this protocol). Fixed a problem where the BPD or a block area could be wrong if there is a nested, absolutely positioned area (for example a block-container). Improved the behaviour of the command line interface. Bugzilla 40798: A conditional-page-master-reference with page-position="last" qualifies for a first page, if it is also the last. Additionally: also added support for page-position="only". Make fop.bat and fop.cmd use the %FOP_OPTS% environment variable. PDF Output: Added support for handling 16-bit alpha channel. They are currently converted to 8 bits. PDF Output: Made sure the XMP Metadata stream is never compressed. Fix for PFMReader after bug #43089 changed the behavior of PFMFile. Fixes baseline problems when Type 1 fonts are used in conjunction with XML font metric files. Fix for table handling in RTF output, so the output works with OpenOffice and AbiWord, too. Quick-fix to avoid a possible NullPointerException when using empty inlines and hyphenation. Added missing generation of areas for empty grid units in tables with collapsing border model. Fixed memory leak in property cache (not cleaning stale PropertyCache$CacheEntry instances). Fixed text stroking in SVG when the stroke-width is zero. Fixed the source for a division by zero when the content of an fo:leader with leader-pattern="use-content" collapses to zero width during layout. Fixed border trait parsing for the area tree XML when CMYK or ICC colors were used. Fixed generation of "fonttbl" for RTF output to fix loading problem with AbiWord. Fixed ID resolution for nested bookmarks with duplicated IDs. Fixed a slight error when resolving non-file URLs: avoid altering the original 'href' if the protocol is other than 'file:' Added LayoutManagerMapping.registerMaker() to make registration of custom layout managers easier. Fixed absolute positioning of block-containers when specified using right and bottom instead of left and top. Added PDF encryption parameter support in configuration. Allowing non-zero borders and padding on page regions when relaxed validation is turned on. Fixed an inconsistency in footnote handling that led to unnecessary empty areas in pages whose last normal line contains footnotes when the page bpd is not the same for all pages. Changed FONode.addCharacters() parameter to closer match the signature of the standard SAX characters() event (reduces confusion and computations). !! Implementors of extensions that subclass FONode directly, and offer an implementation for addCharacters() should take care to make similar modifications in their code !! Added a PCL-specific extension attribute on simple-page-master for controlling the simplex/duplex mode. Corrected white-space-treatment for situations where an inline-node is the first/last child node of an fo:block, without preceding/following text. Implemented word-by-ford font-selection strategy on text. Support character-by-character font-selection strategy on fo:character element. Added support for page-number-citation and page-number-citation-last of fo:inline. Corrected behavior for page-number-citation-last of fo:block: forward references now properly resolved. For auto-detected fonts it is now possible to specify that a font needs to be referenced rather than embedded (for the output formats that support this distinction). Added support for the "id" attribute on fo:wrappers when used as a child of the fo:flow. Fixed a ClassCastException when using an fo:wrapper as a child of an fo:block-container. Add support for font substitution. PCL Renderer: Improved page format selection so it doesn't interfere with duplex printing. Fixed a regression introduced by the fix for Bugzilla 44286. Activated min-height/max-height and min-width/max-width properties. Fixed a logic error in Hyphenator.java: If the source had an associated InputStream, an UnsupportedOperationException was triggered. Add partial support for the "show-destination" property on fo:basic-link (PDF output only; see limitations on the compliance page) Added minimal support for integer keep values on the various keep properties on block-level FOs. For now, all integer values are treated the same (i.e. without strength distinction). Using integers allows to avoid overflows that can happen when "always" is used extensively. Added support for rendering pages using JPS (Java Printing System). See new example: examples/embedding/java/ExamplesFO2JPSPrint.java Restored ability to specify from/to and odd/even pages as well as the number of copies for printing from the command-line. Added ability to pass a preconfigured PrinterJob instance to the PrintRenderer via the rendering options map. Added a public accessor for reference to the current page to PDFGraphics2D. Added support for auto-configuring TrueType Collections. XML font metrics files for *.ttc fonts are not required anymore. When a JPEG image is embedded, an optionally embedded color profile is filtered out as it's already embedded separately in the PDF file. Added support for addressing all glyphs available in a Type 1 font, not just the ones in the font's primary encoding. Added an event handling framework which allows to get better feedback from within FOP with the ability to customize problem management.
Notes

Besides the important changes listed below, the most important areas with improvements in this release are:

  • Many bugfixes in tables, plus some new features (full support for keeps and breaks, border conditionality, background on columns and header/footer/body)
  • Improvements and bugfixes for font handling and font auto-detection/-registration.
  • Performance improvements and memory optimizations for the property handling in the FO tree.

Please note that with this release, we've dropped support for Java 1.3. FOP will, from now on, require at least Java 1.4.

There have been a few changes in tables that make FOP both more strict and more compliant to the Recommendation:

  • XSL-FO 1.1 explicitly states that a row-spanning fo:table-cell element is not allowed to span further than its enclosing fo:table-header/footer/body element (see bottom of section 6.7.3). From now on FOP will give a validation error if a document contains such an erroneous cell.
  • If an fo:table element contains explicit fo:table-column children, then those elements set the total number of columns in the table. This means that a validation error will now occur if a row contains more cells than available columns. This change allows to improve performance, since the rendering of the table may start as soon as the table-column elements have been parsed.

    If more flexibility is needed, then the fo:table-column elements may be just omitted. The final number of columns will then be set by the row that has the most cells.

The image libraries Jimi and JAI are no longer needed (and used) for image loading. Instead we rely completely on the Image I/O API that has been introduced with Java 1.4. If you still need support for bitmap image formats that do not work out-of-the-box, we recommend adding JAI Image I/O Tools (an Image I/O compatible image codec package) to the classpath. JAI is still required for building the FOP distribution but it is optional for normal builds and at run-time.

This final 0.95 release also includes all of the changes made for Apache FOP 0.95beta.
Fixed a color selection problem which occurred after an image has been painted through the Graphics2DAdapter in PDF output. Fixed page ordering problem with AWTRenderer. Fixed image scaling for RTF output. Fixed the -imagein command-line option. Added support for fo:leader for RTF output (no full support!). Fixes problems with empty leaders being used to force empty lines among other issues. Added support for page-number-citation for RTF output. Fixed handling of proportional-column-width() and percentages for table column in RTF output. Fixed NullPointerException when page-number-citations are used inside a marker. Fixed two bugs concerning resolution handling with SVG images and their conversion to bitmaps for RTF output. Fixed potential multi-threading problem concerning the use of DecimalFormat. Regression bugfix: Multiple collapsible breaks don't cause empty pages anymore. Fixed resolution handling inside AWT preview dialog. Fixed positioning of absolutely positioned block-containers in multi-column documents. Fixed rendering of fixed block-containers in AFP output. Various bugfixes for table layout. Fixed regression causing bad positioning of block-containers if used as descendant of a table-cell. Fixed text extraction problem with ZapfDingbats and Symbol font in PDF output. Fixed a performance problem concerning image serialization. Fixed NullPointerException when loading a TrueType font using XML font metric files.
Notes

Besides the important changes listed below, the most important areas with improvements in this release are:

  • Many bugfixes in tables, plus some new features (full support for keeps and breaks, border conditionality, background on columns and header/footer/body)
  • Improvements and bugfixes for font handling and font auto-detection/-registration.
  • Performance improvements and memory optimizations for the property handling in the FO tree.

Please note that with this release, we've dropped support for Java 1.3. FOP will, from now on, require at least Java 1.4.

There have been a few changes in tables that make FOP both more strict and more compliant to the Recommendation:

  • XSL-FO 1.1 explicitly states that a row-spanning fo:table-cell element is not allowed to span further than its enclosing fo:table-header/footer/body element (see bottom of section 6.7.3). From now on FOP will give a validation error if a document contains such an erroneous cell.
  • If an fo:table element contains explicit fo:table-column children, then those elements set the total number of columns in the table. This means that a validation error will now occur if a row contains more cells than available columns. This change allows to improve performance, since the rendering of the table may start as soon as the table-column elements have been parsed.

    If more flexibility is needed, then the fo:table-column elements may be just omitted. The final number of columns will then be set by the row that has the most cells.

The image libraries Jimi and JAI are no longer needed (and used) for image loading. Instead we rely completely on the Image I/O API that has been introduced with Java 1.4. If you still need support for bitmap image formats that do not work out-of-the-box, we recommend adding JAI Image I/O Tools (an Image I/O compatible image codec package) to the classpath. JAI is still required for building the FOP distribution but it is optional for normal builds and at run-time.

Bugfix: The before border of a block is no longer swallowed if its first child issues a break-before. Bugfix: When there was a forced break after a block with (conditional) borders the border-after wasn't painted. Bugfix: a forced break inside a cell was ignored when occurring before the minimum height set on the enclosing row was set. Fixed exceptions when lists, tables or block-container are children of an inline-level FO. Added support for background on fo:table-column and fo:table-header/footer/body elements. Fixed the rendering of the area of a table corresponding to border-separation, which must be filled with the background of the table, and not the rows. Improved conformance: even if a table-cell spans several rows its background must correspond to the first row spanned. Slight improvement for thin lines in Java2D/AWT output. Added full support for keep-with-previous on fo:table-row and in fo:table-cell elements. Turned on XInclude processing for the main source given on the command line. Improved the font auto-detection so fonts accessed using the font-family name are selected with higher accuracy. Removed deprecated methods in the "apps" package that were left-overs from the API discussions. Added support for unusual font encodings (like for Symbol or Cyrillic fonts) of Type 1 fonts in PDF and PostScript output. Moved to the FO tree stage the check for break-before/after on table-row while spanning in progress. Added full support for breaks before and after table cells (that is, break-before/after set on the first/last child of a cell). Added full support for breaks inside the cells of a table. Added correct percentage resolution for arguments to the proportional-column-width() function. Bugfix for date formatting with negative time zones in the PDF's Info object. This affected PDF/A compliance. Added an option to disable the default sRGB profile in PDF output for those who don't care about color fidelity, but care about PDF file size. Fixed a bug when the rgb-icc() function was used either before the fo:declarations, or in documents without a fo:declarations node. In such cases, the sRGB fallback is now used to avoid an ugly NullPointerException. Added very basic parsing for the xml:lang shorthand. Fixed a bug when using relative font-size (smaller/larger) in combination with percentages. Bugfix for handling of optional tables in subset TrueType fonts. This bug caused errors in various PDF viewers. Added support for the natural language indentifier ("Lang" in the document catalog) for PDF documents based on the language/country values on fo:page-sequence. Fixed a memory-leak in XMLWhiteSpaceHandler. Fixed the resolution of borders when header/footer is omitted at page breaks. Added support for conditional borders in tables, for both the separate and the collapsing border model. Fixed a possible IndexOutOfBoundsException that could happen with certain constellations when footnotes are used. Compliance fix: for absolutely positioned block-containers, "top" wasn't interpreted correctly. New extension attribute fox:transform on fo:block-container allows free-form transformation (rotation, scaling etc.) of absolute and fixed block-containers. Supported only for PDF, PS and Java2D-based renderers. Fixed logic error setting the transformation matrix for block-container viewports (applies to absolute and fixed block-containers only). Important: External renderer implementations need to adjust for the change and implement the new method concatenateTransformationMatrix(AffineTransform) if the renderer is derived from AbstractPathOrientedRenderer. A new image loading framework has been introduced to fix various problems with external graphics and improve performance. Fixed generation of named destinations so it works when the PDF document is encrypted. PostScript output now generates the bounding box DSC comments for the whole document. Added support for PDF page labels. Added support for custom fonts in Java2DRenderer and derived renderers. Added new extension element: fox:external-document. It allows to add whole documents such as multi-page TIFF images to be inserted as peers to a page-sequence. Each image will make up an entire page. See the documentation for details. Added minimal support for the .minimum/.maximum components of block/inline-progression-dimension on fo:external-graphic and fo:instream-foreign-object. Added support for scale-down-to-fit and scale-up-to-fit (introduced in XSL 1.1). Bugfix: content of a row with zero height overriding the previous row Bugfix: allow multiple bookmarks to point at the same destination. Bugfix for border-after painting and element list generation when a forced break is involved. Bugfix: no empty page is generated anymore if there's no content after a break-after. Restored proper handling of fo:table-cell having no children, which is allowed in relaxed validation mode. Memory Leak fixed in the Property Cache. Fixed by Jeremias Maerki. Reported and Tested By Chris Bowditch. Bugfix in tables: wrong element generation by the merging algorithm when glues must be produced to cope with conditional spaces. The corresponding length was added twice: one in the glue itself and one in the following box. Bugfix for URI resolution: Make StreamSources without system identifier work again. Avoid a NullPointerException in AreaTreeHandler.endDocument(). Bugfix: breaks generated by the merging algorithm for a table-row containing empty cells had always a penalty of 900. Added methods for fo:page-number-citation(-last) in FOEventHandler. Step towards performance: the collapsing-border resolution algorithm no longer triggers the retrieving of the whole table, when possible. In case of missing cells the border-end of the table was applied to an inner cell, instead of the (empty) cell in the last column. Fixed the resolution of borders with table-columns (border-before/after was wrongly applied to every cell of the column). Fixed the resolution of border-end on cells spanning several rows. Bugfix: Use Font.getName() (logical font name) instead of Font.getFontName() (localized) when registering fonts from AWT. Made the way TrueType fonts are embedded in PDF compliant to the specification so viewers correctly identify subset fonts. Fixed font-autodetection so fonts with uppercase extensions are detected, too. Improved font auto-detection and handling of AWT-supplied fonts in order to achieve better results when using multiple output formats. Whenever possible, the font names appearing in the operating system can also be used in XSL-FO. Fixed regression: transparent-page-background was not recognized for PNG output. Added check for table-cells which span more rows than available in their parent element (table-header/footer/body). Added support for fo:markers in fo:inline and fo:basic-link. PDF Transcoder (SVG) text painting has been completely rewritten. Except for some special cases (with filters for example), all text (including flow text) is now painted using PDF text operators. Added support for ids on empty fo:inlines. Add Font support in jar files. Postscript extension cleanup. Fix to avoid ClassCastException where multiple ps:ps-comments are declared within fo:declarations. Fix to avoid NullPointerException when parsing ExpertEncoded and ExpertSubsetEncoded Type 1 fonts. Fixes missing TLE value attribute when using AreaTree input with the AFP renderer. Added generic structures to the PDF library in order to support PDF file in fo:external-graphic later. Added support for SVGZ. Bugfix for NPE with empty table-row (regression from 0.93). Added a configuration setting to the PCL renderer to disable PJL commands. Fix to avoid a ClassCastException in renderer configuration. Fixed the restoration of the TLE values from the intermediate format for the AFP extension elements. Added a configuration setting for the renderer/device resolution to the AFP renderer. Facilitate the implementation for font-selection-strategy:
• Changed FontInfo.fontLookup to always return an array of FontTriplet.
• Changed CommonFont.getFontState to return an array of FontTriplet.
• Initial modifications to the related LMs: initialized with the font corresponding to the first of the triplets.
PropertyCache phase 2:
• improvement of the PropertyCache itself should now guarantee acceptable performance of the static caches in multi-session environments, which is a possible problem with synchronizedMap.
• changed CommonFont to use the cache: added CachedCommonFont to contain the properties that are always cacheable CommonFont itself is only cached if the remaining properties are absolutes.
• changed CommonHyphenation, KeepProperty, ColorProperty and FontFamilyProperty to use the cache.
Fixed swallowing PCDATA in text-node children of retrieved markers. Fixed erroneous white-space removal in retrieved markers. Fixed erroneous usage of inherited color-values in SVG.
AFP Renderer: Bugfix for 1 bit images where the width is not a multiple of 8. Support for keep-together.within-line="always". Fixed incomplete support for Unicode Word Joiner characters (U+2060 and U+FEFF). Add support for conditional spaces in table-cells. Support alignment-adjust for images. Partial application of the patch in Bugzilla 41044: * addition of a generic PropertyCache to be used by all Property types that can be safely canonicalized * modified EnumProperty, StringProperty, NumberProperty, EnumNumber and FixedLength to make use of the cache infrastructure Refactoring in the fo package: -> removal of the childNodes instance member in fop.fo.FObj -> addition of a firstChild instance member in fop.fo.FObj -> addition of a siblings instance member in fop.fo.FONode -> addition of a FONodeIterator interface in FONode + corresponding implementation in FObj -> changed implementations of FObj.addChildNode(), .removeChild() and .getChildNodes() Code cleanup and restructuring: Refactoring of PageSequenceLayoutManager and provide common FObj id property use Slight improvement of relative font-weight handling in the properties package. Updated PDF/A-1b support according to ISO-19005-1:2005/Cor.1:2007. Add support for font auto-detection (easier font configuration). Use source resolution setting for bitmap images which don't provide their own resolution. Fixed the rendering of zero-width spaces for certain fonts by not generating them into the area tree. Fixed a problem with disappearing footnotes inside hyphenated inlines (and footnotes with hyphenated inline child). Add support for exact positioning of internal PDF links. Fix PDF Genaration for non-ASCII compatible locales. Fix several exceptions when break-before/after is set on the first/last row of a table. Fix extra page break when break-before is set on both a table and its first row. Make keep-with-next and keep-with-previous work on fo:table. Add support for the collapsing-border model in tables. Add support for named destinations in PDF. Fixed a problem with keep-with-next on table-rows. Once a keep-with-next was set inside a table, the FO following the table would always be glued to the previous table. Fixed a problem with the auto-rotate-landscape setting in the PostScript renderer. It didn't generate the right setpagedevice command. Fixed an IllegalArgumentException for absolutely positioned block-containers with a border and no height/bpd set. Add support for a two-pass production for PostScript output to minimize file size. This adds images only once and adds only the fonts that are really used. If a line contained nothing but a linefeed, this didn't produce empty lines. Replaced the auxiliary zero-width box with a glue the width of a line, and shrinkable to zero-width. Stricter FOP user configuration checking Fix parsing 'url(...)' when the URL itself contains a bracketed part. Support for GIF images in RTF output (RTF handler, only. Does not affect the RTF library.) Fix for NPE with PNG images for RTF output. Fix for properly parsing font-family names containing spaces. Support for soft masks (transparency) with ImageIO image adapter. Fix incorrect behaviour of the BreakingAlgorithm when some inline content is wider than the available ipd, causing a restart. Fix for PDF corruption when a TrueType font with spaces in its name is embedded and no XML font metrics file for that font is used. Fix for ClassCastException when fo:wrapper was used as direct child of fo:flow. Note: "id" attributes are still not handled properly on fo:wrapper! Added support for the soft hyphen (SHY) character. Added support for line-height-shift-adjustment property. Added support for the system property fop.home to cli.Main.getJARList(). Added support for display-align for table-cell in RTF output. Added support for UAX#14 type line breaking. Support does not extend across nested fo:inline elements.
Notes

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.
  • See the compliance page for an overview of the compliance of this release with the XSL 1.0 and 1.1 recommendations.
  • This release again contains many bug fixes and new features. See below for details.
  • See the known issues page for an overview of the known issues with this release.

Caveats:

  • You may experience different behaviour compared to version 0.20.5. Please consult the "Upgrading" page for details.
Added support for the use of Open Type fonts Enabled Copy/Paste from PDF content in Acrobat Reader for text using embedded TrueType fonts. Commented out unused properties, in order to minimize memory usage. Removed unused attributes from TableCell. Added initial support for loading fonts without a pre-created XML font metric file. Support for the rgb-icc() function and for a proprietary cmyk() function (for device CMYK colors only through the PDF renderer so far). Minor fixes and improvements for the AWT Preview (keyboard shortcuts, scrolling, windows setup). Added support for SVG in fo:instream-foreign objects for RTF output. Bugfix: Fixed bug when the sum of column widths of a table is larger than the specified widths. The table width was not adjusted. Bugfix: Nested tables with headers and footers were not handled correctly and could overlap with the region-after. Added support for CCITT compression in the TIFFRenderer by switching to the ImageWriter abstraction from XML Graphics Commons. Extension properties fox:orphan-content-limit and fox:widow-content-limit which help with list-block and table layout. See the documentation for details. Configuration option in the Java2D-based renderers that allows to disable the default white background in order to produce bitmap output with transparency. Split up FOText instances larger than 32K characters to avoid integer overflow during layout. Bugfix: Corrected painting of shading patterns and position of links for SVG images inside FO documents. Minor fix: correctly set negative values for ipd/bpd to zero. Rework of default column-creation / column-width setting from cells in the first row. Added relaxed validation for empty list-item-*, as suggested by Gary Reed. Modified proportional-column-width() function to log an error if used with table-layout=auto Deferred property resolution for markers until they are actually retrieved, which leads to percentages and relative font-sizes now getting the correct values. Also deferred white-space-handling for markers. Changed the way overflowing pages are handled. The overflow property on region-body is now used to define the behaviour. Fixed a memory-leak: The FO tree part of a page-sequence was not released when a page-sequence was finished. Bugfix: Table headers and footers were swallowed when a table was nested in a list-block. Fixed a bug with indent handling when margins are used on a surrounding block and not start/end-indent. Compatibility fix for GCJ (GNU Classpath): Using "UTF-16BE" instead of "UnicodeBigUnmarked" encoding. Fixed handling for CCITT Group 4 TIFF images with fill order 2. Fixed setting of page margins in AWT Renderer like it was done in the print renderer. Fixed two memory-leaks in image handling. The image cache is finally working properly. Let numeric property values without a unit be treated as pixels like in HTML. This fixes certain NullPointerException when no units are specified. (Note: the use of pixels in XSL-FO is discouraged!) Bugfix: Potential multi-threading issue (ConcurrentModificationException) eliminated for ElementMapping classes. No more System.exit() and look & feel setting calls inside the reusable parts of the AWT viewer. Proper escaping of characters in list-items labels for RTF output. Bugfix: FOUserAgent specific configuration parameters specified in config file were not set when FOP was invoked from command line. Added support for PDF/A-1b and PDF/X-3:2003. (Note: this may still be a bit incomplete. Feedback is welcome!) The CIDSet object is now generated for CID fonts which are embedded in PDFs. (Required by PDF/A). 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. Bugfix: components of the border-separation property weren't set when in shorthand-mode, leading to a NPE being thrown. Bugfix: Table headers were omitted when a table is a child of a block-container. Bugfix: Bookmarks in PDF will be generated even if some bookmarks cannot be resolved. Bugfix: the interaction between the table FOs and properties package in determining initial values for column-number should be a one-time process, not repeated when the table is in a marker that is retrieved. Bugfix: All fonts names were converted unnecessarily to lower case in RTF output. Bugfix: The combination of hyphenation and kerning resulted in slightly ragged right ends for right-aligned and justified text. Bugfix: NullPointerException in AreaAdditionUtil in a table-cell spanning multiple pages and with a marker. Bugfix: NullPointerException in RTF output when a table does not contain table-columns. Bugfix: NullPointerException in RTF library when there are no borders on the parent table. Automatic support for all fonts available to the Java2D subsystem for all Java2D-descendant renderers (TIFF, PNG, print, AWT). Bugfix: Improved baseline detection in TTFReader for TrueType fonts. Bugfix: tables nested in inline elements caused a NullPointerException. The default sRGB color profile provided by the Java class library is no longer embedded if it is encountered. This should reduce the PDF size considerably. Bugfix: Sections with span="all" lead to overlapping text if spanning multiple pages. Bugfix: Percentages in vertical-align property values were not correctly handled. Bugfix: Gaps in table-columns cause a NullPointerException. Changed the internal representation of colors to use Java's own color infrastructure instead of FOP's home-grown classes. Bugfix: TABs were not correctly replaced by spaces in some circumstances. Content in block-containers makes better use of shrink to fit content vertically into the available area. This can be used indirectly to justify content vertically in a block-container. Bugfix: basic-links with internal destinations in documents with multiple page-sequences sometimes pointed at the wrong page. Bugfix: Fixed ClassCastException when retrieve-marker is used as a direct child if static-content in which case leading and trailing white space is not properly removed. Bugfix: Fixed OutOfMemoryException with long data URLs (RFC 2397). Initial support for page-number-citation-last (XSL 1.1). Works without problems only for page-sequence so far.
Bugfix: The generation of the PDF "d" (setdash) command was assuming that only integer values can be used but that isn't the case. Dash patterns PDFGraphics2D would be wrong in the process. Bugfix: Fixed a division by zero problem in TTFReader and improved the detection of the capHeight and xHeight font metric values for TrueType fonts. Bugfix: Allow URLs in basic-link's external-destination to be wrapped in "url()". Bugfix: Corrected enumerated property value for white-space property from "no-wrap" to "nowrap". Bugfix: Added support for white-space-treatment="preserve" in particular to support the white-space="pre" short hand property. Corrected expectation and behaviour for the text-indent property to only apply to the first line area generated by a block. Bugfix for invalid handling of ICC color profiles in JPEG images and for dealing with CMYK JPEG images with the Adobe APPE marker. Initial support for page-position="last" added. Reenabled loading of user-supplied hyphenation patterns that was available in FOP 0.20.5. (See "hyphenation-base" option in the user configuration) Bugfix: Certain filter combinations in PDF could lead to invalid PDFs. DecodeParams were not properly handled. Bugfix: CCITT Group 4 encoded TIFF images with multiple strips are now properly embedded in PDF files. Added support for fixed-width spaces. Added support for kerning. Bugfix: Fixed a copy/paste error in the table layout code that caused wrong page break decisions when table-headers and/or table-footers are used. Bugfix: Fixed an NPE that was thrown when a table was used inside a footnote-body. Bugfix: Fixed a problem with certain TrueType fonts which are missing the "PCLT" table, where a baseline-shift="sub" had no effect due to a missing x-height value. (Note: This only affects TTFReader, so the font metric file has to be regenerated.) Bugfix: When the base URL was specified as a file system path, the constructed URL was wrong. Support for "userconfig" attribute in FOP Ant Task. Initial support for XMP metadata (PDF 1.4) under fo:declarations. Added support for the background-position shorthand property. Added support for the font shorthand property. Added support for system-color() function. Bugfix: Fixed two causes for ClassCastExceptions in BlockContainerLayoutManager. Bugfix: padding-top and padding-bottom on list-items could lead to wrong page break decisions and thus to overlapping text. Bugfix: break-before and break-after were ignored on list-items. Bugfix: The elements representing a non-breaking space weren't always correct. Bugfix: Text-decoration was not promoted if no text-decoration attribute was specified on a nested element. Added support for the from-table-column() function. Bugfix: Spanned cells could lead to an false error message about overlapping cells and ultimately a NullPointerException. Bugfix: Regions with non-standard names got ignored in RTF output leading to missing headers and footers. The RTF output now properly generates the "\landscape" flag for documents in landscape orientation. Following a clarification by the XSL FO SG, space traits are only set on the first and last area generated by an FO, and not on every area anymore. New feature: "Intermediate format" (IF). The IF is basically the XML dialect written by the area tree renderer (XMLRenderer). A new parser for this format allows reparsing a serialized and possibly modified area tree and rendering it to the final target format. Bugfix: Floating point numbers were not properly formatted in the PDF renderer which could lead to error messages while opening a PDF in Acrobat Reader. Implement property name as default argument on some xsl-function calls. Implement force-page-count property of page-sequence. Bugfix: Spans that end up with a negative height don't get swallowed anymore. Relative URLs for the font configuration attributes metrics-url and embed-url are now supported. A new configuration property font-base has been added. It sets the base URL against which relative font URLs are resolved. If font-base is not set base is used. Added support for RFC2397 "data" URLs. Bugfix: Certain border styles could lead to a NullPointerException. Bugfix: Space was not adjusted if the space was on a nested block. This could lead to content overflowing the bottom of a page. Bugfix: TableCell did not properly report that it generates reference-areas which could lead to wrong inherited values for start-indent and end-indent. The font loading code now reads the encoding value from the XML font metrics file so that fonts like Symbol and ZapfDingbats can be embedded explicitely (Required by PDF/A). Improvements to the code for inline block content. Bugfix: Image height for BMP images was incorrectly calculated Revision of refinement white-space handling. Added feature: support for white-space shorthand Added feature: support for page-break-* shorthands Bugfix: NullPointerException on certain fo:inline within lists. Bugfix: ClassCastException on certain fo:inline with border combinations. Changed a method name in LineArea from finalize to finalise because it was never intended for the method to be an override of the Java Object finalize method. If invoked by the Java garbage collector it may cause a NPE. Deprecated Fop constructors that use integer constants to select the output format have been removed in favor or the constructors that use MIME types. Fixed a bug where the linefeed-treatment property value "preserve" was not honoured when used in conjunction with text-align="center". Bugfix: hard breaks with even-page or odd-page were not handled correctly when spaces were surrounding the break. Changed the XMLHandler interface so it doesn't report the MIME type it supports but instead can report whether it supports a particular Renderer implementation. XMLHandlers are now configurable. Fixed a bug where SVG content could be clipped when rendered to PostScript. Changed the way resolutions are handled. The single resolution in the user agent got split up into source and target resolutions. For more info, see the updated documentation. Note: backwards-incompatible change! Bugfix: Some content inside a table-header may not have been renderered on pages n > 1 in certain conditions. Fixed a bug where an empty line, i.e. a block containing only a  , was not rendered at all. Fixed a bug where the area for a finished cell that is broken over pages was created once for each row it was spanned over instead of only once. Added checks that warn about tables and block-containers that are wider than the available content area. Bugfix: Footnotes were lost if the footnote appeared in centered text. Improved log and error messages in a number of places by adding additional context information that should make it easier to find the location in the source files. Fix to correct image sizes in RTF output. First attempt at SVG support in RTF output. SVG images are converted to 300dpi JPEG images internally. Additional checks to detect text overflows. The overflow property is now properly handled where applicable. Source location information improved. If location information is not available, the context information is provided based on text content. The command-line now automatically sets two parameters for any XSLT transformation: "fop-output-format" contains the MIME type of the currently selected output format, "fop-version" contains FOP's version number. The output file is now deleted when an exception occurs when calling FOP from the command-line. Bugfix: Areas for table-cells that are broken over more than one page are now generated even if all its content is already painted on a previous page. This fixes strange effects like a table grid that is not completely painted. Bugfix: Column balancing produced strange break decisions in certain multi-column documents with large amounts of text. Added an alternative set of rules for calculating text indents which tries to mimic the behaviour of many commercial FO implementations that chose to break the rules in the FO specification in order to better meet the natural expectations of inexperienced FO users. Bugfix: The combination of content-width="scale-to-fit" and content-height="100%" did not work as expected due to a datatype conversion bug. Bugfix: A span="all" on the first block cause a subsequent page break and the first block didn't span all columns. Bugfix: Self-created OutputStreams in PNG Renderer were not properly closed. The border-collapse property on fo:table is now forced to the value "separate" until the collapsing border has been implemented. font-family list still not fully supported but a comma-separated list is now properly tokenized. FOP will now go through all fonts in the list to find one that is available, but it doesn't do so per character, yet. Implemented "Overconstrained Geometry" rules (5.3.4, XSL 1.0) for the most important cases. Bugfix: Relatively positioned BlockViewports (from block-containers) caused the paint cursor not be be properly advanced when space-before or space-after were present. Bugfix: Space resolution was incomplete for content in table-cells. Conditional elements didn't get removed. The validation check for non-zero borders and padding on a region-* and for empty static-content elements is now turned off when relaxed validation is active to improve compatibility with FO documents written for other FO implementations. Bugfix for "/ by zero" ArithmeticExceptions when an URL to a non-existing image is used and content-width and/or content-height is used. Bugfix for a multi-threading problem: propertyListTable initialization moved from the constructor to a static block in FONode. This fixes NullPointerExceptions in PropertyList. Bugfix for placement of text inside a text area when borders are present in PostScript output. Improvements on leader painting in PDF output. Support for leader painting in PostScript output. Support for hyphenation-ladder-count. Complete redesign of the FOP codebase in the period between Dec 2001 and Nov 2005. There are just too many changes to list here. If you like to know details, run "svn log --verbose http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/". For the change log for the maintenance branch (where FOP 0.20.5 came from), please see the "CHANGES" file in the distribution, or the CHANGES file in the SVN repository.
Improve the documentation.