Skip to content

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

MethodTujuan
includeJS()Tambah JavaScript level dokumen (dijalankan saat PDF dibuka)
addJavascriptObject()Tambah JavaScript sebagai named PDF object

Contoh Dasar

php
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()

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

Menambahkan JavaScript level dokumen yang dieksekusi saat PDF dibuka. Gunakan ini untuk definisi fungsi, variabel global, dan logika inisialisasi.

ParameterTipeDeskripsi
$scriptstringKode JavaScript mentah

Pemanggilan berulang menambahkan script tambahan. Mereka dieksekusi sesuai urutan penambahan.

addJavascriptObject()

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

Menambahkan 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.

AksiTrigger
onFocusField menerima fokus
onBlurField kehilangan fokus
onChangeNilai field berubah
validateSebelum nilai di-commit
calculateSaat field dependen berubah
formatSetelah nilai di-commit (format tampilan)
keystrokePada setiap 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; }',
]);

Trigger Print dan Open Action

Jalankan logika saat dokumen dibuka atau dicetak:

php
$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.

Didistribusikan di bawah lisensi LGPL-3.0-or-later.