The Pentaho Reporting Engine is broken up into eleven main Java projects, which are then combined to author and render reports. The Pentaho Reporting Engine is backward compatible to Java 1.2.2, making certain that it stays as lightweight and as useful as possible. Most of the eleven libraries are independently useful for Java developers, outside of using them strictly for reporting purposes. The following diagram describes the various dependencies between each of the reporting projects:
LibBase is the root library for all other Pentaho Reporting libraries. This library contains common capabilities, such as debug and error logging utilities, library configuration, along with library initialization APIs, for consistent startup and shutdown management of the reporting engine.
LibDocBundle abstracts the management of Pentaho Reporting file bundles, which are by default stored as ZIP files, and implements the OpenDocument format (ODF). This makes it simpler for other parts of the reporting engine to work with and manipulate Pentaho Reporting's file formats.
LibFonts allows Pentaho Reporting to work with TrueType system fonts, extracting the necessary metadata from font types, populating an abstract interface to allow appropriate rendering in various contexts, including PDF and Excel views.
LibFormat is a string formatting library, which can render dates and numbers appropriately based on format strings. This library is focused on memory and CPU efficiency for high performance report rendering.
LibFormula is a formula parsing and execution library based on the OpenFormula standard. You can learn more about OpenFormula by visiting http://wiki.oasis-open.org/office/About_OpenFormula. This library is similar in function to Excel-based formula definitions. LibFormula is a very general library, and is used outside Pentaho Reporting in other projects that require OpenFormula style parsing and execution.
LibLoader manages the loading and caching of all necessary resources required for generating reports in a generic way, providing a simple API for other parts of the reporting engine that control static and dynamic content, including data sources and images.
LibRepository abstracts the input and output of hierarchical storage systems, such as file systems, that Pentaho Reporting interacts with. This makes it possible for a custom storage system such as FTP, to be implemented and to be mapped to the API, giving Pentaho Reporting access to the system.
LibSerializer provides helper methods for serializing non-serializable objects. This is necessary so that the reporting engine can serialize standard Java classes that don't implement Java's Serializable interface.
LibXml provides utility classes for SAX (Simple API for XML) parsing and XML writing, based on Java's JAXP (Java API for XML Parsing) API. This library assures the speedy loading and validation of Pentaho Reporting XML template files.
The Report Engine Core project contains the main reporting algorithm for rendering reports, along with the necessary functionality to support styling. This project also contains the algorithms for rendering specific outputs, including PDF, Excel, CSV, XML, and more. The engine relies on the already mentioned Lib libraries for managing the loading, parsing, formatting, rendering, and archiving of generated reports.
The Report Engine Extensions project contains third-party extensions to the reporting engine, which are very useful, but increase dependencies. Extensions in this project include JavaScript Expression support using the Rhino project, a Hibernate data source factory, Barcode support using Barbecue, Sparkline support, along with additional JDK 1.4 support for configuration and printing. Additional extension projects exist that include charting and many of the data sources discussed in this book.
When combined, these libraries form the Pentaho Reporting Engine. In addition to these libraries, there are also other related open source tools and projects in the Pentaho Reporting landscape, including the Report Engine Demo, Report Design Wizard, Report Designer, and the web-based Ad Hoc Reporting user interface.