mostafaznv/pdf-optimizer
Optimize and compress PDFs in PHP or Laravel using Ghostscript. Fluent, chainable API with rich options, logging, and customization. Laravel-friendly inputs (paths, uploads, disks) plus queue support for async optimization.
->settings()->optimize()), which aligns with Laravel’s expressive syntax.vendor:publish for config (standard Laravel workflow).PdfOptimizer::fromDisk()->open()->optimize()) reduces boilerplate.| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Ghostscript Licensing | High | Audit AGPL/commercial license compliance early. Use Ghostscript’s commercial license if AGPL conflicts with proprietary software. |
| Windows Support | Medium | Test in staging; document workarounds (e.g., WSL, custom paths). |
| Queue Job Failures | Medium | Implement retry logic (Laravel’s retryAfter) and dead-letter queues for failed optimizations. |
| Large File Handling | Medium | Monitor memory usage; consider chunked processing for >100MB files. |
| Customization Complexity | Low | Document default settings (e.g., PdfSettings::SCREEN) to avoid over-engineering. |
PdfSettings::PRINT vs. SCREEN.)Storage facade for disk-agnostic I/O (e.g., fromDisk('s3')->toDisk('local')).PdfOptimizer::dispatch() for background jobs (pair with shouldQueue() in jobs).PdfOptimizer class but handle file paths manually (higher boilerplate).imagemagick).| Component | Compatibility Notes |
|---|---|
| Laravel Versions | Tested with Laravel 10+ (PHP 8.2+). For Laravel 9, check composer.json constraints. |
| Ghostscript | Requires v9+. Verify version with gs --version in CI/CD. |
| Storage Drivers | Supports all Laravel disks (local, S3, FTP, etc.). |
| Windows | Untested; may need custom binary path in config. |
php artisan vendor:publish --provider="Mostafaznv\PdfOptimizer\PdfOptimizerServiceProvider".Dompdf or Laravel Snappy).// In a controller or job
$result = PdfOptimizer::fromDisk('public')
->open('original.pdf')
->settings(PdfSettings::SCREEN)
->optimize('optimized.pdf');
dispatch():
OptimizePdfJob::dispatch($uploadedFile)->onQueue('optimizations');
before_size, after_size, duration) to Laravel Logs or Datadog.config/pdf-optimizer.php).config['binary_path'] and system PATH.www-data) can write to storage.memory_limit in PHP or use PdfSettings::PRINT for lighter compression.'log_optimization' => true) to trace Ghostscript commands.Ghostscript::getCommand() to inspect the exact CLI call.pdfcpu) exist but may require rewrites.optimizations queue length; add more workers if >100 jobs pending.memory_limit. Test with ini_set('memory_limit', '512M').| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Ghostscript crashes | Failed optimizations | Retry with exponential backoff (Laravel’s |
How can I help you explore Laravel packages today?