Olevsoft

PForm2

Report templates you design in the browser, not in code.

PForm2 turns a plain HTML grid into a print form or a data report. You lay out the template visually in the built-in Editor2 — headers, columns, cell formatting — and the engine fills it with your data, page by page, with running totals. No template language to learn beyond marking which rows are which.

58engine tests
2output paths: HTML/PDF
PHPno external runtime

How a report gets built

The template is an ordinary HTML page with one invisible marker column — column A, never printed — that tells the engine where the header ends, where the repeating data row is, and where totals go.

  1. Design. Lay out the template visually in Editor2 — a grid-based, spreadsheet-like editor.
  2. Mark. Flag the header, the repeating data block, and totals in the marker column.
  3. Feed data. The engine walks your data set, repeating the marked block per row.
  4. Render. Output a paginated, printable HTML page — or export straight to PDF.

What a template looks like

Real templates from Editor2 — a simple invoice-style layout, and a multi-block report with running totals and nested detail rows.

A simple invoice — header, one data block, totals.
A sale receipt — subtotal, tax, grand total blocks.
A cost matrix — nested product and component blocks.
A turnover report — multiple running-total columns.

What the engine handles for you

Named accumulators

Multi-level running totals via SUM(N) field flags, pulled back into the template with {$SUM($field,N)}.

Pagination & repeating headers

setPageSize and onStartPage keep the header in place across page breaks automatically.

Master-detail & group breaks

onSub and checkBreak handle nested report sections and group subtotals.

Field formatting flags

Named flags like f2, z, s, nowrap, upper, date — set once per column, applied to every row.

PDF export

Two rendering paths: TCPDF by default, or a headless-Chromium engine for pixel-accurate output when you need it.

Plain-text output

A separate template parser generates ESC-code text output for dot-matrix and receipt printers, from the same underlying data.