Wybór generatora PDF dla Laravel

2 min. czytaniaZaktualizowano

Generowanie PDF jest decyzją o renderowaniu i operacjach, nie konkursem popularności paczek.

PotrzebaDomyślny wybórKompromis
Proste faktury i tabeleDompdfOgraniczony nowy CSS
HTML/CSS jakości przeglądarkispatie/laravel-pdf + BrowsershotRuntime Node i Chrome
Wspólny Chrome lub konwersja OfficeGotenbergUtrzymywana usługa HTTP

Dompdf jest opcją bez dodatkowej usługi dla prostych dokumentów. Dla layoutów produktu spatie/laravel-pdf to nowoczesny domyślny wybór Laravela, gdy dostępny jest Chrome. Gotenberg przenosi Chromium lub LibreOffice za prywatną granicę HTTP, co pasuje do wielu aplikacji i formatów biurowych.

php
<?php

declare(strict_types=1);

use Spatie\LaravelPdf\Facades\Pdf;

return Pdf::view('pdf.invoice', ['invoice' => $invoice])->format('a4')->download();

Renderuj zaufane template'y z zaufanymi danymi, nie dowolny HTML. Allowlistuj hosty i blokuj prywatne zakresy, jeśli renderer pobiera URL, inaczej powstaje SSRF. Kosztowne PDF umieść w kolejce, przechowuj prywatnie, autoryzuj pobranie i zapisuj czas, wersję template oraz błędy. Test wizualnego fixture wykrywa regresję layoutu, której nie wykryje 200.

Wybór i wydajność renderera

PotrzebaWybórGranica
Prosta fakturaDompdfPHP-only, ograniczony CSS
Nowoczesny layoutspatie/laravel-pdfUtrzymywany Chromium
Wspólny rendererGotenbergPrywatny HTTP i health checki

Dompdf nie stanie się przeglądarką przez obejścia CSS. Browsershot wymaga Chrome, a Gotenberg wymaga prywatnej sieci i capacity planning.

php
<?php

declare(strict_types=1);

use App\\Models\\Invoice;
use Barryvdh\\DomPDF\\Facade\\Pdf;
use Illuminate\\Http\\Response;

final class DownloadInvoiceController
{
    public function __invoke(Invoice $invoice): Response
    {
        $this->authorize('view', $invoice);
        return Pdf::loadView('pdf.invoices.show', ['invoice' => $invoice])->setPaper('a4')->download("invoice-{$invoice->number}.pdf");
    }
}

Kolejkuj dokumenty wsadowe, ogranicz współbieżność do renderera i zapisuj wynik prywatnie po autoryzacji. Wersjonowany fixture wizualny wykrywa layout, czego nie dowodzi 200.

Kiedy tego NIE używać

Nie uruchamiaj headless Chrome synchronicznie w checkout. Nie dodawaj Gotenberg dla jednej prostej faktury, jeśli wystarcza Dompdf, i nie walcz z Dompdf dniami, gdy wymagany jest CSS przeglądarki. Wybierz najmniejszy system spełniający fidelity, throughput i odtwarzanie.

Powiązane artykuły

Wsparcie istniejącego systemu

Potrzebujesz pomocy z działającą aplikacją?

Pomagam firmom rozwijać działające systemy, porządkować wdrożenia i dodawać nowe funkcje bez dokładania chaosu do projektu.

Komentarze (0)
Zaloguj się, aby dodać komentarz

Musisz być zalogowany, aby dodać komentarz.

Zaloguj się

Potrzebujesz kogoś, kto weźmie odpowiedzialność za kolejny krok?

Porozmawiajmy o Twoim projekcie i określmy zakres, który ma sens dla Twoich celów.