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): staticPDFが開かれたときに実行されるドキュメントレベルのJavaScriptを追加します。関数定義、グローバル変数、初期化ロジックに使用します。
| パラメータ | 型 | 説明 |
|---|---|---|
$script | string | 生のJavaScriptコード |
複数回の呼び出しで追加のスクリプトが追記されます。追加された順番で実行されます。
addJavascriptObject()
php
$pdf->addJavascriptObject(string $script): staticJavaScriptを名前付き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_Format、AFSimple_Calculateなど)を使用してください。