Przejdź do głównej zawartości
getnextpdf.com

Dokumentacja API Symfony

Pakiet dla Symfony udostępnia rejestrację bundle’a, drzewo konfiguracji, wstrzykiwaną fabrykę dokumentów, pomocniki odpowiedzi Hypertext Transfer Protocol (HTTP) oraz typy Messengera do generowania asynchronicznego. W większości kodu aplikacji używane są tylko dwa symbole: usługa PdfFactory, którą wstrzykujesz, aby zbudować obiekt Document, oraz pomocnik PdfResponse, który zamienia ten dokument w bezpieczną odpowiedź HTTP. Pozostałe symbole (bundle, rozszerzenie, przebieg kompilatora, drzewo konfiguracji, obiekt transferu danych (DTO) Messengera oraz moduł obsługi) to elementy okablowania, które konfigurujesz raz albo pozostawiasz frameworkowi.

Zacznij tutaj: wstrzyknij NextPDF\Symfony\Service\PdfFactory, wywołaj create(), aby uzyskać nowy obiekt Document, i zwróć go za pomocą NextPDF\Symfony\Http\PdfResponse::download(). Pierwszy przykład pokazuje cały przepływ.

Skorzystaj z tych trzech gotowych do uruchomienia fragmentów kodu przy najczęstszych zadaniach. Każdy fragment korzysta wyłącznie ze zweryfikowanych symboli opisanych w poniższych tabelach.

Zwróć z kontrolera plik do pobrania w formacie Portable Document Format (PDF): wstrzyknij fabrykę, zbuduj dokument i przekaż go do pomocnika odpowiedzi:

<?php
declare(strict_types=1);
namespace App\Controller;
use NextPDF\Symfony\Http\PdfResponse;
use NextPDF\Symfony\Service\PdfFactory;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
final class InvoiceController
{
#[Route('/invoice/{number}', name: 'invoice_pdf')]
public function download(PdfFactory $pdf, string $number): Response
{
$doc = $pdf->create();
$doc->addPage();
$doc->setFont('dejavusans', '', 12);
$doc->cell(0, 10, "Invoice #{$number}");
return PdfResponse::download($doc, "invoice-{$number}.pdf");
}
}

Co robi: PdfFactory::create() zwraca nowy, wstępnie skonfigurowany obiekt Document. PdfResponse::download() wysyła go z nagłówkiem Content-Type: application/pdf, dyspozycją załącznika oraz stałymi nagłówkami zabezpieczeń bundle’a.

Przesyłaj duży plik PDF strumieniowo, aby ograniczyć szczytowe zużycie pamięci: użyj pomocnika strumieniowego i zwróć StreamedResponse:

<?php
declare(strict_types=1);
namespace App\Controller;
use NextPDF\Symfony\Http\PdfResponse;
use NextPDF\Symfony\Service\PdfFactory;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Routing\Attribute\Route;
final class ReportController
{
#[Route('/report', name: 'report_pdf')]
public function report(PdfFactory $pdf): StreamedResponse
{
$doc = $pdf->create();
$doc->addPage();
$doc->setFont('dejavusans', '', 12);
$doc->cell(0, 10, 'Annual report');
return PdfResponse::streamDownload($doc, 'annual-report.pdf');
}
}

Co robi: PdfResponse::streamDownload() emituje zmaterializowany plik PDF we fragmentach i pomija Content-Length; użyj streamInline() jako odpowiednika wyświetlanego w przeglądarce.

Aby wygenerować plik PDF asynchronicznie, wyślij GeneratePdfMessage do transportu Messengera, aby renderowanie odbyło się w procesie roboczym:

<?php
declare(strict_types=1);
namespace App\Controller;
use App\Pdf\InvoicePdfBuilder;
use NextPDF\Symfony\Message\GeneratePdfMessage;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Routing\Attribute\Route;
final class QueueController
{
#[Route('/invoice/{id}/queue', name: 'invoice_queue')]
public function queue(MessageBusInterface $bus, int $id): Response
{
$bus->dispatch(new GeneratePdfMessage(
builderClass: InvoicePdfBuilder::class,
outputPath: '/var/storage/invoices/' . $id . '.pdf',
builderContext: ['invoice_id' => $id],
));
return new Response('PDF generation queued.', 202);
}
}

Co robi: DTO przenosi class-string konstruktora oraz zwalidowaną ścieżkę wyjściową. Moduł obsługi rozwiązuje konstruktor, buduje dokument i zapisuje go w procesie roboczym. Klasa konstruktora implementuje PdfBuilderInterface i jest zarejestrowana w lokalizatorze usług (przewodnik szybkiego startu dla Symfony opisuje okablowanie lokalizatora i procesu roboczego).

