JavaScript
Dokumen PDF bisa berisi JavaScript tertanam yang dieksekusi di viewer. TCPDF-Next menyediakan method untuk menambahkan script level dokumen melalui Content\JavaScriptManager, diakses melalui API fluent Document.
Semua method mengembalikan static, sehingga setiap panggilan bisa di-chain.
Referensi Cepat
| Method | Tujuan |
|---|---|
includeJS() | Tambah JavaScript level dokumen (dijalankan saat PDF dibuka) |
addJavascriptObject() | Tambah JavaScript sebagai named PDF object |
Contoh Dasar
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Interactive Form with JavaScript', newLine: true)
// JavaScript level dokumen
->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);
}
')
// Field form yang menggunakan 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
Dukungan JavaScript bervariasi antar PDF viewer. Adobe Acrobat memiliki dukungan penuh untuk Acrobat JavaScript API. Foxit Reader mendukung sebagian besar fitur. Viewer berbasis browser dan aplikasi preview umumnya tidak mengeksekusi JavaScript PDF.
includeJS()
$pdf->includeJS(string $script): staticMenambahkan JavaScript level dokumen yang dieksekusi saat PDF dibuka. Gunakan ini untuk definisi fungsi, variabel global, dan logika inisialisasi.
| Parameter | Tipe | Deskripsi |
|---|---|---|
$script | string | Kode JavaScript mentah |
Pemanggilan berulang menambahkan script tambahan. Mereka dieksekusi sesuai urutan penambahan.
addJavascriptObject()
$pdf->addJavascriptObject(string $script): staticMenambahkan JavaScript sebagai named PDF object. Berguna saat script perlu direferensikan oleh objek PDF lain (aksi, anotasi) alih-alih dijalankan saat dokumen dibuka.
Aksi JavaScript pada Field Form
Field form mendukung trigger aksi JavaScript melalui array opsi mereka. Aksi ini dijalankan sebagai respons terhadap interaksi user dengan field.
| Aksi | Trigger |
|---|---|
onFocus | Field menerima fokus |
onBlur | Field kehilangan fokus |
onChange | Nilai field berubah |
validate | Sebelum nilai di-commit |
calculate | Saat field dependen berubah |
format | Setelah nilai di-commit (format tampilan) |
keystroke | Pada setiap keystroke |
$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; }',
]);Trigger Print dan Open Action
Jalankan logika saat dokumen dibuka atau dicetak:
$pdf->includeJS('
app.alert("Welcome! Please fill in all required fields.");
')
->includeJS('
var pp = this.addScript("willPrint", "app.alert(\'This document is confidential.\');");
');Tips
- Jaga script tetap ringkas. Blok besar meningkatkan ukuran file dan memperlambat pembukaan dokumen.
- Acrobat JavaScript API didokumentasikan di JavaScript for Acrobat API Reference milik Adobe.
- Uji PDF interaktif di Adobe Acrobat untuk memastikan kompatibilitas penuh sebelum mendistribusikan.
- Standar PDF/A melarang JavaScript. Jangan sertakan script jika Anda menargetkan kepatuhan PDF/A.
- Untuk kalkulasi, gunakan fungsi built-in Acrobat (
AFNumber_Format,AFSimple_Calculate, dll.) jika memungkinkan.