跳到內容

NextPDF Symfony 整合總覽

nextpdf/symfony 是 NextPDF 引擎官方的 Symfony 7 bundle。它會將引擎接入 Symfony container(容器),並提供可注入到你自有服務的文件 factory(工廠)。它也內建 HTTP response 輔助工具,以及非同步產生 PDF 的路徑,讓這項工作可在背景執行。

NextPDF Symfony 以標準 bundle 形式,將 nextpdf/core 引擎綁定到 Symfony 應用程式。它加入下列建構區塊;每一項都已對照 src/Symfony/ 中的 bundle 原始碼逐一驗證:

  • 一個 bundle 進入點NextPDF\Symfony\NextPdfBundle 繼承 Symfony 的 Bundle 基底類別,並註冊一個 compiler pass。
  • 一個依賴注入 extensionNextPDF\Symfony\DependencyInjection\NextPdfExtension 載入服務定義,將 config tree(組態樹)轉為 container 參數,並對外公開組態別名 nextpdf
  • 一棵具型別的組態樹NextPDF\Symfony\DependencyInjection\Configuration 定義了 nextpdf 的組態 schema。這個 schema 會驗證 enum 值、設定預設值,並使用 %kernel.*% 參數 placeholder(佔位符)。
  • 一個可注入的文件 factoryNextPDF\Symfony\Service\PdfFactory 會產生全新且預先設定好的 NextPDF\Core\Document 實例。它相當於 Symfony 版的靜態 facade。
  • HTTP response 輔助工具NextPDF\Symfony\Http\PdfResponse 會建立 inline、下載與串流回應,並附上一組固定且符合 OWASP 原則的安全標頭。
  • 一條非同步產生路徑NextPDF\Symfony\Message\GeneratePdfMessageNextPDF\Symfony\Message\GeneratePdfHandlerNextPDF\Symfony\Message\PdfBuilderInterface 會與 Symfony Messenger 整合,讓 PDF 算繪可在 worker 上執行。
  • 一個編譯期 extension 偵測器NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPass 會偵測選用的 NextPDF extension,只有在這些 extension 存在時才註冊它們的服務。

這個 bundle 會註冊一組規模小且穩定的公開 container 服務。文件服務 nextpdf.document(別名為 NextPDF\Contracts\PdfDocumentInterfaceNextPDF\Core\Document並非共享:每次 resolve(解析)都會回傳各自獨立、用完即丟的文件。這符合 PSR-11 容器契約:在該契約下,對相同識別碼連續呼叫兩次 get(),依容器設定不同,可能回傳不同的值 — 見 PSR-11 §1.1.2。非共享綁定是刻意設計:文件會累積每次算繪的狀態,因此每個請求都取得全新實例,可避免狀態在長時間執行的 worker 中跨請求外洩。

字型登錄(NextPDF\Contracts\FontRegistryInterface)的運作方式則相反:它是共享的 singleton(單例)。影像登錄帶有 kernel.reset 標籤,因此在 FrankenPHP 與 Messenger worker 下,其有界快取會在請求之間被清除。組態頁面記載了完整的服務與別名對照表。

字型與影像登錄都接受選用的 PSR-3 logger。只有在應用程式提供 logger 時,這個 bundle 才會綁定 Psr\Log\LoggerInterfacenullOnInvalid())。因此,記錄功能是選用的協作元件,而非硬性相依。這與 PSR-3 logger 契約一致:在該契約下,logger 是可注入、可替換的協作元件(PSR-3)。

這個 bundle 本身是 Apache-2.0 核心軟體。少數能力只會在你同時安裝特定選用套件時出現:

能力需要偵測方式
PDF 產生、PdfFactoryPdfResponse僅需核心永遠可用
非同步產生symfony/messenger安裝 Messenger 後 handler 即啟用
Chrome CDP HTML 算繪nextpdf/artisan編譯期 class_exists 探測
PDF/A 封存、數位簽章nextpdf/premium(安裝 Pro)編譯期 class_exists 探測

安裝 nextpdf/premium 後,這個 bundle 可套用一組基線 PAdES B-B 簽章設定。更高階的簽章設定檔不在這個 bundle 的文件範圍內。版本對照矩陣請參閱 NextPDF Premium 文件。

當你要在 Symfony 7 HTTP 應用程式或 worker 內建構 PDF 時,就使用 nextpdf/symfony。這個 bundle 提供由 container 管理的服務、worker 安全的登錄,以及安全的下載回應,因此你不必手動接線引擎。如果你只需要在腳本中進行一次性產生,單靠核心套件 nextpdf/core 就足夠了。

每一列都是本頁提出的一則規範性主張,並釘選到來自受管制 SDO 語料庫的完整 64 位十六進位 reference_id。Provenance(來源資訊;語料庫 manifest、檢索傳輸)記於 _sidecars/rag-citations.yaml

規範條款參考 ID主張
PSR-11psr_11_container#1.1.2.p3.bContainer get() 回傳值契約
PSR-3psr_3_logger#x3.p17LoggerInterface 選用相依

當 nextpdf/premium(Pro)與這個 bundle 一同安裝時,數位簽章與 PDF/A 封存就會變為可用。這是一項選用的 Pro 能力。此處記載的 Core bundle 採用它時,不需要任何程式碼變更。見 </get-license/?intent=symfony-pro>。

  • /integrations/symfony/install/ — 安裝並註冊這個 bundle。
  • /integrations/symfony/configuration/ — 完整的 nextpdf 組態樹與服務對照表。
  • /integrations/symfony/quickstart/ — 一個可執行的控制器與非同步範例。
  • /integrations/symfony/boot-and-discovery/ — Symfony 如何探索並啟動這個 bundle。
  • /integrations/symfony/production-usage/ — worker 安全性、串流與非同步模式。