mdigi / laravel-jasper-client
Laravel package wrapper for Jasper Reporting Engine REST API
Package info
github.com/mahakadigitalindonesia/laravel-jasper-client
pkg:composer/mdigi/laravel-jasper-client
Requires
- php: ^8.0.2
- guzzlehttp/guzzle: ^7.0
- illuminate/http: ^9.0|^10.0|^11.0|^12.0
- illuminate/support: ^9.0|^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^7.0|^8.0|^9.0|^10.0
- phpunit/phpunit: ^9.6|^10.5|^11.0
README
Laravel package (standalone) sebagai wrapper HTTP untuk Jasper Reporting Engine REST API.
Installation
Tambahkan via Composer (path repo atau VCS sesuai setup kamu), lalu jalankan:
composer require mdigi/laravel-jasper-client
Configuration
Publish config:
php artisan vendor:publish --tag=jasper-config
Env yang didukung:
- Base
JASPER_BASE_URL(defaulthttp://localhost:8080)JASPER_TIMEOUT(detik, default30)JASPER_RETRY_TIMES(default0)JASPER_RETRY_SLEEP_MS(default0)
- Auth
JASPER_AUTH_TYPE(none|basic|bearer, defaultnone)JASPER_USERNAME(basic)JASPER_PASSWORD(basic)JASPER_TOKEN(bearer)
- Endpoint map
JASPER_ENDPOINT_UPLOAD_TEMPLATE(default/api/v1/templates)JASPER_ENDPOINT_GENERATE_ASYNC(default/api/v1/reports/jobs)JASPER_ENDPOINT_GENERATE_STATUS(default/api/v1/reports/jobs/{job_id})JASPER_ENDPOINT_DOWNLOAD_REPORT(default/api/v1/reports/jobs/{job_id}/download)JASPER_ENDPOINT_DATASOURCES(default/api/v1/datasources)
Usage
Facade (recommended, explicit import):
use Mdigi\LaravelJasper\Facades\Jasper; $resp = Jasper::listDataSources();
Global short alias Jasper (optional):
- Package discovery now provides alias mapping via
composer.json(extra.laravel.aliases). - If your app disables discovery, add alias manually in
config/app.php:
'aliases' => [ // ... 'Jasper' => Mdigi\LaravelJasper\Facades\Jasper::class, ],
Via dependency injection:
use Mdigi\LaravelJasper\Contracts\JasperClientInterface; public function __construct(private JasperClientInterface $jasper) {}
IDE Autocomplete (Jasper::)
This package adds facade type metadata so static autocomplete can resolve methods from JasperClientInterface.
If autocomplete is not refreshed yet in your app:
composer dump-autoload
Then reload your IDE window or restart the PHP language server (Intelephense / PHPStorm indexer).
uploadTemplate
$upload = Jasper::uploadTemplate(storage_path('app/templates/invoice.jrxml'), 'invoice_template');
generateAsync
use Mdigi\LaravelJasper\DTO\SubmitJobRequest; $job = Jasper::generateAsync(new SubmitJobRequest( templateId: 'tpl-001', outputFormat: 'pdf', dataSourceKey: 'main-db', sqlQuery: 'SELECT * FROM invoices WHERE id = :id', reportParams: ['id' => 1001], ));
getGenerationStatus
$status = Jasper::getGenerationStatus('job-123');
downloadGeneratedReport
$binary = Jasper::downloadGeneratedReport('job-123'); file_put_contents(storage_path('app/reports/invoice.pdf'), $binary);
listDataSources
$items = Jasper::listDataSources(); // array<DataSourceItem>
Error Handling
use Mdigi\LaravelJasper\Exceptions\JasperConfigurationException; use Mdigi\LaravelJasper\Exceptions\JasperRequestException; try { $items = Jasper::listDataSources(); } catch (JasperConfigurationException $e) { // env/config salah } catch (JasperRequestException $e) { // request ke Jasper gagal / non-2xx }
Full Async Flow Example
- Upload template
- Submit job async
- Poll status sampai
FINISHED - Download report
Testing
Run:
vendor/bin/phpunit
Compatibility
Planned compatibility matrix:
- Laravel 9.x (min PHP 8.0.2)
- Laravel 10.x (min PHP 8.1.0)
- Laravel 11.x (min PHP 8.2.0)
- Laravel 12.x (min PHP 8.2.0)
Catatan: package ditulis kompatibel PHP 8.0 syntax supaya tetap install di Laravel 9.
Docker Testing
Lihat Dockerfile, docker-compose.yml, dan .env.testing.example.