| Install | |
|---|---|
composer require jeffersongoncalves/filament-action-export |
|
| Latest Version: | v3.6.12 |
| PHP: | ^8.2 |

Export Filament tables to CSV, XLSX and PDF with preview, print support, and full customization.
| Package Version | Filament Version | PHP |
|---|---|---|
| 1.x | 3.x | ^8.1 |
| 2.x | 4.x | ^8.2 |
| 3.x | 5.x | ^8.2 |
composer require jeffersongoncalves/filament-action-export "^3.0"
php artisan vendor:publish --tag=filament-action-export-config
php artisan vendor:publish --tag=filament-action-export-views
php artisan vendor:publish --tag=filament-action-export-lang
Add the export action to your table's bulk actions to allow users to export selected records:
use JeffersonGoncalves\FilamentExportAction\Actions\FilamentExportBulkAction;
use JeffersonGoncalves\FilamentExportAction\Enums\ExportFormat;
use JeffersonGoncalves\FilamentExportAction\ValueObjects\AdditionalColumn;
public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name'),
TextColumn::make('email'),
])
->bulkActions([
FilamentExportBulkAction::make('export')
->formats([ExportFormat::Csv, ExportFormat::Xlsx, ExportFormat::Pdf])
->defaultFormat(ExportFormat::Xlsx)
->excludeColumns(['password', 'remember_token'])
->additionalColumns([
AdditionalColumn::make('exported_at')
->defaultValue(now()->format('d/m/Y')),
])
->extraViewData(['companyName' => 'Acme Corp']),
]);
}
Add the export action to your table's header actions to export all records (respecting active filters, search, and sort):
use JeffersonGoncalves\FilamentExportAction\Actions\FilamentExportHeaderAction;
use JeffersonGoncalves\FilamentExportAction\Enums\ExportFormat;
public function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('name'),
TextColumn::make('email'),
])
->headerActions([
FilamentExportHeaderAction::make('export')
->formats([ExportFormat::Csv, ExportFormat::Xlsx, ExportFormat::Pdf])
->defaultFormat(ExportFormat::Xlsx)
->withFilters()
->withSearch()
->withSort()
->snappy()
->extraViewData(['companyName' => 'Acme Corp']),
]);
}
->formats([ExportFormat::Csv, ExportFormat::Xlsx, ExportFormat::Pdf])
->defaultFormat(ExportFormat::Xlsx)
// Custom file name
->fileName('my-report')
// File name prefix (prepended to the name)
->fileNamePrefix('users')
// Disable prefix
->disableFileNamePrefix()
// Custom time format for the filename suffix
->timeFormat('d_m_Y-H_i')
// Disable file name input in the modal
->disableFileName()
// Full control via closure
->fileNameUsing(fn ($action) => 'custom-' . now()->format('Y-m-d'))
Skip the modal form and download immediately with default settings:
->directDownload()
// Use specific columns
->columns(['id', 'name', 'email'])
// Exclude columns
->excludeColumns(['password', 'remember_token'])
// Add extra Filament Column objects
->withColumns([
TextColumn::make('full_address'),
])
// Disable the column filter checkboxes in the modal
->disableFilterColumns()
// Include hidden (toggled) columns in the export
->withHiddenColumns()
// Disable table columns entirely (use only additional columns)
->disableTableColumns()
Add extra columns with user-fillable inputs in the export modal:
->additionalColumns([
AdditionalColumn::make('exported_at')
->label('Exported At')
->defaultValue(now()->format('d/m/Y')),
AdditionalColumn::make('notes')
->label('Notes')
->defaultValue('N/A'),
])
// Disable additional columns
->disableAdditionalColumns()
Custom formatting for column values:
->formatStates([
'name' => fn ($value, $record) => strtoupper($value),
'created_at' => fn ($value) => Carbon::parse($value)->format('d/m/Y'),
'status' => fn ($value) => match ($value) {
'active' => 'Active',
'inactive' => 'Inactive',
default => $value,
},
])
->csvDelimiter(';') // Default: ','
By default, the package uses barryvdh/laravel-dompdf. You can switch to barryvdh/laravel-snappy:
composer require barryvdh/laravel-snappy
// Use Snappy
->snappy()
// Or set driver explicitly
->pdfDriver('snappy')
// Custom PDF options
->pdfOptions(['paper' => 'a4', 'orientation' => 'landscape'])
// Set default page orientation for PDF export
->defaultPageOrientation('landscape') // Default: 'portrait'
// Disable preview in the modal
->disablePreview()
// Disable print button
->disablePrint()
Customize the Excel or PDF writer before the file is generated:
// Modify the SimpleExcelWriter (CSV/XLSX)
->modifyExcelWriter(fn (SimpleExcelWriter $writer) => $writer)
// Modify the PDF instance (DomPDF or Snappy)
->modifyPdfWriter(fn ($pdf) => $pdf->setWarnings(false))
Pass additional data to the PDF/print Blade templates:
// Static array
->extraViewData(['companyName' => 'Acme Corp'])
// Dynamic closure
->extraViewData(fn ($action) => [
'recordCount' => $action->getRecords()->count(),
])
// Apply active table filters to export
->withFilters()
// Apply active search to export
->withSearch()
// Apply active sort to export
->withSort()
// Modify the query before export
->modifyQueryUsing(fn ($query) => $query->where('active', true))
// Multiple query modifications (they stack)
->modifyQueryUsing(fn ($query) => $query->where('active', true))
->modifyQueryUsing(fn ($query) => $query->where('role', 'admin'))
All options can be set globally via the config file:
// config/filament-action-export.php
return [
'pdf_driver' => env('FILAMENT_EXPORT_PDF_DRIVER', 'dompdf'),
'default_format' => env('FILAMENT_EXPORT_DEFAULT_FORMAT', 'xlsx'),
'formats' => ['csv', 'xlsx', 'pdf'],
'csv_delimiter' => ',',
'chunk_size' => 1000,
'time_format' => 'Y-m-d_H-i',
'pdf_options' => [
'paper' => 'a4',
'orientation' => 'portrait',
],
'preview_enabled' => true,
'print_enabled' => true,
'use_snappy' => false,
'disable_additional_columns'=> false,
'disable_filter_columns' => false,
'disable_file_name' => false,
'disable_file_name_prefix' => false,
'disable_preview' => false,
'icons' => [
'action' => 'heroicon-o-arrow-down-tray',
'preview' => 'heroicon-o-eye',
'export' => 'heroicon-o-arrow-down-tray',
'print' => 'heroicon-o-printer',
'cancel' => 'heroicon-o-x-circle',
],
];
After publishing the views, you can customize them:
resources/views/vendor/filament-action-export/pdf.blade.php - PDF templateresources/views/vendor/filament-action-export/print.blade.php - Print templateresources/views/vendor/filament-action-export/components/table-view.blade.php - Preview tableThe package includes translations for: English, Brazilian Portuguese, Spanish, French, German, Italian, Dutch, Arabic, and Turkish.
After publishing, add your own translations in lang/vendor/filament-action-export/.
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.