コンテンツにスキップ

NextPDF Symfony 統合

まず nextpdf/symfony をインストールし、Flex でバンドルを登録するか、手動で登録します。次に config/packages/nextpdf.yaml を追加し、PdfFactory をインジェクトします。このページは配線(wiring)全体のインデックスです。各ステップは、より詳しいページへのリンクです。

Terminal window
composer require nextpdf/symfony

このバンドルには nextpdf/core^3.0 || ^5.2symfony/*^7.2、および psr/log^3.0 が必要です。クラスは PSR-4 プレフィックス NextPDF\Symfony\ 配下でオートロードされ、src/Symfony/ にマッピングされます。PSR-4 オートローダーは、名前空間プレフィックスを対応するベースディレクトリへ resolve(解決)します(PSR-4 §2)。要件の詳細とオプションのパッケージについては、/integrations/symfony/install/. を参照してください。

Symfony Flex では、バンドルの composer.json 内にある extra.symfony.bundles エントリーが、すべての環境で NextPDF\Symfony\NextPdfBundle を登録します。Flex を使用しない場合は、config/bundles.php に手動で追加します。

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

起動シーケンス全体とコンパイラーパスの動作については、/integrations/symfony/boot-and-discovery/. を参照してください。

バンドルの config/services.php ファイルは、次のサービスを登録します。

サービス / エイリアスライフサイクル
NextPDF\Symfony\Service\PdfFactoryshared、public — インジェクト対象
nextpdf.documentPdfDocumentInterfaceDocumentnon-shared、public — 解決のたびに新規生成
NextPDF\Contracts\FontRegistryInterfaceshared、ウォームアップ後にロック
NextPDF\Graphics\ImageRegistryshared、kernel.reset でリセット
NextPDF\Contracts\DocumentFactoryInterfaceshared(共有インスタンス)
NextPDF\Symfony\Http\PdfResponsepublic、ステートレスヘルパー

ドキュメントのバインディングは、意図的に non-shared にしています。PSR-11 では、コンテナーが同一の id に対する連続した get() 呼び出しで異なる値を返すことが許容されています。新規のドキュメントにより、長時間稼働するワーカーでのリクエスト間の状態共有を回避します(PSR-11 §1.1.2)。条件付きの EInvoice バインディングを含む、サービスとエイリアスの完全な一覧については、/integrations/symfony/configuration/. を参照してください。

設定のエイリアスは nextpdf です。config/packages/nextpdf.yaml を作成します。Flex レシピが発行されると、デフォルトのコピーが自動的に配置されます。すべてのキーにデフォルト値があるため、最小限のファイルは次のようになります。

nextpdf: ~

設定ツリー全体は /integrations/symfony/configuration/. で説明されています。

まず PdfFactory をインジェクトし、その結果を 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');
}
}

エンドツーエンドのコントローラーと Messenger を使った非同期パスについては、/integrations/symfony/quickstart/. を参照してください。

アプリケーションコードを一切記述せずに、配線(wiring)を確認します。

Terminal window
php bin/console debug:container nextpdf
php bin/console debug:config nextpdf
php bin/console lint:container

debug:container nextpdf では、PdfFactorynextpdf.document エイリアス、および各レジストリが一覧表示されるはずです。lint:container は、すべてのサービス引数が解決されることを検証します。生成をテストするには、前述のコントローラーを追加してから /hello.pdf にリクエストします。

アプリケーションコードからの利用がサポートされる公開シンボルは、次のとおりです。

シンボル用途
NextPDF\Symfony\Service\PdfFactory::create()事前設定済みの新規 Document
NextPDF\Symfony\Http\PdfResponse::inline() / download()セキュリティヘッダー付きのバッファリングされたレスポンス
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload()チャンク化されたストリーミングレスポンス
NextPDF\Symfony\Message\GeneratePdfMessage非同期生成用の DTO(検証済み)
NextPDF\Symfony\Message\PdfBuilderInterfaceハンドラーによって解決されるビルダー契約

各行は、このページで述べている規範的な主張です。各主張は、ゲート付き SDO コーパスの完全な 64 桁の 16 進数 reference_id にひも付けられています。来歴(コーパスマニフェスト、取得トランスポート)は _sidecars/rag-citations.yaml にあります。

仕様条項リファレンス ID主張
PSR-11psr_11_container#1.1.2.p4コンテナーの has()/get() 識別子契約
PSR-4psr_4_autoload#x1.x2.p5オートローダーの名前空間マッピング
  • /integrations/symfony/install/ — 要件と登録。
  • /integrations/symfony/boot-and-discovery/ — 検出、起動、コンパイラーパス。
  • /integrations/symfony/configuration/ — 完全なスキーマとサービス一覧。
  • /integrations/symfony/quickstart/ — 実行可能なコントローラーと非同期の例。
  • /integrations/symfony/production-usage/ — ワーカーの安全性とストリーミング。