Przejdź do głównej zawartości

Dokumentacja API Laravela

Pakiet nextpdf/laravel łączy niezależny od frameworka rdzeń NextPDF z aplikacją Laravel. Bezpośrednio korzysta się z czterech punktów wejścia: fasady Pdf do krótkich przepływów tworzenia dokumentów, powiązania kontenera PdfDocumentInterface do wstrzykiwanego tworzenia dokumentów, pomocnika PdfResponse do odpowiedzi HTTP z gotowych dokumentów oraz zadania kolejki GeneratePdfJob do generowania poza cyklem obsługi żądania. Dostawca NextPdfServiceProvider rejestruje wszystkie powiązania i jest wykrywany automatycznie, więc ręczna konfiguracja nie jest potrzebna. Konfiguracja w pliku config/nextpdf.php steruje ustawieniami domyślnymi, czcionkami, kolejkami oraz opcjonalnymi funkcjami podpisywania i urzędu znaczników czasu (TSA).

Zacznij tutaj: aby wysłać plik w formacie Portable Document Format (PDF) bezpośrednio z kontrolera, zbuduj dokument i zwróć PdfResponse::download($document, 'file.pdf'). Pierwszy przykład poniżej pokazuje ten przepływ.

Poniższe fragmenty kodu obejmują trzy przepływy, po które zwykle sięga się najpierw. Każdy fragment jest zweryfikowany ze źródłem pakietu; dalej znajdują się pełne tabele dla poszczególnych symboli.

Zwróć z kontrolera plik PDF do pobrania. To najczęstsze zadanie:

<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use Illuminate\Http\Response;
use NextPDF\Contracts\PdfDocumentInterface;
use NextPDF\Laravel\Http\PdfResponse;
final class ReportController extends Controller
{
public function download(PdfDocumentInterface $document): Response
{
$document->addPage();
$document->cell(0, 10, 'Monthly report', newLine: true);
return PdfResponse::download($document, 'report.pdf');
}
}

Co robi: wstrzykuje nowy dokument, zapisuje jeden wiersz i zwraca odpowiedź typu attachment z nagłówkiem Content-Type: application/pdf oraz nagłówkami bezpieczeństwa Open Worldwide Application Security Project (OWASP). Użyj inline() zamiast download(), aby wyświetlić podgląd w przeglądarce.

Twórz i zapisuj za pomocą fasady Pdf. To najkrótsza droga dla skryptów i krótkich przepływów:

<?php
declare(strict_types=1);
use NextPDF\Laravel\Facades\Pdf;
Pdf::addPage();
Pdf::cell(0, 10, 'Hello from Laravel', newLine: true);
Pdf::save(storage_path('app/hello.pdf'));

Co robi: fasada rozwiązuje nowy dokument z kontenera, dodaje jedną komórkę i zapisuje ukończony plik PDF na dysku.

Wygeneruj plik PDF poza wątkiem żądania za pomocą GeneratePdfJob:

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
use NextPDF\Laravel\Jobs\GeneratePdfJob;
GeneratePdfJob::dispatch(
storage_path('app/reports/january-2026.pdf'),
static fn (PdfDocumentInterface $document): PdfDocumentInterface => $document
->addPage()
->cell(0, 10, 'January report', newLine: true),
);

Co robi: umieszcza generowanie w kolejce dla procesu roboczego. Domknięcie budujące otrzymuje dokument rozwiązany z kontenera i go zwraca. Zadanie waliduje ścieżkę wyjściową .pdf przed zapisem. Nazwa kolejki, limit czasu i połączenie pochodzą z config('nextpdf.queue.*').

