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: