Filament Action Export
#Filament Action Export
Export Filament tables to CSV, XLSX and PDF with preview, print support, and full customization.
#Compatibility
#Installation
composer require jeffersongoncalves/filament-action-export "^3.0"
#Publish config (optional)
php artisan vendor:publish --tag=filament-action-export-config
#Publish views (optional)
php artisan vendor:publish --tag=filament-action-export-views
#Publish translations (optional)
php artisan vendor:publish --tag=filament-action-export-translations
#Usage
#Bulk Action
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']), ]); }
#Header Action
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']), ]); }
#Configuration Options
#Formats
->formats([ExportFormat::Csv, ExportFormat::Xlsx, ExportFormat::Pdf]) ->defaultFormat(ExportFormat::Xlsx)
#File Name
// 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'))
#Direct Download
Skip the modal form and download immediately with default settings:
->directDownload()
#Columns
// 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()
#Additional Columns
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()
#Format States
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, }, ])
#CSV Delimiter
->csvDelimiter(';') // Default: ','
#PDF Driver
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'])
#Page Orientation
// Set default page orientation for PDF export ->defaultPageOrientation('landscape') // Default: 'portrait'
#Preview & Print
// Disable preview in the modal ->disablePreview() // Disable print button ->disablePrint()
#Writer Callbacks
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))
#Extra View Data
Pass additional data to the PDF/print Blade templates:
// Static array ->extraViewData(['companyName' => 'Acme Corp']) // Dynamic closure ->extraViewData(fn ($action) => [ 'recordCount' => $action->getRecords()->count(), ])
#Header Action Specific Options
// 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'))
#Config File
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', ], ];
#Customizing Views
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 table
#Translations
The 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/.
#Testing
composer test
#Changelog
Please see CHANGELOG for more information on what has changed recently.
#Contributing
Please see CONTRIBUTING for details.
#Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
#Credits
#License
The MIT License (MIT). Please see License File for more information.