Fasada Pdf statycznie deleguje wywołania do nowego rdzeniowego obiektu Document. Używaj jej w krótkich przepływach kontrolera, gdy styl statyczny jest czytelny. Każdy wiersz wymienia jedną metodę dokumentu udostępnianą przez fasadę.

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się błędemUwagi
NextPDF\Laravel\Facades\Pdfbrak; statyczny akcesor fasady rozwiązuje NextPDF\Contracts\PdfDocumentInterfaceLaravel rozwiązuje bieżące powiązanie kontenera dla interfejsu dokumentu.Bazowy płynny interfejs API rdzeniowego dokumentu.Błąd powiązania kontenera Laravela, jeśli dostawca nie jest zarejestrowany.Używaj jej w krótkich przepływach kontrolera. W usługach i zadaniach preferuj wstrzykiwanie przez konstruktor.
Pdf::setTitle(string $title)title: tytuł dokumentu.Zastępuje każdy istniejący tytuł.staticBłędy walidacji rdzenia lub błędy podczas zapisu.Deleguje do rdzeniowego obiektu Document.
Pdf::setAuthor(string $author)author: metadane autora dokumentu.Zastępuje każdego poprzedniego autora.staticBłędy walidacji metadanych rdzenia.W przypadku metadanych obejmujących całą aplikację preferuj skonfigurowane wartości domyślne.
Pdf::addPage(?PageSize $size = null, Orientation $orientation = Portrait)size: opcjonalny rozmiar strony; orientation: domyślnie Portrait.Używa skonfigurowanego lub domyślnego rozmiaru strony, jeśli pominięto size.staticBłędy walidacji strony rdzenia.Użyj jawnego PageSize, gdy rozmiar wyniku ma znaczenie.
Pdf::setFont(string $family, string $style = '', float $size = 12.0)Rodzina czcionek, styl i rozmiar w punktach.Używa pustego stylu i rozmiaru 12 pt.staticBłędy rejestru czcionek lub kodowania.Wstępnie załaduj produkcyjne czcionki przez nextpdf.preload_fonts, gdy opóźnienie ma znaczenie.
Pdf::cell(float $width, float $height, string $text = '', bool $border = false, bool $newLine = false, Alignment $align = Left)Szerokość i wysokość komórki, tekst, flaga obramowania, flaga łamania wiersza oraz wyrównanie.Używa pustego tekstu, bez obramowania, bez łamania wiersza i z wyrównaniem do lewej.staticBłędy układu lub kodowania tekstu.Używaj do prostego wyniku o stałym układzie.
Pdf::multiCell(float $width, float $height, string $text, bool $border = false, Alignment $align = Left)Szerokość komórki, wysokość wiersza, tekst, flaga obramowania, wyrównanie.Bez obramowania i z wyrównaniem do lewej.staticBłędy układu lub kodowania tekstu.Używaj, gdy tekst ma być zawijany w obrębie stałej szerokości.
Pdf::writeHtml(string $html)html: fragment HTML.Renderuje na bieżącej stronie i tworzy stronę w razie potrzeby.staticBłędy renderowania HTML w rdzeniu.Zastosuj zasady dotyczące rozmiaru danych wejściowych i zasobów przed przyjęciem niezaufanego kodu HTML.
Pdf::image(string $file, ?float $x = null, ?float $y = null, ?float $width = null, ?float $height = null)Ścieżka pliku i opcjonalny prostokąt umieszczenia.Pozwala rdzeniowemu dokumentowi wybrać bieżącą pozycję i natywny rozmiar obrazu, jeśli pominięto współrzędne.staticBłędy dekodowania obrazu, ścieżki lub układu.Sprawdź zasady dotyczące źródła obrazu przed przyjęciem ścieżek podanych przez użytkownika.
Pdf::output(?string $filename = null, OutputDestination $dest = Inline)filename: opcjonalna nazwa; dest: cel wyjściowy.Używa wyjścia wbudowanego, gdy cel jest pominięty.stringBłędy serializacji rdzenia.W odpowiedziach HTTP Laravela preferuj PdfResponse.
Pdf::save(string $path)path: cel w systemie plików.Zapisuje ukończony plik PDF na dysku.voidBłędy systemu plików lub zapisu w rdzeniu.Sprawdzaj katalogi wyjściowe w kodzie aplikacji.
Pdf::getPdfData()brak.Materializuje bajty PDF w pamięci.stringBłędy serializacji rdzenia.Używaj, gdy inny obiekt frameworka musi przejąć treść odpowiedzi.