Ta tabela opisuje dokładny konstruktor oraz kontrakt create() wstrzykiwanej usługi tworzącej nowe dokumenty.

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się niepowodzeniem zUwagi
new PdfFactory(DocumentFactoryInterface $factory, array $defaults, ?string $pdfa, array $artisanConfig)factory: fabryka rdzenia; defaults: twórca, autor, język, marginesy; pdfa: opcjonalny profil PDF/A; artisanConfig: opcjonalna konfiguracja renderera Chrome.Wartości domyślne są stosowane tylko wtedy, gdy zostały skonfigurowane.PdfFactoryBłędy okablowania kontenera.Usługa może być singletonem, ponieważ create() zwraca nowy dokument.
PdfFactory::create()brak.Ustawia twórcę i język; ustawia autora tylko wtedy, gdy nie jest pusty; stosuje konfigurację PDF/A i Artisan tylko wtedy, gdy jest dostępna.NextPDF\Core\DocumentBłędy konfiguracji rdzenia.Wywołuj raz na żądanie, polecenie lub komunikat.
PdfFactory::setArtisanAvailable(bool $available)available: flaga dostępności w czasie kompilacji.Wyłączone, dopóki nie włączy go przebieg kompilatora.voidbrak oczekiwanych.Wewnętrzny hook wywoływany przez opcjonalny przebieg kompilatora rozszerzenia.
PdfFactory::setProAvailable(bool $available)available: flaga dostępności w czasie kompilacji.Wyłączone, dopóki nie włączy go przebieg kompilatora.voidbrak oczekiwanych.Wewnętrzny hook dostępności funkcji Premium.

Pierwsza tabela opisuje warstwę okablowania: rejestrację bundle’a, drzewo konfiguracji nextpdf oraz wykrywanie opcjonalnych rozszerzeń. Druga tabela zawiera listę kluczy konfiguracji.

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się niepowodzeniem zUwagi
NextPdfBundle::build(ContainerBuilder $container)Konstruktor kontenera Symfony.Wywołuje nadrzędną metodę build i rejestruje OptionalExtensionPass.voidBłędy rejestracji przebiegu kompilatora.Włącza wykrywanie opcjonalnych funkcji Artisan i Premium.
NextPdfBundle::getPath()brak.Zwraca główną ścieżkę pakietu.stringbrak oczekiwanych.Używane przez wykrywanie bundle’i i ładowanie zasobów w Symfony.
NextPdfExtension::load(array $configs, ContainerBuilder $container)Tablice konfiguracji użytkownika i konstruktor kontenera.Przetwarza konfigurację nextpdf, przechowuje rozwiązane parametry, ładuje definicje usług i weryfikuje wymagane rozszerzenia.voidBłędy walidacji konfiguracji, ładowania usług lub braku wymaganego rozszerzenia.Wymaganymi rozszerzeniami są mbstring i zlib.
NextPdfExtension::getAlias()brak.Używa nextpdf jako głównego klucza konfiguracji.stringbrak oczekiwanych.Skonfiguruj bundle pod kluczem nextpdf:.
Configuration::getConfigTreeBuilder()brak.Definiuje walidowane drzewo konfiguracji nextpdf.TreeBuilderBłędy definicji konfiguracji w Symfony.Odzwierciedla strukturę konfiguracji Laravel tam, gdzie jest to praktyczne.
OptionalExtensionPass::process(ContainerBuilder $container)Konstruktor kontenera Symfony.Wykrywa opcjonalne usługi Artisan i Premium oraz przełącza flagi dostępności fabryki.voidBłędy okablowania przebiegu kompilatora.Uruchamia się podczas kompilacji kontenera.
Klucz konfiguracjiTypZachowanie domyślneUwagi
page_formatenumA4; dozwolone wartości obejmują A3, A5, Letter, Legal i Tabloid.Dotyczy domyślnego tworzenia dokumentu.
orientationenumP; dozwolone wartości to P i L.Używaj jawnych wywołań dokumentu, gdy strona wymaga innej orientacji.
unitenummm; dozwolone wartości to pt, mm, cm i in.Utrzymuje domyślne wartości frameworka w zgodzie z jednostkami rdzenia.
pdfa`stringnull`null; dozwolone wartości to 4, 4e i 4f.
fonts_path / cache_pathstringŚcieżka czcionek projektu i ścieżka pamięci podręcznej kernela.Zadbaj, aby każda ścieżka była odpowiednio odczytywalna albo zapisywalna w czasie wykonywania.
signature.*arrayDomyślnie wyłączone, z poziomem podpisu B-B.Udostępnia certyfikat, klucz, hasło, dodatkowe certyfikaty oraz poziom.
tsa.*arrayWyłączone, gdy adres Uniform Resource Locator (URL) ma wartość null; limit czasu domyślnie wynosi 30 sekund.Obsługuje poświadczenia, pliki wzajemnego uwierzytelniania Transport Layer Security (mTLS), przypięcia kluczy publicznych oraz politykę HTTP.
ocsp_cache.*arrayWłączone z czasem życia (TTL) wynoszącym 86400 sekund.Używane przez przepływy walidacji i długoterminowych podpisów, gdy jest dostępne.
messenger.*arrayTransport async, limit czasu 120, ponowne próby 3.Używane przez przepływy generowania asynchronicznego.
artisan.*arrayRenderer Chrome jest wyłączony, chyba że został skonfigurowany i zainstalowany.Mapuje się na ChromeRendererConfig, gdy opcjonalny renderer jest dostępny.
defaults.*arrayTwórca NextPDF, autor pusty, język en, domyślne marginesy i czcionka.Stosowane przez PdfFactory::create().

