コンテンツにスキップ

Artisan API リファレンス

Artisan パッケージ(nextpdf/artisan)は、相互に関連する 2 つの API グループを公開します。1 つは Chrome レンダリング関連の ChromeRendererConfigChromeHtmlRendererChromeSecurityPolicyChromeRenderResultViewportCalculatorBrowserPool で、HTML フラグメントを Chrome 生成の PDF に変換します。もう 1 つは限定的な parser/importer 関連の PdfReaderPageImporterImportedFormXObject と、補助的な tokenizer/xref クラス群で、レンダリングされた出力をテキスト選択可能な Form XObject として NextPDF ドキュメントに埋め込みます。

まず押さえるべき点です。HTML から PDF を得たいだけであれば、このパッケージを直接操作することはほとんどありません。ChromeRendererConfig を NextPDF の Document に設定し、writeHtmlChrome() を呼び出します(クイックスタート を参照)。以下のクラスは、ワーカーにレンダラーを組み込む場合やパーサー診断を実行する場合にのみ使用します。「一般的なタスク」の最初の例では、その 1 回の呼び出しで行う方法を示します。

以下の 3 つのフローは、最上位の呼び出しから明示的なレンダリングおよびインポートのパイプラインまで、実際の利用方法のほぼすべてを網羅しています。すべてのサンプルは nextpdf-Artisan/src(およびパッケージの README.md / ci/tests/)に対して検証されています。

HTML フラグメントをテキスト選択可能な PDF にレンダリングします。標準的な 1 回呼び出しの例です。

<?php
declare(strict_types=1);
use NextPDF\Core\Document;
use NextPDF\Artisan\ChromeRendererConfig;
require __DIR__ . '/vendor/autoload.php';
$config = new ChromeRendererConfig(chromeBinaryPath: '/usr/bin/chromium');
$doc = Document::createStandalone();
$doc->setChromeRendererConfig($config);
$doc->addPage();
$doc->writeHtmlChrome('<div style="display:flex;gap:20px"><h2>Revenue</h2><p>$124,500</p></div>');
$doc->save('/tmp/report.pdf');

処理内容:Chrome がフラグメントをレイアウトし、ブリッジがページ 0 を Form XObject として埋め込むため、テキストは選択可能なまま保たれます。writeHtmlChrome(string $html, ?float $width = null, ?float $height = null): static は、$heightnull の場合に高さを自動調整します。

レンダラーを実行し、ページを自分でインポートします。writeHtmlChrome() の背後にある明示的なパイプラインで、ワーカーやカスタム配置に使います。

<?php
declare(strict_types=1);
use NextPDF\Artisan\ChromeHtmlRenderer;
use NextPDF\Artisan\ChromeRendererConfig;
use NextPDF\Artisan\ImportedFormXObject;
use NextPDF\Artisan\PageImporter;
use NextPDF\Parser\PdfReader;
$renderer = new ChromeHtmlRenderer(new ChromeRendererConfig(renderTimeout: 30));
try {
$result = $renderer->render($html, widthPt: 595.28);
$reader = new PdfReader($result->getPdfData());
$reader->parse();
$form = (new PageImporter())->import($reader);
} finally {
$renderer->close();
}

処理内容:Chrome PDF バイト列にレンダリングし、それを解析して、ページ 0 を配置可能な ImportedFormXObject にインポートします。Chrome プロセスを解放するため、レンダラーは必ず close() してください。

