https://github.com/nathanaela/fluentreports
:page_facing_up: Fluent Reports - Data Driven Reporting Engine for Node.js and Browsers :page_facing_up:
https://github.com/nathanaela/fluentreports
browser browsers data-driven data-driven-workflows generate node pdf report report-engine report-pdf reporting reporting-engine
Last synced: 5 days ago
JSON representation
:page_facing_up: Fluent Reports - Data Driven Reporting Engine for Node.js and Browsers :page_facing_up:
- Host: GitHub
- URL: https://github.com/nathanaela/fluentreports
- Owner: NathanaelA
- License: mit
- Created: 2013-08-15T03:25:24.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2024-12-27T18:23:01.000Z (5 months ago)
- Last Synced: 2025-05-15T01:09:17.156Z (5 days ago)
- Topics: browser, browsers, data-driven, data-driven-workflows, generate, node, pdf, report, report-engine, report-pdf, reporting, reporting-engine
- Language: JavaScript
- Homepage: https://fluentreports.com
- Size: 12.7 MB
- Stars: 379
- Watchers: 30
- Forks: 83
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- Changelog: changelog.txt
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Fluent Reports

[](https://www.npmjs.com/package/fluentreports)
[](https://www.npmjs.com/package/fluentreports)
[](https://www.npmjs.com/package/fluentreports)
[](https://img.shields.io/github/last-commit/nathanaela/fluentreports)
[](https://www.github.com/nathanaela/fluentreports)---
#### Funding and sponsorship
[](https://github.com/sponsors/nathanaela)You can now sponsor us on Github: [https://github.com/sponsors/NathanaelA](https://github.com/sponsors/nathanaela)
---
#### Website and demos
See: [https://www.fluentreports.com](https://FluentReports.com) for more information.Fluent Reports - Data Driven PDF Reporting Engine for **Node.js** and **Browsers**
Try out the reporting engine in your own browser at [https://www.fluentreports.com/demo.html](https://www.fluentreports.com/demo.html)
## Install
`npm install fluentreports`
## Common JS
Use: `const Report = require( 'fluentReports' ).Report;`
## ESM Support
Please use `import { Report } from 'fluentReports/lib/esm/fluentReports.mjs';` as the ESM wrapper is located in the /lib/esm/ folder...
## Documentation
Please [read the commands.md file](commands.md) for an overview of all the commands. The files in the `docs/` folder are generated from the source code via jsdocs, so they **might** be more up to date.
Please [read the examples readme file](examples) for a list of examples.
Please [read the tutorial.md file](tutorials.md) for the tutorials.
## Features:
* **New: JSON based reports**
* **New: Report Generator**
* Testing Harness to verify reports look the same after any updates
* Completely Data Driven. You pass in the data; you tell it easily how to print the data, and it generates the PDF report.
* Data agnostic, can be arrays, and/or objects; whatever you prefer.
* Headers, Footers, Title Headers, Summary Footers - Both built-in and totally customizable
* Grouping, nested grouping, and yes even more nested groupings...
* Auto-Summing (and other automatic totals like max/min/count)
* Sane defaults, and the ability to easily override not only the defaults but pretty much every aspect of the report generation.
* Images, Gradients, Text, Fonts, Lines, and many other PDF features supported.
* Data can come from anywhere, and the report engine even support Pageable data loading and related(or sub-query) data loading.
* Sub-Reports, Sub-Sub-Reports, etc...
* Bands (Tables/Grids) & Suppressed Bands (w/ column wrapping or column clipping)
* Free Flow Text
* Ability to override each part of the report for total customization of your report
* Fluent API
* Ability to put data over images; gradients, etc.
* Quickly generate complex reports with minimal lines of code.
* Colorization, Font & other changes of text per cell in Bands
* Synchronous and Asynchronous support. If your report doesn't need to do anything Async, you can just code it without any callbacks.
* Group Headers can be (re)printed on every new page, always, and only once.
* Page Numbers and total number of pages
* Text rotation
* Cancelling of reportSee the simple & stupid examples for a overview on how to generate a somewhat complex report.
In these reports I tried to throw in a chunk of the features to try and give you and idea how powerful the engine is and how to use certain features.### Examples
Currently, we ship multiple [examples](examples).#### Browser Based Examples
There is a `demo_html.htm` file in the `examples` folder that shows how to setup a browser ONLY based report the runs 100% in a browser.
There is a readme.md in the `generator` folder for how to do a browser based reporting system with GUI that runs in the browser.### Simple Sample Report
This following report is using the a few of the simplest report methods. We can show you how quickly you can create a simple report.
You have the ability to EASILY FULLY override any and all of the Headers, Footers, and Detail bands (and much more).Really Simple Report:
```js
// Our Simple Data in Object format:
const data = [{name: 'Elijah', age: 18}, {name: 'Abraham', age: 22}, {name: 'Gavin', age: 28}];
// Create a Report
const rpt = new Report("Report.pdf")
.pageHeader( ["Employee Ages"] ) // Add a simple (optional) page Header...
.data( data ) // Add some Data (This is required)
.detail( [['name', 200],['age', 50]]) // Layout the report in a Grid of 200px & 50px
.render(); // Render the Report (required if you want output...)```
One other sample report using a list type output:
```js
const data = [
{item: 'Bread', count: 5, unit: 'loaf'},
{item: 'Egg', count: 3, unit: 'dozen'},
{item: 'Sugar', count: 32, unit: 'gram'},
{item: 'Carrot', count: 2, unit: 'kilo'},
{item: 'Apple', count: 3, unit: 'kilo'},
{item: 'Peanut Butter', count: 1, unit: 'jar'}
];
const rpt = new Report("grocery1.pdf")
.data( data ) // Add our Data
.pageHeader( ["My Grocery List"] ) // Add a simple header
.detail("{{count}} {{unit}} of {{item}}") // Put how we want to print out the data line.
.render(); // Render the Report (required if you want output...)```
---
### GUI & Browser Implementations
See the [generator](generator) documentation