Skorzystaj z tej tabeli, gdy trzeba bezpośrednio rozwiązać lub nadpisać wpis kontenera, na przykład wstrzyknąć DocumentFactoryInterface do usługi albo sprawdzić, jakie usługi odracza provides().

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się błędemUwagi
NextPdfServiceProvider::register()brak.Scala config/nextpdf.php; rejestruje rejestry, fabrykę dokumentów, powiązanie dokumentu, klienta HTTP, klienta TSA, podpisywacza oraz opcjonalne kontrakty e-faktur.voidBłędy kontenera lub rozwiązywania opcjonalnych klas podczas korzystania z funkcji.FontRegistryInterface i ImageRegistry są współdzielone; dokumenty są zawsze nowe.
NextPdfServiceProvider::boot()brak.Waliduje wymagane rozszerzenia PHP i publikuje nextpdf-config podczas pracy w konsoli.voidRuntimeException, jeśli wymagane rozszerzenie jest niedostępne.Wymagane rozszerzenia to mbstring i zlib.
NextPdfServiceProvider::provides()brak.Zgłasza identyfikatory odroczonych usług.array<string>brak oczekiwanych błędów.Obejmuje PdfDocumentInterface, DocumentFactoryInterface, FontRegistryInterface, SignerInterface, TsaClient, ClientInterface oraz nextpdf.
PdfDocumentInterface / nextpdfrozwiązywane z kontenera Laravela.Tworzy jednorazowy Document za pomocą DocumentFactoryInterface, a następnie stosuje skonfigurowane wartości domyślne i opcjonalne ustawienia PDF/A lub Artisana.NextPDF\Core\DocumentBłędy opcjonalnych rozszerzeń, gdy są skonfigurowane, lecz niedostępne.Rozwiązuj nowy dokument dla każdego żądania lub zadania.
DocumentFactoryInterfacerozwiązywane z kontenera Laravela.Fabryka typu singleton, która współdzieli rejestry czcionek i obrazów o czasie życia procesu.DocumentFactoryInterfaceBłędy konfiguracji rejestru.Używaj do jawnego wstrzykiwania zależności.
SignerInterfacerozwiązywane z kontenera Laravela.Zwraca null, chyba że ustawiono nextpdf.signature.enabled i skonfigurowano ścieżki certyfikatów.`SignerInterfacenull`Błędy wczytywania certyfikatu lub walidacji na poziomie podpisu.

Skorzystaj z tej tabeli, aby wyszukać klucze nextpdf.* dostępne w środowisku uruchomieniowym i odczytywane przez powiązania. Pełna dokumentacja poszczególnych kluczy, w tym zmiennych środowiskowych i wartości domyślnych, znajduje się pod adresem /integrations/laravel/configuration/.

KluczTypZachowanie domyślneUwagi
nextpdf.fonts_pathstringUżywa czcionek z zasobów Laravela, jeśli pominięto.Katalog na czcionki niestandardowe i wstępne ładowanie.
nextpdf.cache_pathstringŚcieżka pamięci podręcznej aplikacji.Zadbaj, aby była zapisywalna dla procesu roboczego PHP.
nextpdf.preload_fontslist<string>Pusta lista.Czcionki są wstępnie ładowane podczas tworzenia rejestru, po czym rejestr jest blokowany.
nextpdf.image_cache_mbintOgraniczony rozmiar pamięci podręcznej obrazów.Ogranicza pamięć podręczną obrazów o czasie życia procesu.
nextpdf.defaults.*arrayTwórca NextPDF, język en, opcjonalne domyślne wartości autora i układu.Stosowane do każdego nowego dokumentu.
nextpdf.artisan.*arrayMechanizm renderujący Chrome jest wyłączony, chyba że zostanie zainstalowany i skonfigurowany.Mapowane na ChromeRendererConfig::fromArray().
nextpdf.signature.*arrayPodpisywanie domyślnie wyłączone.Certyfikat, klucz prywatny, hasło, dodatkowe certyfikaty oraz poziom podpisu.
nextpdf.tsa.*arrayTSA wyłączony, gdy adres Uniform Resource Locator (URL) jest pusty.Obsługuje poświadczenia, pliki wzajemnego Transport Layer Security (mTLS), limit czasu, przypięcia klucza publicznego oraz zasady HTTP.
nextpdf.ocsp_cache.*arrayPamięć podręczna Online Certificate Status Protocol (OCSP) włączona ze skonfigurowanym TTL.Używana przez przepływy walidacji podpisu, gdy jest dostępna.

