Skip to content

JavaScript

PDFドキュメントには、ビューアで実行される埋め込みJavaScriptを含めることができます。TCPDF-Nextは Content\JavaScriptManager を通じてドキュメントレベルのスクリプトを追加するメソッドを提供しており、Document のフルーエントAPIからアクセスできます。

すべてのメソッドは static を返すため、メソッドチェーンが可能です。

クイックリファレンス

メソッド用途
includeJS()ドキュメントレベルのJavaScriptを追加(PDF開封時に実行)
addJavascriptObject()JavaScriptを名前付きPDFオブジェクトとして追加

基本的な使用例

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Interactive Form with JavaScript', newLine: true)

    // ドキュメントレベルのJavaScript
    ->includeJS('
        function validateEmail(field) {
            var email = field.value;
            var re = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            if (!re.test(email)) {
                app.alert("Please enter a valid email address.");
                return false;
            }
            return true;
        }

        function calculateTotal() {
            var qty = this.getField("qty").value;
            var price = this.getField("price").value;
            this.getField("total").value = (qty * price).toFixed(2);
        }
    ')

    // JavaScriptを使用するフォームフィールド
    ->textField('email', 45, null, 80, 8, [
        'onBlur' => 'validateEmail(event.target)',
    ])
    ->textField('qty', 45, null, 30, 8)
    ->textField('price', 80, null, 30, 8)
    ->textField('total', 115, null, 40, 8, [
        'readonly' => true,
    ]);

WARNING

JavaScriptのサポートはPDFビューアによって異なります。Adobe AcrobatはAcrobat JavaScript APIを完全にサポートしています。Foxit Readerはほとんどの機能をサポートしています。ブラウザベースのビューアやプレビューアプリは、通常PDFのJavaScriptを実行しません。

includeJS()

php
$pdf->includeJS(string $script): static

PDFが開かれたときに実行されるドキュメントレベルのJavaScriptを追加します。関数定義、グローバル変数、初期化ロジックに使用します。

パラメータ説明
$scriptstring生のJavaScriptコード

複数回の呼び出しで追加のスクリプトが追記されます。追加された順番で実行されます。

addJavascriptObject()

php
$pdf->addJavascriptObject(string $script): static

JavaScriptを名前付きPDFオブジェクトとして追加します。スクリプトがドキュメント開封時に実行されるのではなく、他のPDFオブジェクト(アクション、注釈)から参照される必要がある場合に便利です。

フォームフィールドのJavaScriptアクション

フォームフィールドは、オプション配列を通じてJavaScriptアクショントリガーをサポートしています。これらのアクションは、ユーザーがフィールドを操作した際に発火します。

アクショントリガー
onFocusフィールドがフォーカスを受け取った時
onBlurフィールドがフォーカスを失った時
onChangeフィールドの値が変更された時
validate値がコミットされる前
calculate依存フィールドが変更された時
format値がコミットされた後(表示フォーマット)
keystrokeキーストロークごと
php
$pdf->textField('price', 45, null, 40, 8, [
    'format'    => 'AFNumber_Format(2, 0, 0, 0, "$", true);',
    'keystroke' => 'AFNumber_Keystroke(2, 0, 0, 0, "$", true);',
    'validate'  => 'if (event.value < 0) { app.alert("Price cannot be negative."); event.rc = false; }',
]);

印刷トリガーとオープンアクション

ドキュメントが開かれたときや印刷されたときにロジックを実行します:

php
$pdf->includeJS('
    app.alert("Welcome! Please fill in all required fields.");
')
->includeJS('
    var pp = this.addScript("willPrint", "app.alert(\'This document is confidential.\');");
');

ヒント

  • スクリプトは簡潔に保ちましょう。大きなブロックはファイルサイズを増加させ、ドキュメントの読み込みを遅くします。
  • Acrobat JavaScript APIはAdobeのJavaScript for Acrobat API Referenceに文書化されています。
  • 配布前にAdobe Acrobatでインタラクティブ PDFをテストし、完全な互換性を確認してください。
  • PDF/A標準ではJavaScriptが禁止されています。PDF/A準拠を目標とする場合はスクリプトを含めないでください。
  • 計算には、可能な限り組み込みのAcrobat関数(AFNumber_FormatAFSimple_Calculate など)を使用してください。

LGPL-3.0-or-later ライセンスの下で公開されています。