Skip to content

JavaScript

Documentos PDF podem conter JavaScript incorporado que é executado no visualizador. O TCPDF-Next fornece métodos para adicionar scripts em nível de documento através de Content\JavaScriptManager, acessado via a API fluente do Document.

Todos os métodos retornam static, então cada chamada pode ser encadeada.

Referência Rápida

MétodoPropósito
includeJS()Adicionar JavaScript em nível de documento (executa quando o PDF abre)
addJavascriptObject()Adicionar JavaScript como objeto PDF nomeado

Exemplo Básico

php
use Yeeefang\TcpdfNext\Core\Document;

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

    // JavaScript em nível de documento
    ->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);
        }
    ')

    // Campos de formulário que usam o 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

O suporte a JavaScript varia por visualizador PDF. Adobe Acrobat possui suporte completo para a API JavaScript do Acrobat. Foxit Reader suporta a maioria das funcionalidades. Visualizadores baseados em navegador e aplicativos de pré-visualização geralmente não executam JavaScript de PDF.

includeJS()

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

Adiciona JavaScript em nível de documento que é executado quando o PDF é aberto. Use para definições de funções, variáveis globais e lógica de inicialização.

ParâmetroTipoDescrição
$scriptstringCódigo JavaScript bruto

Múltiplas chamadas adicionam scripts adicionais. Eles são executados na ordem em que foram adicionados.

addJavascriptObject()

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

Adiciona JavaScript como um objeto PDF nomeado. Útil quando scripts precisam ser referenciados por outros objetos PDF (ações, anotações) em vez de executar na abertura do documento.

Ações JavaScript em Campos de Formulário

Campos de formulário suportam gatilhos de ação JavaScript através do array de opções. Essas ações disparam em resposta à interação do usuário com o campo.

AçãoGatilho
onFocusCampo recebe foco
onBlurCampo perde foco
onChangeValor do campo muda
validateAntes do valor ser confirmado
calculateQuando campos dependentes mudam
formatApós o valor ser confirmado (formatar exibição)
keystrokeEm cada tecla pressionada
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; }',
]);

Gatilho de Impressão e Ações de Abertura

Execute lógica quando o documento é aberto ou impresso:

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

Dicas

  • Mantenha scripts concisos. Blocos grandes aumentam o tamanho do arquivo e atrasam a abertura do documento.
  • A API JavaScript do Acrobat está documentada na Referência da API JavaScript para Acrobat da Adobe.
  • Teste PDFs interativos no Adobe Acrobat para garantir total compatibilidade antes de distribuir.
  • Padrões PDF/A proíbem JavaScript. Não inclua scripts se você almeja conformidade PDF/A.
  • Para cálculos, use funções embutidas do Acrobat (AFNumber_Format, AFSimple_Calculate, etc.) quando possível.

Distribuído sob a licença LGPL-3.0-or-later.