フレームワーク形式の配列から構成を作成します。ハードコードされたコンストラクター引数の代わりに、config/*.php やバンドルのパラメーターで使用します。

<?php
declare(strict_types=1);
use NextPDF\Artisan\ChromeRendererConfig;
$config = ChromeRendererConfig::fromArray([
'chrome_binary' => '/usr/bin/chromium',
'render_timeout' => 45,
'max_html_size' => 2_000_000,
'no_sandbox' => false,
]);

処理内容:スネークケースの構成配列をコンストラクターにマッピングします。設定されていないキーはデフォルトにフォールバックし、chrome_binary は空でない文字列の場合にのみ適用されます。

これらの型がレンダリングの起動と実行を担います。ChromeRendererConfig を作成し、ChromeHtmlRenderer に渡し、render() を呼び出して ChromeRenderResult を取得します。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
new ChromeRendererConfig(?string $chromeBinaryPath = null, int $renderTimeout = 30, string $defaultCss = '', int $maxHtmlSize = 5000000, bool $noSandbox = false)バイナリパス、タイムアウト、CSS、HTML サイズ上限、サンドボックスフラグ。バイナリパスが null の場合は Chrome を自動検出。サンドボックスは無効化しない限り有効。ChromeRendererConfig想定なし。ランタイム要件がある場合のみ noSandbox を設定。
ChromeRendererConfig::fromArray(array $config)chrome_binaryrender_timeoutdefault_cssmax_html_sizeno_sandbox欠落値はコンストラクターのデフォルトを使用。ChromeRendererConfig型が一致しない場合、省略可能なキーはデフォルトへフォールバック。フレームワーク形式の構成配列に対応。
new ChromeHtmlRenderer(ChromeRendererConfig $config, ?LoggerInterface $logger = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null)構成、省略可能なロガー、省略可能な解析層 HTML ポリシー。ポリシー未指定時は DefaultHtmlSecurityPolicy を使用。ChromeHtmlRendererChrome のセットアップエラーは初回レンダリング時に発生。レンダラーは close() までブラウザープールを保持。
ChromeHtmlRenderer::render(string $html, float $widthPt, float $heightPt = 0)html: 入力フラグメント。widthPt: 用紙幅。heightPt: 目標の高さまたは自動。コンテンツの高さは heightPt <= 0 の場合に自動計算。ChromeRenderResultChromeRenderException。HTML サイズの検証失敗。CDP 経由でサブリソースのネットワークリクエストをブロック。
ChromeHtmlRenderer::getHtmlSecurityPolicy()なし。構成済みの解析層ポリシーを返却。HtmlSecurityPolicyInterface想定なし。Chrome のトランスポートレベル制御を補完。
ChromeHtmlRenderer::close()なし。ブラウザープールのクローズとクリア。void基盤ライブラリからブラウザーのシャットダウンエラーが表面化する可能性。ワーカーのシャットダウン時に呼び出し。

これらは、ChromeHtmlRenderer::render()(内部でこれらを呼び出します)を経由せず、レンダリング前に外部 HTML を自分で検証してラップする場合に使用します。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
ChromeSecurityPolicy::validate(string $html, int $maxSize)HTML 入力と最大バイトサイズ。サイズと許可されない構文の検証に合格した入力のみ受け入れ。voidChromeRenderException または検証例外。外部 HTML を受け入れる場合は、ブラウザーでのレンダリング前に実行。
ChromeSecurityPolicy::wrapHtml(string $html, int $viewportWidth, string $defaultCss = '')HTML フラグメント、ビューポート幅、省略可能なデフォルト CSS。フラグメントを包む完全なレンダリングドキュメントを生成。string検証または文字列構築のエラー。レンダラー固有の CSS をアプリケーションの HTML から分離して保持。

これらは、レンダリング出力(ChromeRenderResult)の読み取りと、ビューポートのサイズ設定や高さ計算で PDF ポイントと Chrome CSS ピクセルを相互変換するために使用します。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
new ChromeRenderResult(string $pdfData, float $widthPt, float $heightPt, float $contentHeightCssPx)生の PDF バイト列、幅、高さ、測定されたコンテンツの高さ。型付きコンストラクタープロパティ以上の検証なし。ChromeRenderResult想定なし。通常は ChromeHtmlRenderer::render() から返却。
ChromeRenderResult::getPdfData()なし。Chrome が生成した生の PDF バイト列を返却。string想定なし。埋め込み時に PdfReader および PageImporter と併用。
ChromeRenderResult::getWidthPt()なし。要求された幅をポイント単位で返却。float想定なし。インポートされたフォームオブジェクトのサイズ設定に使用。
ChromeRenderResult::getHeightPt()なし。計算された高さまたは要求された高さをポイント単位で返却。float想定なし。自動高さには印刷レイアウトのバッファーを含む。
ViewportCalculator::pointsToCssPx(float $pt)pt: PDF ポイント。72 PDF ポイントあたり 96 CSS px で変換。int想定なし。Chrome のビューポート幅に合わせて丸め。
ViewportCalculator::cssPxToPoints(float $px)px: CSS ピクセル。96 CSS px あたり 72 PDF ポイントで変換。float想定なし。自動高さの計算に使用。

これは中核的なインポート経路です。PdfReader で Chrome PDF バイト列を解析し、そのリーダーを PageImporter::import() に渡して埋め込み可能なページを取得します。その他の PdfReader メソッドは診断をサポートします。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
new PdfReader(string $data)data: 完全な PDF バイト列。パーサーは parse() まで未実行。PdfReader想定なし。Chrome 生成 PDF 向けの設計。
PdfReader::parse()なし。xref チェーンとトレーラーを解析。voidPdfParseException(無効な PDF 構造の場合)。object/page へのアクセス前に必須。
PdfReader::getObject(int $objNum)オブジェクト番号。解析済みオブジェクトを番号で resolve(解決)。PdfObjectPdfParseException(オブジェクトが存在しないか不正な形式の場合)。必ず parse() の後に使用。
PdfReader::getTrailer()なし。解析済みトレーラー辞書を返却。arrayPdfParseException(トレーラーデータが利用できない場合)。診断およびリビジョン分析で使用。
PdfReader::getObjectNumbers()なし。解析済みオブジェクト番号を返却。array解析後は想定なし。インポーター診断に有用。
PdfReader::getPage(int $pageIndex)pageIndex: 0 始まりのページインデックス。暗黙的な解析なし。PdfObjectPdfParseException(存在しないか範囲外の場合)。インポーターは既定でページ 0 を使用。
PdfReader::getPageContentStream(PdfObject $page)page: 解析済みページオブジェクト。コンテンツストリームを解決。stringPdfParseException(無効なストリームの場合)。空のストリームはインポーター失敗の原因。
PdfReader::getPageResources(PdfObject $page)page: 解析済みページオブジェクト。ページリソースを解決。arrayPdfParseException(無効なリソースの場合)。リソース辞書はフォームオブジェクトとともに埋め込み。
PdfReader::getPageMediaBox(PdfObject $page)page: 解析済みページオブジェクト。存在しない場合は A4 に近い寸法へフォールバック。arrayパーサーの失敗。PDF 空間の座標を返却。
PdfReader::resolveRef(mixed $value)解析済みの値。該当時はオブジェクト参照を再帰的に解決。mixedPdfParseException(無効な参照の場合)。インポーターワークフロー向けに公開された内部用途ヘルパー。
PdfReader::collectPageResources(PdfObject $page)page: 解析済みページオブジェクト。ページリソース参照の走査。arrayパーサーの失敗。インポートされたページとともに依存オブジェクトを埋め込むために使用。
PdfReader::getRevisionCount()なし。解析済み増分リビジョン数をカウント。int解析後は想定なし。署名済みまたは増分更新された PDF に有用。
PdfReader::getRevisionXRef(int $index)0 始まりのリビジョンインデックス。1 つのリビジョン xref テーブルを返却。RevisionXRefTablePdfParseException(無効なインデックスの場合)。低レベルのリビジョン診断に使用。
PdfReader::getRevisions()なし。解析済みのすべてのリビジョン xref テーブルを返却。array解析後は想定なし。読み取り専用のパーサー状態ビュー。
PageImporter::import(PdfReader $reader, int $pageIndex = 0)解析済みリーダーと 0 始まりのページインデックス。省略時は最初のページをインポート。ImportedFormXObjectPdfParseException(ページを抽出できない場合)。コンテンツストリーム、メディアボックス、リソース、参照されるオブジェクトを収集。

これらは、パーサーが返す、または内部で使用する値オブジェクトとヘルパーです。インポートされたオブジェクト、リソース、ストリーム、リビジョンテーブルを調査する際に使用します。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
new ImportedFormXObject(string $contentStream, array $mediaBox, array $embeddedObjects, array $resourcesDict)デコード済みコンテンツストリーム、メディアボックス、埋め込みオブジェクト、リソース辞書。自己完結したインポート済みフォームのペイロードを保持。ImportedFormXObject想定なし。通常は PageImporter::import() から返却。
ImportedFormXObject::getWidth()なし。インポート済みフォームの幅をポイント単位で返却。float想定なし。Chrome の出力をページに配置する際に使用。
ImportedFormXObject::getHeight()なし。インポート済みフォームの高さをポイント単位で返却。float想定なし。自動高さのレンダリング結果はこの値を通じて伝播。
ImportedFormXObject::getEmbeddedObjects()なし。インポート済みフォームが必要とするオブジェクトを返却。array想定なし。ライターコードはこれらのオブジェクトを使ってリソースを保持。
ImportedFormXObject::getResourcesDict()なし。インポート済みリソース辞書を返却。array想定なし。フォーム XObject の構築時に使用。
ImportedFormXObject::getMediaBox()なし。インポート済みメディアボックスを返却。array想定なし。配置の診断に使用。
ImportedFormXObject::getContentStream()なし。インポート済みページのコンテンツストリームを返却。string想定なし。writer/import 統合を想定。
new PdfObject(int $objectNumber, int $generation, array $dictionary, ?string $rawStreamData = null, ?string $decodedStreamData = null, ?string $rawDictionaryBytes = null)オブジェクト番号、世代、解析済み辞書、省略可能なストリームバイト列、省略可能なデコード済みストリーム、省略可能な生の辞書バイト列。解析済みオブジェクトの状態を保持。PdfObject想定なし。パーサー内部で作成。
PdfObject::getRawDictionaryBytes()なし。利用可能な場合は元の辞書バイト列を返却。`stringnull`想定なし。
PdfObject::getRawStreamData()なし。利用可能な場合は未デコードのストリームバイト列を返却。`stringnull`想定なし。
PdfObject::getDictionary()なし。解析済み辞書エントリを返却。array想定なし。読み取り専用のパーサービュー。
PdfObject::get(string $key)辞書キー。キーが存在しない場合は null を返却。mixed想定なし。呼び出し側による生辞書解析を不要化。
PdfObject::getRef(string $key)辞書キー。値が参照の場合、オブジェクト参照のタプルを返却。`arraynull`想定なし。
PdfObject::getArray(string $key)辞書キー。配列値を返却。利用できない場合は空の配列を返却。array想定なし。配列値を持つ辞書エントリ向けの便利なラッパー。
PdfObject::hasStream()なし。ストリームバイト列の有無を確認。bool想定なし。辞書のみのオブジェクトを区別。
PdfObject::getType()なし。辞書の /Type を読み取り。`stringnull`想定なし。
PdfObject::getSubtype()なし。辞書の /Subtype を読み取り。`stringnull`想定なし。
RevisionExtractor::extractRevision(string $pdfData, PdfReader $reader, int $revision)PDF バイト列、解析済みリーダー、0 始まりのリビジョンインデックス。1 つの増分リビジョンを抽出。stringPdfParseException(無効な境界の場合)。パーサーのテストおよび診断で使用。
RevisionExtractor::getRevisionBoundaries(string $pdfData, PdfReader $reader)PDF バイト列と解析済みリーダー。増分リビジョンのバイト範囲を検出。arrayPdfParseException(不正な形式の xref 構造の場合)。署名済みまたは増分更新された PDF の分析に有用。
`StreamDecoder::decode(string $data, stringarray $filter)`ストリームバイト列と 1 つ以上の PDF フィルター。フィルターを順番に適用。stringPdfParseException(サポートされないか無効なフィルターの場合)。
new ResourceCollector(PdfReader $reader)解析済みリーダー。収集対象オブジェクトの集合は空で開始。ResourceCollector想定なし。内部で PdfReader::collectPageResources() が使用。
ResourceCollector::traverse(mixed $value, int $depth = 0)解析済みの値と再帰の深さ。内部の深さ制限までリソース参照を走査。void無効な参照の場合はパーサーの失敗。ページインポートのリソースクロージャー向け内部ヘルパー。
ResourceCollector::getCollected()なし。収集済みリソースオブジェクトを返却。array想定なし。必ず traverse() の後に呼び出し。
new RevisionXRefTable(int $index, int $xrefOffset, array $xrefEntries, array $trailer, ?int $prevOffset)リビジョンインデックス、xref オフセット、xref エントリ、トレーラー、省略可能な前回オフセット。1 つの増分リビジョンのイミュータブルなスナップショット。RevisionXRefTable想定なし。パーサー内部で作成。
RevisionXRefTable::getObjectNumbers()なし。リビジョンテーブルでアクティブなオブジェクト番号を返却。array想定なし。低レベルのリビジョン診断 API。
RevisionXRefTable::getActiveObjectCount()なし。アクティブなオブジェクト数をカウント。int想定なし。パーサーのアサーションに有用。
RevisionXRefTable::hasRootUpdate()なし。リビジョンがドキュメントルートを更新するかどうかを報告。bool想定なし。増分更新の分析に有用。
RevisionXRefTable::getSize()なし。xref テーブルのサイズ値を返却。int想定なし。解析済み PDF xref メタデータを反映。

これらは、詳細なパーサー診断やフィクスチャを縮小する場合にのみ使用します。PdfReader の下層にあるレキサーとクロスリファレンス機構を公開しており、通常のインポートには必要ありません。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
new PdfTokenizer(string $data, int $offset = 0)PDF バイト列と省略可能な初期オフセット。オフセット 0 から開始。PdfTokenizer想定なし。低レベルの字句パーサー。
PdfTokenizer::getOffset()なし。現在のバイトオフセットを返却。int想定なし。パーサーエラー向けの診断ヘルパー。
PdfTokenizer::setOffset(int $offset)バイトオフセット。トークナイザーのカーソルを移動。voidPdfParseException(無効なオフセットの場合)。慎重に使用。パーサー状態は呼び出し側が所有。
PdfTokenizer::isEof()なし。カーソルが末尾に達したかどうかを確認。bool想定なし。低レベルのパーサーループヘルパー。
PdfTokenizer::skipWhitespace()なし。PDF の空白とコメントを読み飛ばして進行。void想定なし。トークン読み取り前に使用。
PdfTokenizer::readToken()なし。次のスカラートークンを読み取り。`stringintfloat
PdfTokenizer::readName()なし。PDF 名前オブジェクトを読み取り。stringPdfParseException(不正な形式の名前の場合)。名前のエスケープをデコード。
PdfTokenizer::readLiteralString()なし。リテラル文字列を読み取り。stringPdfParseException(不正な形式の文字列の場合)。ネストされた括弧とエスケープを処理。
PdfTokenizer::readHexString()なし。16 進文字列を読み取り。stringPdfParseException(不正な形式の 16 進数の場合)。奇数長の 16 進数はパーサー規則に従ってパディング。
PdfTokenizer::readNumber()なし。整数または浮動小数点数を読み取り。`intfloat`PdfParseException(無効な数値の場合)。
PdfTokenizer::readKeyword()なし。PDF キーワードを読み取り。stringPdfParseException(無効なキーワードの場合)。キーワード解析を一元化。
PdfTokenizer::readDictionary()なし。PDF 辞書を読み取り。arrayPdfParseException(不正な形式の辞書の場合)。オブジェクト、ストリーム、トレーラーに使用。
PdfTokenizer::readArray()なし。PDF 配列を読み取り。arrayPdfParseException(不正な形式の配列の場合)。再帰的なパーサーヘルパー。
PdfTokenizer::readValue()なし。サポート対象の任意の PDF 値を読み取り。mixedPdfParseException(不正な形式の値の場合)。一般的なパーサープリミティブ。
PdfTokenizer::readStreamData(int $length)ストリーム長。要求されたストリームバイト列を正確に読み取り。stringPdfParseException(無効なストリーム境界の場合)。辞書のストリーム長を解決した後に使用。
PdfTokenizer::peek(int $length = 1)バイト数。カーソルを進めずに先読み。string想定なし。パーサー分岐に有用。
PdfTokenizer::searchBackward(string $pattern, int $startFrom = 0)パターンと省略可能な開始オフセット。末尾または指定されたオフセットから後方検索。`intfalse`想定なし。
PdfTokenizer::readLine()なし。現在のオフセットから 1 行を読み取り。string想定なし。低レベルのスキャナーヘルパー。
CrossRefParser::parseXRefTable(string $data, int $offset)PDF バイト列と xref テーブルオフセット。従来型の xref テーブルエントリを解析。arrayPdfParseException(不正な形式の xref データの場合)。低レベルのパーサー API。
CrossRefParser::parseXRefStream(string $data, int $offset)PDF バイト列と xref ストリームオフセット。xref ストリームエントリを解析。arrayPdfParseException(不正な形式のストリームデータの場合)。最新の PDF xref ストリームをサポート。

EInvoiceServiceFactory は、省略可能な Premium e-invoice の契約を遅延解決します(存在しない場合は null を返します)。BrowserPool は、レンダラーが所有する Chrome のライフサイクルヘルパーで、直接管理するのは長時間実行されるワーカーの場合のみです。

シンボルパラメーター既定の動作戻り値スローまたは失敗の条件備考
EInvoiceServiceFactory::makeEmbedder()なし。Premium Pro の e-invoice サポートがインストールされていない限り null を返却。`EmbedderInterfacenull`省略可能なパッケージの構築エラー。
EInvoiceServiceFactory::makeValidator()なし。Premium Enterprise の検証サポートがインストールされていない限り null を返却。`ValidatorInterfacenull`省略可能なパッケージの構築エラー。
EInvoiceServiceFactory::makeDefaultProfile()なし。利用可能な場合はデフォルトの e-invoice プロファイルを返却。`ProfileInterfacenull`省略可能なパッケージのエラー。
EInvoiceServiceFactory::makeSchematronRunner()なし。Premium Enterprise の Schematron サポートがインストールされていない限り null を返却。`SchematronRunnerInterfacenull`省略可能なパッケージの構築エラー。
new BrowserPool(ChromeRendererConfig $config, ?LoggerInterface $logger = null)レンダラー構成と省略可能なロガー。ブラウザーは最初の getBrowser() で遅延起動。BrowserPoolブラウザー起動までは想定なし。レンダラーが所有するライフサイクルヘルパー。
BrowserPool::getBrowser()なし。現在の Chrome ブラウザーインスタンスを起動または返却。Browserブラウザーの起動エラー。レンダラーが所有するライフサイクルヘルパー。
BrowserPool::incrementRenderCount()なし。レンダリングカウンターを増やし、プールのポリシーが要求する場合はローテーション。voidブラウザーのライフサイクルエラー。長時間実行されるワーカーで使用。
BrowserPool::close()なし。管理対象のブラウザーインスタンスをクローズ。voidブラウザーのシャットダウンエラー。ワーカーのシャットダウン時に呼び出し。
  • レンダラーは、信頼されない HTML 向けのブラウザーサンドボックスではありません。レンダリング前に、サイズ、リソースポリシー、呼び出し側の認可を検証してください。
  • パーサー API は意図的に限定的に設計されています。これらは Chrome 出力のインポート用であり、一般的な PDF の修復用ではありません。
  • 長時間稼働するワーカーでは、レンダラーを明示的に閉じてください。