Skorzystaj z tej tabeli, gdy zwracasz ukończony dokument przez HTTP i musisz wybrać wyświetlanie wbudowane, pobieranie jako załącznik lub wyjście strumieniowane.

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się błędemUwagi
PdfResponse::inline(Document $document, string $filename = 'document.pdf')document: zbudowany dokument; filename: nazwa pliku w Content-Disposition.Normalizuje puste nazwy plików do document.pdf.Illuminate\Http\ResponseBłędy serializacji rdzenia lub konstruowania odpowiedzi.Ustawia typ zawartości PDF oraz nagłówki zabezpieczające.
PdfResponse::download(Document $document, string $filename = 'document.pdf')Tak samo jak inline; dyspozycją jest załącznik.Zwraca odpowiedź pobieraną przez przeglądarkę.Illuminate\Http\ResponseTak samo jak inline.Używaj do jawnego pobierania plików.
PdfResponse::streamInline(Document $document, string $filename = 'document.pdf')Tak samo jak inline.Materializuje bajty PDF, a następnie emituje fragmenty po 64 KB.Symfony\Component\HttpFoundation\StreamedResponseTak samo jak inline.To strumieniowane wyjście HTTP, a nie renderowanie bez kopiowania.
PdfResponse::streamDownload(Document $document, string $filename = 'document.pdf')Tak samo jak streamInline; dyspozycją jest załącznik.Odpowiedź pobierania strumieniowego.StreamedResponseTak samo jak streamInline.Wymuszaj limity rozmiaru danych wejściowych i wyjściowych przed renderowaniem.

Skorzystaj z tej tabeli, gdy przenosisz generowanie poza wątek obsługi żądania. Obejmuje konstrukcję, wysyłanie oraz wywołania zwrotne sukcesu lub niepowodzenia dla GeneratePdfJob.

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się błędemUwagi
new GeneratePdfJob(string $outputPath, callable $builder, ?callable $onSuccess = null, ?callable $onFailure = null)outputPath: docelowy .pdf; builder: otrzymuje PdfDocumentInterface; wywołania zwrotne są opcjonalne.Nazwa kolejki, limit czasu i połączenie są odczytywane z config('nextpdf.queue.*').Instancja zadania.Błędy serializacji, jeśli budowniczego lub wywołań zwrotnych nie można zserializować.Budowniczy musi zwrócić skonfigurowany dokument.
GeneratePdfJob::handle()brak.Rozwiązuje PdfDocumentInterface, stosuje budowniczego, waliduje ścieżkę wyjściową, a następnie zapisuje.voidInvalidArgumentException dla niebezpiecznych ścieżek wyjściowych; błędy zapisu w rdzeniu.Odrzuca opakowania strumieni, bajty null, segmenty .. oraz ścieżki inne niż .pdf.
GeneratePdfJob::failed(Throwable $exception)exception: przyczyna niepowodzenia.Wywołuje skonfigurowane wywołanie zwrotne niepowodzenia, jeśli jest obecne.voidNiepowodzenia wywołania zwrotnego.Zachowaj idempotentność wywołań zwrotnych.
GeneratePdfJob::then(callable $callback)callback: otrzymuje ścieżkę wyjściową.Zastępuje wywołanie zwrotne sukcesu.selfBłędy serializowalnego domknięcia.Płynny pomocnik do konfiguracji wysyłania.
GeneratePdfJob::catch(callable $callback)callback: otrzymuje zgłoszony Throwable.Zastępuje wywołanie zwrotne niepowodzenia.selfBłędy serializowalnego domknięcia.Używaj do powiadamiania lub kompensacyjnego czyszczenia.
  • PdfResponse zawsze wywołuje getPdfData() przed skonstruowaniem odpowiedzi. Nie działa jako leniwy budowniczy dokumentów.
  • Ładunki kolejek mogą zostać zmanipulowane we współdzielonych transportach; ograniczaj ścieżki wyjściowe do katalogu należącego do aplikacji.
  • Używaj nowego dokumentu dla każdego żądania lub zadania. Nie używaj ponownie tego samego dokumentu w różnych żądaniach.