Przejdź do głównej zawartości

Integracja NextPDF z Symfony

Zainstaluj nextpdf/symfony, pozwól Flex zarejestrować bundle albo zarejestruj go samodzielnie, dodaj config/packages/nextpdf.yaml i wstrzyknij PdfFactory. Traktuj tę stronę jako indeks kroków integracji. Każdy krok odsyła do bardziej szczegółowego przewodnika.

Okno terminala
composer require nextpdf/symfony

Bundle wymaga nextpdf/core^3.0 || ^5.2, symfony/*^7.2 oraz psr/log^3.0. Klasy są automatycznie ładowane pod prefiksem PHP Standards Recommendation (PSR)-4 NextPDF\Symfony\, odwzorowanym na src/Symfony/. Autoloader PSR-4 odwzorowuje ten prefiks przestrzeni nazw na katalog bazowy (PSR-4 §2). Pełną listę wymagań i pakietów opcjonalnych znajdziesz na stronie /integrations/symfony/install/.

Gdy używasz Symfony Flex, wpis extra.symfony.bundles w pliku composer.json bundle rejestruje NextPDF\Symfony\NextPdfBundle dla wszystkich środowisk. Bez Flex dodaj go samodzielnie do config/bundles.php:

return [
NextPDF\Symfony\NextPdfBundle::class => ['all' => true],
];

Pełną sekwencję uruchamiania oraz działanie przebiegów kompilatora opisuje strona /integrations/symfony/boot-and-discovery/.

Plik config/services.php w bundle rejestruje następujące usługi:

Usługa / aliasCykl życia
NextPDF\Symfony\Service\PdfFactorywspółdzielona, publiczna; wstrzykuj ją
nextpdf.documentPdfDocumentInterfaceDocumentniewspółdzielona, publiczna; nowa przy każdym rozwiązywaniu
NextPDF\Contracts\FontRegistryInterfacewspółdzielona, zablokowana po rozgrzaniu
NextPDF\Graphics\ImageRegistrywspółdzielona, kernel.reset
NextPDF\Contracts\DocumentFactoryInterfacewspółdzielona
NextPDF\Symfony\Http\PdfResponsepubliczny, bezstanowy pomocnik

Powiązanie dokumentu celowo jest niewspółdzielone. PSR-11 zezwala kontenerowi na zwracanie różnych wartości w kolejnych wywołaniach get() dla jednego identyfikatora. Nowy dokument pozwala uniknąć współdzielonego stanu między żądaniami w długo działających procesach roboczych (PSR-11 §1.1.2). Pełną tabelę usług i aliasów, w tym warunkowe powiązania EInvoice, znajdziesz na stronie /integrations/symfony/configuration/.

Aliasem konfiguracji jest nextpdf. Utwórz config/packages/nextpdf.yaml. Gdy Flex publikuje recepturę, dodaje domyślną kopię automatycznie. Każdy klucz ma wartość domyślną, więc minimalny plik wygląda tak:

nextpdf: ~

Pełne drzewo konfiguracji jest udokumentowane na stronie /integrations/symfony/configuration/.

Wstrzyknij PdfFactory, a następnie zwróć dokument przez PdfResponse:

src/Controller/PdfController.php
<?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 PdfController
{
#[Route('/hello.pdf', name: 'hello_pdf')]
public function hello(PdfFactory $pdf): Response
{
$doc = $pdf->create();
$doc->addPage();
$doc->cell(0, 10, 'Hello from NextPDF on Symfony.');
return PdfResponse::inline($doc, 'hello.pdf');
}
}

Kompletny kontroler oraz asynchroniczną ścieżkę Messenger znajdziesz na stronie /integrations/symfony/quickstart/.

Zweryfikuj integrację bez pisania kodu aplikacji:

Okno terminala
php bin/console debug:container nextpdf
php bin/console debug:config nextpdf
php bin/console lint:container

debug:container nextpdf powinno wyświetlić PdfFactory, alias nextpdf.document oraz rejestry. lint:container sprawdza, czy każdy argument usługi można rozwiązać. Aby przetestować generowanie, dodaj powyższy kontroler, a następnie wyślij żądanie do /hello.pdf.

Publiczna powierzchnia interfejsu programowania aplikacji (API) udostępnia kodowi aplikacji następujące symbole:

SymbolPrzeznaczenie
NextPDF\Symfony\Service\PdfFactory::create()nowy, wstępnie skonfigurowany Document
NextPDF\Symfony\Http\PdfResponse::inline() / download()buforowana odpowiedź z nagłówkami zabezpieczeń
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload()strumieniowa odpowiedź przesyłana fragmentami
NextPDF\Symfony\Message\GeneratePdfMessageobiekt transferu danych (DTO) do generowania asynchronicznego (walidowany)
NextPDF\Symfony\Message\PdfBuilderInterfacekontrakt buildera rozwiązywany przez handler

Każdy wiersz wymienia twierdzenie normatywne sformułowane na tej stronie. Każde twierdzenie jest przypięte do pełnego, 64-znakowego szesnastkowego reference_id z reglamentowanego korpusu organizacji opracowującej standardy (SDO). Pochodzenie (manifest korpusu i transport pobierania) znajduje się w _sidecars/rag-citations.yaml.

SpecyfikacjaPunktreference_idTwierdzenie
PSR-11psr_11_container#1.1.2.p4Kontrakt identyfikatora has()/get() kontenera
PSR-4psr_4_autoload#x1.x2.p5Odwzorowanie przestrzeni nazw przez autoloader
  • /integrations/symfony/install/ — wymagania i rejestracja.
  • /integrations/symfony/boot-and-discovery/ — wykrywanie, uruchamianie i przebieg kompilatora.
  • /integrations/symfony/configuration/ — pełny schemat i tabela usług.
  • /integrations/symfony/quickstart/ — gotowy do uruchomienia kontroler i przykład asynchroniczny.
  • /integrations/symfony/production-usage/ — bezpieczeństwo procesów roboczych i strumieniowanie.