...
JFreeReport Documentation
...
Introduction
JFreeReport is a successful embedded reporting engine. By providing a high degree of flexibility and minimal requirements for the execution environment, JFreeReport can be integrated into most programms with little effort.
...
The development aims can be broken down into the following steps:
- Strict separation of data processing ("the reporting") and layouting ("content creation")
- Preserve the unmatched flexiblity of the report processing. JFreeReport allows to reconfigure the report definition while the report is being processed. (As far as I know, no other reporting engine allows that.) With this feature, one is able to create even irregular structures, as long as the rules for that can be implemented as Java-Function.
- Maintain JFreeReport's great extensibility at all levels of the library's architecture (OutputFormats, Functions, Report types, data sources, GUI, etc)
- create an simple, well structured codebase, which can be understood by everyone.
- Keep the system dependencies and requirements minimal, maximize the scalability.
Naturally, deep changes to the engine influence all other programms, which use JFreeReport. It is unavoidable that the changed API will be incompatible to any previously released version. As even minor API changes will break programms anyway, our development follow that path with full-force, happily refactoring or removing all ugly code. Once the JFreeReport 0.9 release is feature complete, the API will be driven to stability. At that point, only show-stoppers or complex features or bug-fixes will cause non-backward-compatible changes. Once JFreeReport reached 1.0, the API will be frozen for long-term maintainance. At that point, JFreeReport's code will maintain backward compatibility at all costs.
...
Historical Note: The classical report process!!
The Layout oriented Reporting Process
JFreeReport 0.9 uses a completely different reporting approach. Instead of using the data as control factor for the report process, JFreeReport concentrates on the layout that should be generated. In the new model, JFreeReport iterates over the layout (the report definition). The data processing is controlled by embedded data control commands, which control the iteration over the data sources.
By concentrating on the desired output format, now it is realitivly easy to create reports, which are no longer bounds to the classical nested grouping structures. Groups are controlled by the defined data commands, and therefore it is possible to create paralell or even irregular grouping structures.
...
A strict separation of all subsystems and all the state machines involved ensures, that the reporting engine has a simple and small core.
The layouting and content generation subsystem has been fully decoupled from the JFreeReport core. The report engine generates the input events for the 'input-feed's of LibLayout. Neither does JFreeReport know the internals of Liblayout nor is LibLayout a JFreeReport specific extension. The layouting engine has been explicitly designed as an independent library. That separation reduces the tight coupeling between both libraries and increases the flexibility of the entire system.!!
Terms and Concepts
...
Flow control and available operations
...
The implemented default behaviour of the Report-Elements
...
Introduction
JFreeReport as an engine is not bound to a specific processing model. The LayoutControllers we use define a very abstract processs model, in common words, their interface says, that they do some work, but it does not state how they do the work and what object types might be the base for their work. JFreeReport's default processing model is called the 'Flow-Modell'. When describing how JFreeReport processes content and how the data and layout layer interact with each other, we will use that Flow-Modell as reference.
A report model is a system of report elements and their behaviour. JFreeReport offers a general framework for implementing report models. A report model has to cope with two general tasks: (1) To process the report structure and (2) to update or process the data for the report. There are only a limited number of operations one can do to the data-set. As this data processing can be broken down into relatively fixed tasks, the engine provides a fine grained library of functions which should cover all current and future needs of data processing.!!