Ta tabela pomaga wybrać pomocnika odpowiedzi według trybu wyświetlania i buforowania: wyświetlanie w przeglądarce lub pobieranie, buforowane albo strumieniowe. Pokazuje również zachowanie nazwy pliku i nagłówków.

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się niepowodzeniem zUwagi
PdfResponse::inline(Document $document, string $filename = 'document.pdf')document: zbudowany dokument; filename: nazwa pliku odpowiedzi.Dodaje .pdf, gdy go brakuje.Symfony\Component\HttpFoundation\ResponseBłędy serializacji rdzenia.Ustawia typ zawartości PDF oraz nagłówki ochronne.
PdfResponse::download(Document $document, string $filename = 'document.pdf')Tak samo jak inline; dyspozycja to załącznik.Odpowiedź wymuszająca pobieranie w przeglądarce.ResponseTak samo jak inline.Używaj do jawnych pobrań.
PdfResponse::streamInline(Document $document, string $filename = 'document.pdf')Tak samo jak inline.Emituje bajty zmaterializowanego pliku PDF we fragmentach.StreamedResponseTak samo jak inline.Nie eliminuje materializacji dokumentu.
PdfResponse::streamDownload(Document $document, string $filename = 'document.pdf')Tak samo jak streamInline; dyspozycja to załącznik.Odpowiedź strumieniowa z pobieraniem.StreamedResponseTak samo jak streamInline.Zastosuj politykę rozmiaru wyjścia przed renderowaniem.

Ta tabela opisuje ścieżkę asynchroniczną: DTO wysyłanego komunikatu, interfejs konstruktora, który implementujesz, oraz moduł obsługi działający w procesie roboczym.

SymbolParametryZachowanie domyślneZwracaZgłasza lub kończy się niepowodzeniem zUwagi
new GeneratePdfMessage(string $builderClass, string $outputPath, array $builderContext = [])builderClass: class-string implementujący PdfBuilderInterface; outputPath: docelowy .pdf; builderContext: serializowalne dane.Pusta tablica kontekstu.DTO komunikatu.InvalidArgumentException dla nieprawidłowej w pełni kwalifikowanej nazwy klasy (FQCN), stream wrappera, bajtu null, przejścia po katalogach, pustej ścieżki lub celu innego niż .pdf.Transporty Messengera przenoszą dane, a nie domknięcia.
PdfBuilderInterface::build(Document $document, array $context): Documentdocument: nowy, skonfigurowany dokument; context: serializowalne dane komunikatu.Brak domyślnego kontekstu poza wartością komunikatu.Skonfigurowany Document.Wyjątki specyficzne dla konstruktora.Zadbaj, aby konstruktory były deterministyczne i idempotentne.
new GeneratePdfHandler(PdfFactory $pdfFactory, ContainerInterface $builderLocator)Fabryka PDF oraz otagowany lokalizator usług konstruktorów.Podczas konstrukcji nie jest tworzony żaden dokument.GeneratePdfHandlerBłędy okablowania kontenera.Lokalizator powinien udostępniać wyłącznie implementacje PdfBuilderInterface.
GeneratePdfHandler::__invoke(GeneratePdfMessage $message)message: zwalidowane DTO komunikatu.Rozwiązuje konstruktor z kontenera, buduje dokument i zapisuje go.voidBrakująca usługa konstruktora, nieprawidłowy wynik konstruktora, błędy zapisu rdzenia.Preferuj konstruktory usługowe zamiast statycznych wywołań zwrotnych.
  • Nie przechowuj obiektu Document jako usługi. Przechowuj PdfFactory i wywołuj create() dla każdej jednostki pracy.
  • Kolejkuj wyłącznie serializowalny kontekst. Nie umieszczaj otwartych strumieni, domknięć ani obiektów żądania w builderContext.
  • Stosuj politykę ścieżki wyjściowej bardziej restrykcyjną niż DTO, jeśli wdrożenie ma katalogi główne pamięci masowej właściwe dla najemcy.