{"id":18538413,"url":"https://github.com/nathanaela/fluentreports","last_synced_at":"2025-05-15T01:09:23.212Z","repository":{"id":697737,"uuid":"12125422","full_name":"NathanaelA/fluentreports","owner":"NathanaelA","description":":page_facing_up: Fluent Reports - Data Driven Reporting Engine for Node.js and Browsers :page_facing_up:","archived":false,"fork":false,"pushed_at":"2024-12-27T18:23:01.000Z","size":13364,"stargazers_count":379,"open_issues_count":19,"forks_count":83,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-05-15T01:09:17.156Z","etag":null,"topics":["browser","browsers","data-driven","data-driven-workflows","generate","node","pdf","report","report-engine","report-pdf","reporting","reporting-engine"],"latest_commit_sha":null,"homepage":"https://fluentreports.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NathanaelA.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.txt","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"NathanaelA","patreon":"NathanaelA","custom":"https://www.paypal.me/MasterTechnology"}},"created_at":"2013-08-15T03:25:24.000Z","updated_at":"2025-05-08T07:40:18.000Z","dependencies_parsed_at":"2025-01-20T06:00:49.333Z","dependency_job_id":"0f1de936-bf6b-4fe7-82d4-fe8d31073bb1","html_url":"https://github.com/NathanaelA/fluentreports","commit_stats":{"total_commits":243,"total_committers":9,"mean_commits":27.0,"dds":0.4156378600823045,"last_synced_commit":"9b5d8beaea41048a9ec3eada457c6727e825c99d"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NathanaelA%2Ffluentreports","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NathanaelA%2Ffluentreports/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NathanaelA%2Ffluentreports/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NathanaelA%2Ffluentreports/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NathanaelA","download_url":"https://codeload.github.com/NathanaelA/fluentreports/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254254043,"owners_count":22039792,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","browsers","data-driven","data-driven-workflows","generate","node","pdf","report","report-engine","report-pdf","reporting","reporting-engine"],"created_at":"2024-11-06T19:43:22.151Z","updated_at":"2025-05-15T01:09:18.204Z","avatar_url":"https://github.com/NathanaelA.png","language":"JavaScript","funding_links":["https://github.com/sponsors/NathanaelA","https://patreon.com/NathanaelA","https://www.paypal.me/MasterTechnology","https://github.com/sponsors/nathanaela"],"categories":[],"sub_categories":[],"readme":"# Fluent Reports\n\n![.github/workflows/renderer.yml](https://github.com/NathanaelA/fluentreports/workflows/fluentReports%20Renderer%20CI/badge.svg)\n\n[![npm](https://img.shields.io/npm/v/fluentreports.svg)](https://www.npmjs.com/package/fluentreports)\n[![npm](https://img.shields.io/npm/l/fluentreports.svg)](https://www.npmjs.com/package/fluentreports)\n[![npm](https://img.shields.io/npm/dt/fluentreports.svg?label=npm%20d%2fls)](https://www.npmjs.com/package/fluentreports)\n[![GitHub last commit](https://img.shields.io/github/last-commit/nathanaela/fluentreports)](https://img.shields.io/github/last-commit/nathanaela/fluentreports)\n[![Dependencies](https://img.shields.io/librariesio/github/nathanaela/fluentreports)](https://www.github.com/nathanaela/fluentreports)\n\n---\n\n#### Funding and sponsorship\n[![github](https://img.shields.io/badge/Github-Sponsorship-orange)](https://github.com/sponsors/nathanaela)\n\nYou can now sponsor us on Github: [https://github.com/sponsors/NathanaelA](https://github.com/sponsors/nathanaela)\n\n---\n\n#### Website and demos\nSee: [https://www.fluentreports.com](https://FluentReports.com) for more information.\n\nFluent Reports - Data Driven PDF Reporting Engine for **Node.js** and **Browsers**\n\nTry out the reporting engine in your own browser at [https://www.fluentreports.com/demo.html](https://www.fluentreports.com/demo.html)\n\n## Install\n\n`npm install fluentreports`\n\n## Common JS\n\nUse: `const Report = require( 'fluentReports' ).Report;`\n\n## ESM Support\n\nPlease use `import { Report } from 'fluentReports/lib/esm/fluentReports.mjs';` as the ESM wrapper is located in the /lib/esm/ folder...\n\n\n## Documentation\n\nPlease [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.\n\nPlease [read the examples readme file](examples) for a list of examples.\n\nPlease [read the tutorial.md file](tutorials.md) for the tutorials.\n\n## Features:\n\n* **New: JSON based reports**\n* **New: Report Generator**\n* Testing Harness to verify reports look the same after any updates \n* Completely Data Driven.  You pass in the data; you tell it easily how to print the data, and it generates the PDF report.\n* Data agnostic, can be arrays, and/or objects; whatever you prefer.\n* Headers, Footers, Title Headers, Summary Footers - Both built-in and totally customizable\n* Grouping, nested grouping, and yes even more nested groupings...\n* Auto-Summing (and other automatic totals like max/min/count)\n* Sane defaults, and the ability to easily override not only the defaults but pretty much every aspect of the report generation.\n* Images, Gradients, Text, Fonts, Lines, and many other PDF features supported.\n* Data can come from anywhere, and the report engine even support Pageable data loading and related(or sub-query) data loading.\n* Sub-Reports, Sub-Sub-Reports, etc...\n* Bands (Tables/Grids) \u0026 Suppressed Bands (w/ column wrapping or column clipping)\n* Free Flow Text\n* Ability to override each part of the report for total customization of your report\n* Fluent API\n* Ability to put data over images; gradients, etc.\n* Quickly generate complex reports with minimal lines of code.\n* Colorization, Font \u0026 other changes of text per cell in Bands\n* Synchronous and Asynchronous support.  If your report doesn't need to do anything Async, you can just code it without any callbacks.\n* Group Headers can be (re)printed on every new page, always, and only once.\n* Page Numbers and total number of pages\n* Text rotation\n* Cancelling of report\n\nSee the simple \u0026 stupid examples for a overview on how to generate a somewhat complex report.\nIn 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.\n\n### Examples\nCurrently, we ship multiple [examples](examples).\n\n#### Browser Based Examples\nThere 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.\nThere is a readme.md in the `generator` folder for how to do a browser based reporting system with GUI that runs in the browser. \n\n### Simple Sample Report\nThis following report is using the a few of the simplest report methods.   We can show you how quickly you can create a simple report.  \nYou have the ability to EASILY FULLY override any and all of the Headers, Footers, and Detail bands (and much more).  \n\nReally Simple Report:\n```js\n  // Our Simple Data in Object format:\n  const data = [{name: 'Elijah', age: 18}, {name: 'Abraham', age: 22}, {name: 'Gavin', age: 28}];\n  \n  // Create a Report  \n  const rpt = new Report(\"Report.pdf\")        \n        .pageHeader( [\"Employee Ages\"] )      // Add a simple (optional) page Header...        \n        .data( data )\t \t\t\t \t      // Add some Data (This is required)\n\t\t.detail( [['name', 200],['age', 50]]) // Layout the report in a Grid of 200px \u0026 50px\n        .render();  \t\t\t\t          // Render the Report (required if you want output...)\n\n```\n\nOne other sample report using a list type output:\n```js\n      const data = [\n           {item: 'Bread', count: 5, unit: 'loaf'},\n           {item: 'Egg', count: 3, unit: 'dozen'},\n           {item: 'Sugar', count: 32, unit: 'gram'},\n           {item: 'Carrot', count: 2, unit: 'kilo'},\n           {item: 'Apple', count: 3, unit: 'kilo'},\n           {item: 'Peanut Butter', count: 1, unit: 'jar'}\n      ];\n      \n      const rpt = new Report(\"grocery1.pdf\")      \n          .data( data )\t\t\t\t\t\t\t\t\t // Add our Data\n          .pageHeader( [\"My Grocery List\"] )    \t\t // Add a simple header          \n          .detail(\"{{count}} {{unit}} of {{item}}\")      // Put how we want to print out the data line.\n          .render(); \t\t\t\t\t\t\t         // Render the Report (required if you want output...)\n\n```\n\n\n---\n\n### GUI \u0026 Browser Implementations\n\nSee the [generator](generator) documentation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnathanaela%2Ffluentreports","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnathanaela%2Ffluentreports","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnathanaela%2Ffluentreports/lists"}