コンテンツにスキップ

NextPDF Laravel パッケージの構成

config/nextpdf.phpphp artisan vendor:publish --tag=nextpdf-config で公開されます。各キーには、環境変数によるフォールバックとハードコードされたデフォルト値があります。このページでは、パッケージの config/nextpdf.php に記述されているとおりに各キーを説明します。

Terminal window
php artisan vendor:publish --tag=nextpdf-config

プロバイダーは register() の実行中に、nextpdf 構成キー配下へパッケージのデフォルト値をマージします。したがって、未設定のキーは、公開前であっても以下の値にフォールバックします。

ほとんどの環境変数は、NEXTPDF_* という名前か、レガシーの TCPDF_* という名前のいずれかを受け付けます。レガシーのプレフィックスは UPGRADE.md に記載された移行期間中はサポートされますが、新規デプロイでは NEXTPDF_* 形式を使用してください。構成ファイルは、環境変数 → 公開ファイルの値 → パッケージのデフォルト値の順に値を resolve(解決)します。

キー環境変数(主)デフォルト効果
page_formatNEXTPDF_PAGE_FORMATA4デフォルトのページ形式(A4、A3、A5、Letter、Legal、Tabloid)
orientationNEXTPDF_ORIENTATIONP縦向き(P)または横向き(L
unitNEXTPDF_UNITmm測定単位(pt、mm、cm、in)
defaults.creatorNEXTPDF_CREATORNextPDFドキュメント作成者のメタデータ。PdfDocumentInterface バインディングへの適用
defaults.authorNEXTPDF_AUTHOR(空)作成者のメタデータ。空でない場合のみ適用
defaults.languageNEXTPDF_LANGenドキュメントの言語。ドキュメントバインディングへの適用
defaults.margin_top / _right / _bottom / _left10デフォルトの余白
defaults.font_familydejavusansデフォルトのフォントファミリー
defaults.font_size12デフォルトのフォントサイズ
defaults.trim_boxnullポイント単位の TrimBox [left, bottom, right, top]、または null
defaults.bleed_boxnullポイント単位の BleedBox [left, bottom, right, top]、または null

プロバイダーは、defaults.creatordefaults.language、および(設定されている場合は)defaults.author を、新しく解決されたすべてのドキュメントに適用します。defaults.author の分岐は、値が空の場合にスキップされます。

キー環境変数(主)デフォルト効果
pdfaNEXTPDF_PDFAnullPDF/A のアーカイブレベル(null44e4f)。null 以外を指定するとドキュメントバインディングで PDF/A が有効になり、追加要件として nextpdf/premium が必要
fonts_pathNEXTPDF_FONTS_PATHresource_path('fonts')追加の TrueType フォント用ディレクトリ。フォントレジストリの検索パスを駆動
cache_pathNEXTPDF_CACHE_PATHstorage_path('framework/cache/tcpdf')解析済みフォントと一時ファイルのキャッシュディレクトリ
icc_profile.rgbNEXTPDF_ICC_PROFILE_RGBnullRGB ICC プロファイルのパス。PDF/A に必要
icc_profile.cmykNEXTPDF_ICC_PROFILE_CMYKnull印刷ワークフロー用のオプションの CMYK ICC プロファイル
font_cache_lockingNEXTPDF_FONT_CACHE_LOCKINGtrue並行するキューワーカーの書き込み時に破損を防ぐため、フォントキャッシュに flock を使用

pdfa に null 以外の値を設定するには Premium 階層が必要です。nextpdf/premium がない状態で pdfa を設定してドキュメントバインディングを解決すると、PDF/A バージョン型に対して class-not-found エラーが発生します。このページでは Premium のアーカイブ動作については説明しません。Premium のドキュメントを参照してください。

キー環境変数(主)デフォルト効果
preload_fonts[]ワーカー起動時に解析されるフォントファイル絶対パスのリスト。ウォームアップ後、フォントレジストリはロック
image_cache_mbNEXTPDF_IMAGE_CACHE_MB50MB 単位の LRU イメージキャッシュ予算。0 はキャッシュを無効化。プロバイダーレベルで強制される上限なし

イメージキャッシュ予算には、プロバイダー側で強制される上限はありません。コンテナのメモリ制限または php.inimemory_limit を適用して、上限を設けてください。構成ファイルでは、実用的な最大値として 256 MB を推奨しています。

キー環境変数(主)デフォルト効果
signature.enabledNEXTPDF_SIGN_ENABLEDfalsefalse の場合(または証明書が空の場合)、SignerInterface の解決先は null
signature.certificateNEXTPDF_SIGN_CERTnull署名証明書のパス
signature.private_keyNEXTPDF_SIGN_KEYnull秘密鍵のパス
signature.passwordNEXTPDF_SIGN_PASSWORD(空)鍵のパスフレーズ
signature.extra_certs[]中間 CA 証明書のパス
signature.levelNEXTPDF_SIGN_LEVELB-B署名者に渡される PAdES ベースラインレベル

ここで説明する Core パッケージには署名者の具象実装は含まれていません。nextpdf/premium が署名者を提供するまでは、SignerInterface バインディングは null に解決されます。Premium では、level: B-B により PAdES B-B ベースライン署名が生成されます。より上位の PAdES ベースラインは、構成済みのタイムスタンプ局と Premium の機能に依存します。このページではそれらのレベルについては説明しません。

キー環境変数(主)デフォルト効果
tsa.urlNEXTPDF_TSA_URLnullTSA エンドポイント。空の場合、TsaClient の解決先は null
tsa.username / tsa.passwordNEXTPDF_TSA_USERNAME / _PASSWORD(空)TSA の HTTP 認証情報
tsa.cert / tsa.keyNEXTPDF_TSA_CERT / _KEYnullTSA への mTLS 用クライアント証明書/鍵
tsa.timeoutNEXTPDF_TSA_TIMEOUT30PSR-18 クライアントの HTTP タイムアウト(秒)
tsa.pinned_public_keys[]Base64 形式の SHA-256 SPKI ピン(RFC 7469)。空にするとピン留めが無効
tsa.warn_on_key_rotationNEXTPDF_TSA_WARN_ROTATIONtrueTSA がピン留めされていない SPKI を提示した場合の警告
tsa.allow_insecure_httpNEXTPDF_TSA_ALLOW_INSECURE_HTTPfalseTSA への平文 HTTP の許可。本番環境では false のままにすること
キー環境変数(主)デフォルト効果
ocsp_cache.enabledNEXTPDF_OCSP_CACHE_ENABLEDtrue検証中の OCSP レスポンスキャッシュ
ocsp_cache.ttlNEXTPDF_OCSP_CACHE_TTL86400キャッシュの TTL(秒)
ocsp_cache.directoryNEXTPDF_OCSP_CACHE_DIRnullキャッシュディレクトリ。null の場合はメモリ内のみで保持
キー環境変数(主)デフォルト効果
queue.connectionNEXTPDF_QUEUE_CONNECTIONnullキュー接続。null の場合はデフォルト接続を使用
queue.queueNEXTPDF_QUEUE_NAMEpdfキュー名。GeneratePdfJob のプッシュ先
queue.timeoutNEXTPDF_QUEUE_TIMEOUT120ジョブごとのタイムアウト(秒)
キー環境変数(主)デフォルト効果
artisan.chrome_binaryNEXTPDF_ARTISAN_CHROME_BINARY環境変数の値、または未設定Chrome/Chromium バイナリへのパス
artisan.render_timeoutNEXTPDF_ARTISAN_RENDER_TIMEOUT30レンダリングのタイムアウト(秒)
artisan.default_cssNEXTPDF_ARTISAN_DEFAULT_CSS(空)レンダリングされた HTML に注入されるデフォルト CSS
artisan.no_sandboxNEXTPDF_ARTISAN_NO_SANDBOXfalseChrome サンドボックスの無効化
artisan.max_html_sizeNEXTPDF_ARTISAN_MAX_HTML_SIZE5000000HTML 入力の最大サイズ(バイト)

この artisan セクションは、Chrome ブラウザーファクトリクラスが存在する場合(nextpdf/artisan 拡張)にのみ、ドキュメントバインディングへ適用されます。存在しない場合、このセクションは無視されます。

resource: config/nextpdf.php (subset, verified against the published file)
<?php
declare(strict_types=1);
return [
'page_format' => env('NEXTPDF_PAGE_FORMAT', 'A4'),
'orientation' => env('NEXTPDF_ORIENTATION', 'P'),
'unit' => env('NEXTPDF_UNIT', 'mm'),
'pdfa' => env('NEXTPDF_PDFA', null),
'fonts_path' => env('NEXTPDF_FONTS_PATH', resource_path('fonts')),
'preload_fonts' => [],
'image_cache_mb' => env('NEXTPDF_IMAGE_CACHE_MB', 50),
'queue' => [
'connection' => env('NEXTPDF_QUEUE_CONNECTION', null),
'queue' => env('NEXTPDF_QUEUE_NAME', 'pdf'),
'timeout' => env('NEXTPDF_QUEUE_TIMEOUT', 120),
],
];
  • signature.enabled = true であっても、signature.certificate が空のままでは、SignerInterfacenull に解決されます。両方を設定する必要があります。
  • tsa.url = null にすると、TsaClient は強制的に null になります。これは、他の tsa.* キーが設定されていても同様です。
  • signature.level = null は、署名者側で PAdES B-B にフォールバックします。
  • image_cache_mbnull を設定すると(0 ではなく)、50 MB のデフォルト値にフォールバックします。0 は明示的にキャッシュを無効にします。
  • レガシーの TCPDF_* 環境変数は引き続き読み取られますが、非推奨です。NEXTPDF_* に移行してください。

構成の読み取りは O(1) の配列アクセスです。preload_fonts は、ワーカー起動時に 1 回だけ行う O(f) の解析と引き換えに、初回リクエストのレイテンシを低減します。image_cache_mb を大きくすると、プロセス常駐メモリと引き換えに、繰り返し発生する画像デコードを削減します。

tsa.allow_insecure_http はタイムスタンプの信頼性を弱めるため、本番環境では false のままにする必要があります。TSA の URL は信頼できる構成からのみ取得すべきです。管理画面経由で設定可能にする場合は、リクエスト偽造を緩和するために egress ファイアウォールまたは DNS ポリシーを適用してください。/integrations/laravel/security-and-operations/ を参照してください

構成ファイルの形式を定める規範的な標準はありません。すべてのキーは、記載されたリビジョンのパッケージ config/nextpdf.php に対して検証されています。署名レベルのセマンティクスは Premium によって規定されており、この Core ページの範囲外です。

signature セクションと tsa セクションは、nextpdf/premium がインストールされている場合に Premium の署名機能を駆動します。これはオプションの Enterprise 機能です。ここで説明する Core パッケージでは、これを利用するためのコード変更は不要です。https://nextpdf.dev/get-license/?intent=laravel-signing を参照してください。

  • /integrations/laravel/install/ — 構成ファイルを公開する
  • /integrations/laravel/production-usage/ — 実際のコントローラーに適用される構成
  • /integrations/laravel/security-and-operations/ — TSA とキュー設定のハードニング
  • /integrations/laravel/boot-and-discovery/ — 各キーが駆動するバインディング