Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Dompdf Laravel Package

barryvdh/laravel-dompdf

Laravel wrapper for DOMPDF that makes generating PDFs from Blade views straightforward. Supports streaming or downloading, paper size/orientation options, and basic HTML/CSS rendering—ideal for invoices, reports, and other server-side PDF output in Laravel apps.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require barryvdh/laravel-dompdf
    

    Publish the config (if needed):

    php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider" --tag=config
    
  2. First Use Case: Generate a PDF from a Blade view:

    use Barryvdh\DomPDF\Facade\Pdf;
    
    $pdf = Pdf::loadView('pdf.invoice');
    return $pdf->download('invoice.pdf');
    
  3. Key Files:

    • config/dompdf.php (published config)
    • app/Providers/AppServiceProvider.php (registers the service provider)
    • resources/views/pdf/*.blade.php (Blade templates for PDFs)

Implementation Patterns

Core Workflows

  1. Loading Content:

    // From a Blade view
    Pdf::loadView('pdf.report', ['data' => $reportData]);
    
    // From a string
    Pdf::loadHtml('<h1>Hello World</h1>');
    
    // From a URL (if enabled)
    Pdf::load('https://example.com');
    
  2. Output Methods:

    // Download
    return Pdf::loadView('pdf.invoice')->download('invoice.pdf');
    
    // Stream to browser
    return Pdf::loadHtml('<h1>Streamed PDF</h1>')->stream('streamed.pdf');
    
    // Save to file
    $pdf = Pdf::loadView('pdf.letter');
    $pdf->save(storage_path('app/letter.pdf'));
    
    // Return as response
    return Pdf::loadHtml('<h1>Inline PDF</h1>')->setOption('isHtml5ParserEnabled', true);
    
  3. Dynamic Options:

    // Set options per instance
    $pdf = Pdf::loadView('pdf.document')
        ->setOption('defaultFont', 'Arial')
        ->setOption('isRemoteEnabled', true)
        ->setOption('isPhpEnabled', true);
    
    // Magic methods (Dompdf 2+)
    $pdf->setPaper('A4', 'portrait');
    $pdf->setPageSize('A4');
    
  4. Reusable PDF Services:

    // In a service class
    class PdfService {
        public function generateInvoice($user) {
            return Pdf::loadView('pdf.invoices.invoice', compact('user'))
                ->setOption('defaultFontSize', 10)
                ->setOption('isHtml5ParserEnabled', true);
        }
    }
    
  5. Blade Integration:

    // In a controller
    public function generateReport() {
        return Pdf::loadView('reports.detailed', [
            'report' => $this->generateReportData(),
            'logo' => asset('images/logo.png')
        ])->download('report.pdf');
    }
    
  6. Queueing PDF Generation:

    // Dispatch a job
    GeneratePdfJob::dispatch($user, 'pdf.invoice');
    
    // Job implementation
    public function handle() {
        $pdf = Pdf::loadView('pdf.invoice', ['user' => $this->user])
            ->setOption('isRemoteEnabled', true);
        Storage::put('pdfs/' . $this->filename, $pdf->output());
    }
    

Gotchas and Tips

Common Pitfalls

  1. Remote Content Security:

    • enable_remote is false by default in v3.x. Explicitly enable with:
      Pdf::setOption('isRemoteEnabled', true);
      
    • Configure allowedRemoteHosts in config/dompdf.php if needed.
  2. Data URIs:

    • Dompdf v3.x requires data:// in allowed_protocols if using data URIs (e.g., base64 images). Update config:
      'allowed_protocols' => ['http', 'https', 'ftp', 'ftps', 'data'],
      
  3. Font Issues:

    • Ensure fonts are installed or use @font-face in CSS. Common fix:
      Pdf::setOption('defaultFont', 'DejaVu Sans');
      
  4. CSS Limitations:

    • Not all CSS properties are supported. Test with:
      Pdf::setOption('isHtml5ParserEnabled', true);
      
  5. Memory Limits:

    • Large PDFs may hit memory limits. Adjust PHP memory_limit or optimize HTML/CSS.
  6. Deprecated Methods:

    • Avoid setOptions() (use setOption() for granular control).
    • orientation config is deprecated; use default_paper_orientation.

Debugging Tips

  1. Inspect Generated HTML:

    $html = view('pdf.template', $data)->render();
    $pdf = Pdf::loadHtml($html);
    

    Log $html to debug rendering issues.

  2. Check Dompdf Logs: Enable logging in config:

    'log_output' => true,
    'log_errors' => true,
    

    View logs in storage/logs/laravel.log.

  3. Validate Config: After publishing config, verify:

    config('dompdf.options');
    

Performance Optimization

  1. Cache Fonts:

    Pdf::setOption('font_cache', storage_path('fonts'));
    
  2. Disable Unused Features:

    Pdf::setOption('isPhpEnabled', false);
    Pdf::setOption('isJavascriptEnabled', false);
    
  3. Stream Directly: Avoid saving to disk for large files:

    return Pdf::loadHtml($html)->stream('large-report.pdf');
    

Extension Points

  1. Custom Dompdf Class: Bind a custom Dompdf class in AppServiceProvider:

    $this->app->bind('dompdf.wrapper', function ($app) {
        $dompdf = new \Barryvdh\DomPDF\Dompdf();
        $dompdf->setOption('defaultFont', 'YourFont');
        return $dompdf;
    });
    
  2. Middleware for PDFs: Add headers or auth checks:

    Pdf::getDompdf()->setHttpContext([
        'headers' => [
            'User-Agent' => 'Laravel-Dompdf',
        ],
    ]);
    
  3. Event Listeners: Hook into PDF generation:

    Pdf::getDompdf()->listen('start_document', function ($dompdf) {
        $dompdf->setPaper('A4', 'landscape');
    });
    
  4. Testing: Use Pdf::loadHtml() in tests:

    $pdf = Pdf::loadHtml('<h1>Test</h1>');
    $this->assertStringContainsString('Test', $pdf->output());
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
codraw/framework-extra-bundle
codraw/messenger
codraw/security
codraw/mailer
codraw/contracts
codraw/profiling
codraw/dependency-injection
codraw/tester
codraw/core
nexmo/api-specification
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony