Installation Add the bundle to your Laravel project via Composer:
composer require docdigital/pdf-manager-bundle
Register the bundle in config/bundles.php (Symfony) or ensure autoloading is configured for Laravel (if used outside Symfony).
First Use Case
Inject the PdfManager service into a controller or service:
use DocDigital\PdfManagerBundle\PdfManager;
public function __construct(private PdfManager $pdfManager) {}
Merge two PDFs:
$mergedPdf = $this->pdfManager->merge(['file1.pdf', 'file2.pdf']);
$mergedPdf->saveAs('merged_output.pdf');
Split a PDF into pages:
$pages = $this->pdfManager->split('input.pdf');
foreach ($pages as $page) {
$page->saveAs("page_{$page->getPageNumber()}.pdf");
}
Key Files
src/PdfManager.php: Core logic for merging/splitting.tests/: Unit tests for reference (if available).Batch Processing Use loops for large-scale operations (e.g., splitting a 100-page PDF):
$pages = $this->pdfManager->split('large_file.pdf');
foreach ($pages as $page) {
$this->processPage($page); // Custom logic
}
Streaming Large Files Avoid memory issues by streaming PDFs directly to storage:
$mergedPdf = $this->pdfManager->merge($files);
$mergedPdf->saveToStream(function ($chunk) {
// Send chunk to client or write to disk
});
Integration with Storage
Combine with Laravel’s Storage facade for cloud storage (S3, etc.):
use Illuminate\Support\Facades\Storage;
$path = Storage::disk('s3')->path('input.pdf');
$pages = $pdfManager->split($path);
if (!$this->pdfManager->isValidPdf($filePath)) {
throw new \InvalidArgumentException('Invalid PDF file.');
}
try {
$mergedPdf = $pdfManager->merge($files);
} catch (\Exception $e) {
Log::error("PDF merge failed: " . $e->getMessage());
}
Memory Limits
memory_limit. Increase it or stream results:
memory_limit = 512M
saveToStream() for large files to avoid loading entire PDFs into memory.File Paths
storage_path() or public_path() helpers:
$file = $pdfManager->merge([storage_path('file1.pdf'), storage_path('file2.pdf')]);
Dependency Conflicts
setasign/fpdf or similar. Check for version conflicts in composer.json.Permissions
storage:link if needed.$pdfManager->setDebug(true); // If supported (check bundle docs)
$pdfManager->setOutputFormat('encrypted');
$pdfManager->merge($files)->then(function ($pdf) {
// Post-merge logic
});
config/packages/docdigital_pdf_manager.yaml (if available) or environment variables.php artisan pdf:merge file1.pdf file2.pdf output.pdf
PdfMergeJob::dispatch($files, 'output.pdf')->onQueue('pdf');
How can I help you explore Laravel packages today?