Artisan — Chrome CDP 渲染套件¶
NextPDF Artisan
nextpdf/artisan 以 Chrome DevTools Protocol(CDP)為核心,將任意 HTML/CSS 頁面無損轉換為 PDF 2.0 文件。套件包含三個主要子系統:ChromeRenderer(渲染引擎)、BrowserPool(連線池管理)與 PdfParser(PDF 解析器),可獨立使用,亦可協同運作。
PHP Compatibility
This example uses PHP 8.5 syntax. If your environment runs PHP 8.1 or 7.4, use NextPDF Backport for a backward-compatible build.
與 NextPDF Core 的原生排版引擎不同,Artisan 將渲染任務委派給真實的 Chromium 瀏覽器實例,適合需要完整 CSS3 支援(Flexbox、Grid、變數、動畫快照)的場景。
核心能力¶
| 子系統 | 主要功能 |
|---|---|
| ChromeRenderer | HTML→PDF、CSS3 完整支援、CSP 沙箱、CDP 安全通道 |
| BrowserPool | 連線池、健康檢查、逾時控管、Octane 安全 |
| PdfParser | xref table 解析、FlateDecode 解壓、物件流提取 |
| PageImport | 以 Form XObject 將解析頁面嵌入 Core 文件 |
快速開始¶
需要在本機或 Docker 容器中執行 Chromium 或 Google Chrome。
<?php
declare(strict_types=1);
use NextPDF\Artisan\BrowserPool;
use NextPDF\Artisan\ChromeRenderer;
use NextPDF\Artisan\Config\BrowserPoolConfig;
use NextPDF\Artisan\Config\RendererConfig;
// 建立連線池(建議在應用程式啟動時初始化一次)
$pool = BrowserPool::create(
config: BrowserPoolConfig::create(
chromiumBinary: '/usr/bin/chromium-browser',
maxConnections: 4,
idleTimeoutSeconds: 60,
),
);
// 建立渲染器
$renderer = ChromeRenderer::create(pool: $pool, config: RendererConfig::default());
// 渲染 HTML 字串為 PDF bytes
$pdfBytes = $renderer->renderHtml(
html: '<h1>Hello, Artisan!</h1>',
pageFormat: 'A4',
);
file_put_contents('/tmp/output.pdf', $pdfBytes);
BrowserPool 連線池¶
BrowserPool 負責管理與 Chrome 實例之間的 WebSocket 連線,確保並行渲染時不會建立過多瀏覽器程序。
use NextPDF\Artisan\BrowserPool;
use NextPDF\Artisan\Config\BrowserPoolConfig;
$pool = BrowserPool::create(
config: BrowserPoolConfig::create(
chromiumBinary: '/usr/bin/chromium-browser',
maxConnections: 8,
acquireTimeoutMs: 5000,
healthCheckIntervalSeconds: 30,
),
);
PDF 解析器¶
PdfParser 可讀取既有 PDF 檔案,提取頁面結構以供 PageImport 使用:
use NextPDF\Artisan\PdfParser;
$parser = PdfParser::fromFile('/path/to/source.pdf');
$pages = $parser->pages(); // list<ParsedPage>
安全考量¶
Artisan 在沙箱模式下啟動 Chrome,並透過 Content Security Policy 限制渲染範圍,防止 SSRF 與惡意 HTML 注入。詳見 Chrome 渲染器安全。
參見¶
- Chrome 渲染器 — CSS3 支援範圍、CSP 設定、CDP 安全通道
- PDF 解析器 — xref/stream 解析、FlateDecode、物件流
- 頁面匯入 — Form XObject 嵌入工作流程