In this chapter, we discussed several features that allow us to create elaborate reports.
We learned to render localized reports by using the resourceBundle attribute of the
<jasperReport> JRXML element. We used scriptlets to add complex functionality
to reports, including variable value modification and performance measurement. We
saw how to add cross-tabulation tables (crosstabs) to our reports by taking advantage
of the <crosstab> JRXML element as well as to display related charts or crosstabs
for each record in a report by using subdatasets. To ease the task of report navigation,
we learned how to add hyperlinks, anchors, and bookmarks to our reports. There are
times when we need to generate reports larger than the available memory. We can
safely generate such reports by taking advantage of report virtualization.