Render engine: supported features and expressions
VeloxFactory renders
.jrxml templates with its own render engine: a pure-PHP implementation of JasperReports, based on the open source project JasperPHP and maintained by us as an independent fork. It needs no Java runtime, but it implements a defined subset of JasperReports rather than the full Java engine. This page lists exactly what that subset is, so you can design templates in Jaspersoft Studio that render the same way in VeloxFactory.
How to set up parameters, fields, resources and the query is described in Creating reports in Jaspersoft Studio. This page covers what happens inside the template: bands, elements, styles, expressions and formatting.
ℹ️ This page describes render engine 1.2. If a template behaves differently from what is described here, the render engine is the reference, not Jaspersoft Studio's preview. Always check a real rendering in VeloxFactory before you release a template.
Two rules for every template
Every band needs
splitType="Stretch", including an explicit empty
.
Bands must follow the JasperReports XSD order:
background,
title,
pageHeader,
columnHeader,
detail,
columnFooter,
pageFooter,
lastPageFooter,
summary. Jaspersoft Studio refuses to open a file with a different order.
Bands
Band
Behaviour
background
Printed once per page at the top edge, behind the content. Does not push other bands down.
title
Printed once on the first page.
$F{...} shows the first data row.
pageHeader
Printed on every page. On the first page it follows the title.
columnHeader
Printed on every page that contains detail rows, also after a manual
.
detail
Printed once per data row. Grows with stretching text fields.
groupHeader /
groupFooter
Printed whenever the value of the
groupExpression changes.
columnFooter
Printed below the detail rows of a page.
pageFooter
Printed at the bottom of every page.
lastPageFooter
Replaces the
pageFooter on the last page. Also works without a
pageFooter: then a footer appears on the last page only.
summary
Printed once at the end.
$F{...} shows the last data row, variables hold their final values. If the summary does not fit and moves to a page of its own, that page has no page header, column header or footer, and the
lastPageFooter appears on the page before. With
isSummaryWithPageHeaderAndFooter="true" on
, the summary page gets page header and footer (the
lastPageFooter), but still no column header. This is JasperReports behaviour.
noData
Not supported.
Elements
Element
Supported
textField,
staticText
Horizontal and vertical alignment, rotation,
markup="html", line spacing (Single, 1_1_2, Double, Proportional),
textAdjust (StretchHeight, ScaleFont, CutText),
,
pattern /
patternExpression, hyperlinks
rectangle
radius,
mode, forecolor and backcolor, pen width, colour and style (Solid, Dashed, Dotted), fractional sizes such as
height="0.8"
line
Pen as for rectangles. Lines thinner than 1 pt are drawn straight.
frame
Background, border, child elements positioned relative to the frame
image
Path or URL as an expression, Base64 data URIs (
data:image/png;base64,...), JPG and PNG. In VeloxFactory, images normally come from
P_RESOURCE_ parameters.
Barcodes
QR Code, DataMatrix, PDF417, Code 128, Code 39, Code 93, EAN-8, EAN-13, Interleaved 2 of 5, Postnet. The code is an expression.
subreport
Data source from a list field (
$F{items}, also
new JRBeanCollectionDataSource($F{items})), file name as an expression,
.jasper is resolved to
.jrxml
break
Page break, prints page footer, page header and column header
jr:table
Basic tables
Every element respects
printWhenExpression, evaluated for each row.
Layout rules
StretchHeight makes the band taller, never the elements beside it. The next band starts below the lowest stretched field.
Vertical alignment with StretchHeight: if the text fits into the field, Top, Middle and Bottom apply as usual. Only overflowing text grows downwards from the top.
positionType="Float" moves an element down by the growth of the stretched fields above it. All other elements keep their position.
ScaleFont reduces the font size until the text fits into the box. Line breaks are allowed.
Page breaks fill the page down to the page footer. The decision uses the declared band height.
:
applies to all four sides,
topPen,
leftPen,
bottomPen and
rightPen override it. The colour falls back from the side pen to the box pen, then to
forecolor, then to black.
padding sets all four paddings,
leftPadding etc. override it.
Defaults are the same as in JasperReports:
Rectangle: Opaque, white background, 1 pt black border.
Line: 1 pt. A pen width of 0 draws nothing.
Pen colour:
lineColor takes precedence over
forecolor.
Styles
Assignment:
style="Name" on the
reportElement. A style with
isDefault="true" applies to all elements without a style of their own.
Inheritance: