PHPackages                             samuelterra22/laravel-report-generator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. samuelterra22/laravel-report-generator

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

samuelterra22/laravel-report-generator
======================================

Rapidly Generate Simple Pdf, Excel &amp; CSV Reports on Laravel (Using Barryvdh/DomPdf or Barryvdh/laravel-snappy &amp; maatwebsite/excel)

v1.0.1(4mo ago)126.2k6[2 PRs](https://github.com/samuelterra22/laravel-report-generator/pulls)MITPHPPHP ^8.2CI passing

Since Feb 7Pushed yesterday1 watchersCompare

[ Source](https://github.com/samuelterra22/laravel-report-generator)[ Packagist](https://packagist.org/packages/samuelterra22/laravel-report-generator)[ Docs](https://github.com/samuelterra22/laravel-report-generator)[ RSS](/packages/samuelterra22-laravel-report-generator/feed)WikiDiscussions main Synced today

READMEChangelog (2)Dependencies (17)Versions (11)Used By (0)

Laravel Report Generator
========================

[](#laravel-report-generator)

 Generate PDF, Excel &amp; CSV reports from Eloquent queries with a fluent API.
 Zero boilerplate. Full control. Works with Laravel 10, 11 &amp; 12.

 [![Latest Version on Packagist](https://camo.githubusercontent.com/f15fe3e6ff07fe440f1601e02ad9aa1e22fd6a8d22bc2df8cd66afa271ecb513/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f73616d75656c746572726132322f6c61726176656c2d7265706f72742d67656e657261746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/samuelterra22/laravel-report-generator) [![Tests](https://camo.githubusercontent.com/1c33f32179a8096bf126d1f2b4d7670bb5c1dd34a4164b7bb6766d64d9eebc1e/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f73616d75656c746572726132322f6c61726176656c2d7265706f72742d67656e657261746f722f72756e2d74657374732e796d6c3f6272616e63683d6d6173746572266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/samuelterra22/laravel-report-generator/actions?query=workflow%3Arun-tests+branch%3Amaster) [![Code Style](https://camo.githubusercontent.com/28e88f442bbfb19e314108abeb0e231afcc56e53716f9466ab1701774e08eaa4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f73616d75656c746572726132322f6c61726176656c2d7265706f72742d67656e657261746f722f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d6173746572266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/samuelterra22/laravel-report-generator/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amaster) [![Total Downloads](https://camo.githubusercontent.com/f79489912a53481d4dab7239cd337f6d688acd6a5f0b7dfa044e1d92bb786e18/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f73616d75656c746572726132322f6c61726176656c2d7265706f72742d67656e657261746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/samuelterra22/laravel-report-generator) [![PHP Version](https://camo.githubusercontent.com/5d0d9e8fe2fe80b67bbf0fe402e71d82c9f445093aa35496b68dd85b4991e136/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f73616d75656c746572726132322f6c61726176656c2d7265706f72742d67656e657261746f722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/samuelterra22/laravel-report-generator) [![License](https://camo.githubusercontent.com/271f534b6b5eeb052f9674adeee651deba47507514503012ab0410eb6b2d9a14/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f73616d75656c746572726132322f6c61726176656c2d7265706f72742d67656e657261746f722e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

---

**Laravel Report Generator** is a package that lets you build PDF, Excel (XLSX), and CSV reports directly from Eloquent queries or query builders using a clean, chainable API. Define columns, format values, group rows, add totals, customize styling -- all without writing HTML tables or spreadsheet logic by hand.

**Key features:**

- **Three output formats** -- PDF, Excel (XLSX), and CSV from the same fluent interface
- **Multi-format export** -- Define a report once, export to PDF, Excel, or CSV via `ReportExporter`
- **Column formatting** -- Transform displayed values with callbacks (`displayAs`) or built-in formatters (currency, date, percentage, etc.)
- **Row grouping** -- Group rows by one or more columns with automatic subtotals
- **Advanced aggregations** -- `sum`, `avg`, `min`, `max`, and `count` in total rows
- **Conditional formatting** -- Declarative rules to style cells based on data values
- **Report events/hooks** -- Lifecycle callbacks (`onBeforeRender`, `onRow`, `onAfterRender`, `onComplete`)
- **Custom headers &amp; footers** -- Configurable content with placeholders (`{page}`, `{date}`, `{title}`)
- **Report caching** -- Cache rendered output with TTL and custom keys
- **Custom CSS** -- Inject custom styles into PDF and Excel reports
- **Memory efficient** -- Uses cursor-based iteration for large datasets
- **Customizable templates** -- Publish and modify Blade templates to fit your design
- **PDF engine flexibility** -- Works with either Snappy (wkhtmltopdf) or DomPDF

---

Table of Contents
-----------------

[](#table-of-contents)

- [Requirements](#requirements)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Output Examples](#output-examples)
- [Usage](#usage)
    - [PDF Reports](#pdf-reports)
    - [Excel Reports](#excel-reports)
    - [CSV Reports](#csv-reports)
- [API Reference](#api-reference)
    - [Initializing a Report](#initializing-a-report)
    - [Column Formatting](#column-formatting)
    - [Built-in Column Formatters](#built-in-column-formatters)
    - [Grouping &amp; Totals](#grouping--totals)
    - [Conditional Formatting](#conditional-formatting)
    - [Report Events / Hooks](#report-events--hooks)
    - [Custom Headers &amp; Footers](#custom-headers--footers)
    - [Multi-Format Export](#multi-format-export)
    - [Report Caching](#report-caching)
    - [Layout &amp; Styling](#layout--styling)
    - [Performance](#performance)
    - [Output Methods](#output-methods)
- [Configuration](#configuration)
- [Customizing Templates](#customizing-templates)
- [Testing](#testing)
- [Changelog](#changelog)
- [Contributing](#contributing)
- [Credits](#credits)
- [License](#license)

---

Requirements
------------

[](#requirements)

PHPLaravel8.2+10.x8.2+11.x8.2+12.xInstallation
------------

[](#installation)

Install the package via Composer:

```
composer require samuelterra22/laravel-report-generator
```

The service provider and facades are auto-discovered -- no manual registration needed.

### PDF engine (pick one)

[](#pdf-engine-pick-one)

To generate PDF reports, install one of the supported PDF engines:

```
# Option A: DomPDF (pure PHP, no external dependencies)
composer require barryvdh/laravel-dompdf

# Option B: Snappy (uses wkhtmltopdf, better CSS support)
composer require barryvdh/laravel-snappy
```

> If both are installed, Snappy is used by default with an automatic fallback to DomPDF.

### CSV support (optional)

[](#csv-support-optional)

```
composer require league/csv
```

Quick Start
-----------

[](#quick-start)

```
use SamuelTerra22\ReportGenerator\Facades\PdfReport;

public function usersReport()
{
    $query = User::select(['name', 'email', 'city', 'balance'])
                 ->orderBy('city');

    return PdfReport::of('Users Report', ['Date' => now()->format('d M Y')], $query, [
            'Name'    => 'name',
            'Email'   => 'email',
            'City'    => 'city',
            'Balance' => 'balance',
        ])
        ->editColumn('Balance', [
            'displayAs' => fn ($result) => '$' . number_format((float) $result->balance, 2),
        ])
        ->showTotal(['Balance' => 'point'])
        ->groupBy('City')
        ->stream();
}
```

This generates a paginated PDF report with rows grouped by city, formatted currency values, and automatic totals per group.

---

Output Examples
---------------

[](#output-examples)

### Report with Grand Total

[](#report-with-grand-total)

A report using `showTotal()` to display an automatic sum at the bottom:

 [![PDF report with grand total row](screenshots/report-with-total.png)](screenshots/report-with-total.png)

### Report with Group By

[](#report-with-group-by)

A report using `groupBy()` combined with `showTotal()` -- rows are grouped by date, with subtotals after each group and a final grand total:

 [![PDF report with group by and subtotals](screenshots/report-with-group-by.png)](screenshots/report-with-group-by.png)

---

Usage
-----

[](#usage)

### PDF Reports

[](#pdf-reports)

```
use SamuelTerra22\ReportGenerator\Facades\PdfReport;

$query = User::select(['name', 'email', 'city', 'balance']);

// Render and return the PDF response
$pdf = PdfReport::of('Sales Report', ['Period' => 'Jan 2025'], $query, [
        'Name'    => 'name',
        'Email'   => 'email',
        'City'    => 'city',
        'Balance' => 'balance',
    ])
    ->editColumn('Balance', [
        'class'     => 'right',
        'displayAs' => fn ($result) => number_format((float) $result->balance, 2),
    ])
    ->showTotal(['Balance' => 'point'])
    ->groupBy('City')
    ->setPaper('a4')
    ->setOrientation('landscape')
    ->setCss([
        '.head-content' => 'border-bottom: 2px solid #333;',
    ])
    ->make();
```

**Output methods for PDF:**

MethodDescription`make()`Returns the PDF object (for further manipulation)`stream()`Displays the PDF inline in the browser`download($filename)`Forces a file download (`.pdf` extension added automatically)### Excel Reports

[](#excel-reports)

```
use SamuelTerra22\ReportGenerator\Facades\ExcelReport;

$query = User::select(['name', 'email', 'balance']);

// Standard version (uses Blade template)
ExcelReport::of('Financial Report', ['Quarter' => 'Q1 2025'], $query, [
        'Name'    => 'name',
        'Email'   => 'email',
        'Balance' => 'balance',
    ])
    ->editColumn('Balance', [
        'displayAs' => fn ($result) => number_format((float) $result->balance, 2),
    ])
    ->showTotal(['Balance' => 'point'])
    ->download('financial-report');
```

**Simple version** (direct sheet manipulation, better for large datasets):

```
ExcelReport::of('Financial Report', ['Quarter' => 'Q1 2025'], $query, [
        'Name'    => 'name',
        'Email'   => 'email',
        'Balance' => 'balance',
    ])
    ->showTotal(['Balance' => 'point'])
    ->simple()
    ->download('financial-report');
```

**Output methods for Excel:**

MethodDescription`make()`Returns the Excel object for further manipulation`download($filename)`Exports and downloads the XLSX file`simpleDownload($filename)`Forces simple mode and downloads### CSV Reports

[](#csv-reports)

```
use SamuelTerra22\ReportGenerator\Facades\CsvReport;

$query = User::select(['name', 'email', 'balance']);

CsvReport::of('User Export', ['Date' => now()->format('d M Y')], $query, [
        'Name'    => 'name',
        'Email'   => 'email',
        'Balance' => 'balance',
    ])
    ->editColumn('Balance', [
        'displayAs' => fn ($result) => number_format((float) $result->balance, 2),
    ])
    ->download('user-export');
```

> Requires `league/csv`. The `.csv` extension is added automatically.

**Output methods for CSV:**

MethodDescription`download($filename)`Outputs the CSV file for download---

API Reference
-------------

[](#api-reference)

### Initializing a Report

[](#initializing-a-report)

```
PdfReport::of(string $title, array $meta, $query, array $columns)
```

ParameterTypeDescription`$title``string`Report title displayed in the header`$meta``array`Key-value pairs shown below the title (e.g., date range, filters)`$query``Builder|EloquentBuilder`The query to iterate over`$columns``array`Column mapping: `['Display Name' => 'db_column']`**Column mapping** supports two formats:

```
// Explicit mapping
$columns = [
    'Full Name' => 'name',
    'Email'     => 'email',
];

// Automatic mapping (column name is converted to snake_case for the DB field)
$columns = ['Name', 'Email']; // maps to 'name', 'email'

// Closure-based columns (computed values)
$columns = [
    'Full Name' => fn ($row) => $row->first_name . ' ' . $row->last_name,
    'Email'     => 'email',
];
```

### Column Formatting

[](#column-formatting)

#### `editColumn(string $columnName, array $options)`

[](#editcolumnstring-columnname-array-options)

Customize how a column is displayed:

```
->editColumn('Balance', [
    'class'     => 'right bold',   // CSS class for the column (PDF/Excel)
    'displayAs' => fn ($result) => '$' . number_format((float) $result->balance, 2),
])
```

OptionTypeDescription`class``string`CSS class applied to the column cells (`left`, `right`, `bold`)`displayAs``Closure|string`Callback receiving the full row, or a static string value#### `editColumns(array $columnNames, array $options)`

[](#editcolumnsarray-columnnames-array-options)

Apply the same formatting to multiple columns at once:

```
->editColumns(['Price', 'Tax', 'Total'], [
    'class'     => 'right',
    'displayAs' => fn ($result, $colName) => number_format((float) $result->{strtolower($colName)}, 2),
])
```

### Built-in Column Formatters

[](#built-in-column-formatters)

Use `formatColumn()` for common formatting without writing closures. If a column has both `editColumn` with `displayAs` and `formatColumn`, the `displayAs` callback takes priority.

#### `formatColumn(string $columnName, string $type, array $options = [])`

[](#formatcolumnstring-columnname-string-type-array-options--)

```
->formatColumn('price', 'currency', ['prefix' => 'R$', 'decimals' => 2])
->formatColumn('created_at', 'date', ['format' => 'd/m/Y'])
->formatColumn('rate', 'percentage', ['decimals' => 1])
->formatColumn('active', 'boolean', ['true' => 'Active', 'false' => 'Inactive'])
->formatColumn('quantity', 'number', ['decimals' => 0, 'thousands_separator' => '.'])
```

#### `formatColumns(array $columnNames, string $type, array $options = [])`

[](#formatcolumnsarray-columnnames-string-type-array-options--)

Apply the same formatter to multiple columns:

```
->formatColumns(['Price', 'Total'], 'currency', ['prefix' => '$'])
```

**Available format types:**

TypeOptionsDefault output`currency``prefix` (`$`), `decimals` (`2`), `decimal_separator` (`.`), `thousands_separator` (`,`)`$ 1,234.56``number``decimals` (`0`), `decimal_separator` (`.`), `thousands_separator` (`,`)`1,235``date``format` (`Y-m-d`)`2025-01-15``datetime``format` (`Y-m-d H:i:s`)`2025-01-15 14:30:00``percentage``decimals` (`1`), `suffix` (`%`)`75.0%``boolean``true` (`Yes`), `false` (`No`)`Yes` / `No`### Grouping &amp; Totals

[](#grouping--totals)

#### `groupBy(string|array $column)`

[](#groupbystringarray-column)

Group rows by one or more columns. When the group value changes, a subtotal row is inserted:

```
// Single group
->groupBy('City')

// Multiple groups
->groupBy(['Country', 'City'])
```

#### `showTotal(array $columns)`

[](#showtotalarray-columns)

Display totals for numeric columns. Each entry maps a column name to a display type:

```
->showTotal([
    'Balance'  => 'point',       // Shows: 1,234.56
    'Quantity' => 'QTY',         // Shows: QTY 1,234.56
    'Revenue'  => 'USD',         // Shows: USD 1,234.56
])
```

TypeOutput format`'point'``1,234.56` (number only)Any string`PREFIX 1,234.56` (uppercased prefix + number)**Advanced aggregation types** -- beyond `sum`, you can use:

```
->showTotal([
    'amount'   => 'sum',       // Sum of all values (default)
    'quantity' => 'avg',       // Average
    'price'    => 'max',       // Maximum value
    'discount' => 'min',       // Minimum value
    'orders'   => 'count',     // Number of rows
    'balance'  => 'point',     // Sum, displayed without a label prefix
])
```

AggregationDescription`sum`Sum of all values (default for unknown types)`avg`Arithmetic mean`min`Minimum value`max`Maximum value`count`Number of rows`point`Same as `sum`, but displayed without a label prefix### Conditional Formatting

[](#conditional-formatting)

Apply CSS styles to cells based on their values. In PDF/Excel reports the styles are applied as inline CSS. CSV reports ignore formatting gracefully.

#### `conditionalFormat(string $columnName, callable $condition, array $styles)`

[](#conditionalformatstring-columnname-callable-condition-array-styles)

```
->conditionalFormat('amount', fn ($value) => $value > 1000, [
    'class'      => 'bold',
    'background' => '#ffcccc',
])
->conditionalFormat('status', fn ($value) => $value === 'Overdue', [
    'color'       => '#ff0000',
    'font-weight' => 'bold',
])
```

The condition callback receives `($cellValue, $rowObject)`, so you can also style based on other columns:

```
->conditionalFormat('name', fn ($value, $row) => $row->balance < 0, [
    'color' => 'red',
])
```

### Report Events / Hooks

[](#report-events--hooks)

Register callbacks that fire at specific points in the report lifecycle. Useful for logging, progress tracking, auditing, and post-processing.

```
->onBeforeRender(function () {
    Log::info('Report generation started');
})
->onRow(function ($row, int $index) {
    // Fires for each row -- useful for progress tracking.
})
->onAfterRender(function () {
    Log::info('Report rendering complete');
})
->onComplete(function () {
    Notification::send($admin, new ReportReadyNotification);
})
```

Multiple callbacks can be registered for the same event -- they fire in registration order.

### Custom Headers &amp; Footers

[](#custom-headers--footers)

Customize the header and footer content of PDF reports. Supports positional placement and placeholders.

#### `setHeaderContent(string $content, string $position = 'center')`

[](#setheadercontentstring-content-string-position--center)

```
->setHeaderContent('Company Report', 'center')
->setHeaderContent('Confidential', 'left')
```

#### `setFooterContent(string $content, string $position = 'center')`

[](#setfootercontentstring-content-string-position--center)

```
->setFooterContent('Page {page} of {pages}', 'right')
->setFooterContent('Printed: {date}', 'left')
```

#### `clearHeader()` / `clearFooter()`

[](#clearheader--clearfooter)

Remove all header or footer content:

```
->clearFooter()  // No footer
```

**Available placeholders:**

PlaceholderDescription`{page}`Current page number`{pages}`Total page count`{date}`Current date (`Y-m-d`)`{title}`Report title**Defaults:**

```
// Footer defaults (matches previous behavior)
'left'  => 'Date Printed: {date}'
'right' => 'Page {page} of {pages}'

// Header defaults: empty (no header)
```

### Multi-Format Export

[](#multi-format-export)

Define a report once and export to multiple formats without duplicating configuration. Use `ReportExporter` to build the report, then call `toPdf()`, `toExcel()`, or `toCsv()`.

```
use SamuelTerra22\ReportGenerator\Facades\ReportExporter;

$exporter = ReportExporter::of('Sales Report', $meta, $query, $columns)
    ->editColumn('amount', ['displayAs' => fn ($r) => '$' . $r->amount])
    ->formatColumn('date', 'date', ['format' => 'd/m/Y'])
    ->showTotal(['amount' => 'sum'])
    ->groupBy('region');

// Export to any format from the same definition:
$pdf   = $exporter->toPdf()->make();
$excel = $exporter->toExcel()->download('report');
$csv   = $exporter->toCsv()->download('report');
```

`ReportExporter` supports all the same fluent methods as the individual report classes (`editColumn`, `formatColumn`, `groupBy`, `showTotal`, `conditionalFormat`, `cacheFor`, etc.).

### Report Caching

[](#report-caching)

Cache the rendered report output to avoid re-rendering on repeated requests. Cached HTML is stored via Laravel's cache system.

#### `cacheFor(int $minutes)`

[](#cacheforint-minutes)

Enable caching with a TTL in minutes:

```
PdfReport::of(...)->cacheFor(60)->make();
```

#### `cacheAs(string $key)`

[](#cacheasstring-key)

Set a custom cache key (otherwise an auto-generated key based on title, columns, meta, limit, and groupBy is used):

```
->cacheFor(60)->cacheAs('monthly-sales-report')
```

#### `cacheUsing(string $store)`

[](#cacheusingstring-store)

Use a specific cache store (e.g., `redis`, `file`, `array`):

```
->cacheFor(60)->cacheUsing('redis')
```

#### `noCache()`

[](#nocache)

Explicitly disable caching (useful to override a previously set `cacheFor`):

```
->cacheFor(60)->noCache()  // Caching disabled
```

> On cache hit, the template rendering step is skipped entirely and the cached HTML is loaded directly into the PDF/CSV engine.

### Layout &amp; Styling

[](#layout--styling)

#### `setPaper(string $size)` *(PDF only)*

[](#setpaperstring-size-pdf-only)

Set the paper size. Default: `a4`.

```
->setPaper('letter')  // letter, legal, a3, a4, a5, etc.
```

#### `setOrientation(string $orientation)` *(PDF only)*

[](#setorientationstring-orientation-pdf-only)

Set page orientation. Default: `portrait`.

```
->setOrientation('landscape')
```

#### `setCss(array $styles)` *(PDF &amp; Excel)*

[](#setcssarray-styles-pdf--excel)

Inject custom CSS rules into the report template:

```
->setCss([
    '.table'    => 'font-size: 11px;',
    'th'        => 'background-color: #4472C4; color: white;',
    'tr.even'   => 'background-color: #D9E2F3;',
])
```

#### `showHeader(bool $value = true)`

[](#showheaderbool-value--true)

Show or hide the column header row. Default: `true`.

```
->showHeader(false)
```

#### `showMeta(bool $value = true)`

[](#showmetabool-value--true)

Show or hide the meta information section. Default: `true` (except CSV, which defaults to `false`).

```
->showMeta(false)
```

#### `showNumColumn(bool $value = true)`

[](#shownumcolumnbool-value--true)

Show or hide the auto-incrementing row number column (`No`). Default: `true`.

```
->showNumColumn(false)
```

### Performance

[](#performance)

#### `limit(int $n)`

[](#limitint-n)

Limit the number of rows processed:

```
->limit(500)
```

#### `withoutManipulation()`

[](#withoutmanipulation)

Skip column editing logic entirely for faster generation. Uses a simpler template that renders raw column values:

```
->withoutManipulation()
```

#### `simple()` *(Excel only)*

[](#simple-excel-only)

Use direct sheet manipulation instead of Blade template rendering. Better for large datasets:

```
->simple()
```

---

Configuration
-------------

[](#configuration)

Publish the config file:

```
php artisan vendor:publish --tag="report-generator-config"
```

This creates `config/report-generator.php`:

```
return [
    'flush'        => false,  // Enable output buffering flush during report generation
    'cache_store'  => null,   // Default cache store (null = Laravel default)
    'cache_prefix' => 'report-generator', // Prefix for auto-generated cache keys
];
```

Customizing Templates
---------------------

[](#customizing-templates)

Publish the Blade templates to customize the report layout:

```
php artisan vendor:publish --tag="report-generator-views"
```

This publishes four templates to `resources/views/vendor/laravel-report-generator/`:

TemplateUsed by`general-pdf-template.blade.php`PDF reports with column manipulation`general-excel-template.blade.php`Excel reports with column manipulation`without-manipulation-pdf-template.blade.php`PDF reports using `withoutManipulation()``without-manipulation-excel-template.blade.php`Excel reports using `withoutManipulation()`---

Testing
-------

[](#testing)

```
composer test
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Contributions are welcome! Please feel free to submit a Pull Request.

Credits
-------

[](#credits)

- [Samuel Terra](https://github.com/samuelterra22)
- [All Contributors](../../contributors)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

49

—

FairBetter than 94% of packages

Maintenance88

Actively maintained with recent releases

Popularity31

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

2

Last Release

145d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/11915449?v=4)[Samuel Terra](/maintainers/samuelterra22)[@samuelterra22](https://github.com/samuelterra22)

---

Top Contributors

[![samuelterra22](https://avatars.githubusercontent.com/u/11915449?v=4)](https://github.com/samuelterra22 "samuelterra22 (31 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (27 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (25 commits)")[![dependabot-preview[bot]](https://avatars.githubusercontent.com/in/2141?v=4)](https://github.com/dependabot-preview[bot] "dependabot-preview[bot] (1 commits)")[![heidilux](https://avatars.githubusercontent.com/u/5248157?v=4)](https://github.com/heidilux "heidilux (1 commits)")

---

Tags

csvreportdompdfexcelexcelreportgeneratorlaravelpdfpdf-documentpdf-generationpdfreportreportssnappylaravelpdfexcelcsvreportreport generator

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/samuelterra22-laravel-report-generator/health.svg)

```
[![Health](https://phpackages.com/badges/samuelterra22-laravel-report-generator/health.svg)](https://phpackages.com/packages/samuelterra22-laravel-report-generator)
```

###  Alternatives

[maatwebsite/excel

Supercharged Excel exports and imports in Laravel

12.9k157.3M894](/packages/maatwebsite-excel)[rap2hpoutre/fast-excel

Fast Excel import/export for Laravel

2.3k27.0M52](/packages/rap2hpoutre-fast-excel)[jimmyjs/laravel-report-generator

Rapidly Generate Simple Pdf &amp; Excel Report on Laravel 5 (Using Barryvdh/DomPdf or Barryvdh/laravel-snappy &amp; maatwebsite/excel)

580165.5k1](/packages/jimmyjs-laravel-report-generator)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

816333.8k3](/packages/defstudio-telegraph)[harris21/laravel-fuse

Circuit breaker for Laravel queue jobs. Protect your workers from cascading failures.

44855.7k](/packages/harris21-laravel-fuse)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5021.9k](/packages/simplestats-io-laravel-client)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
