Skip to content

Embed PDF JavaScript⚓︎

Warning

Do NOT trust user input; always sanitize it. Although PDF JavaScript runs in a sandbox, arbitrary execution is dangerous and can lead to remote code execution vulnerabilities.

These examples use sample_template.pdf.

PDFs can execute JavaScript during interactions if supported by the viewer. PyPDFForm provides Python APIs and CLI commands to embed scripts into both the PDF document and its form fields.

In CLI examples, field-level scripts are configured in data.json and applied with update field, unless the section says otherwise.

The examples below embed a script that displays an alert when the pointer hovers over the test field:

app.alert("Hello World!");
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_hovered_over_javascript = "./alert.js"

form.write("output.pdf")
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_hovered_over_javascript = open("./alert.js")  # in practice, use a context manager

form.write("output.pdf")
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_hovered_over_javascript = open("./alert.js").read()  # in practice, use a context manager

form.write("output.pdf")
app.alert("Hello World!");
{
    "test": {
        "on_hovered_over_javascript": "./alert.js"
    }
}
pypdfform update field sample_template.pdf -f data.json -o output.pdf
Tip

For supported Acrobat JavaScript APIs, see the Adobe JavaScript API reference.

Execute JavaScript on hover⚓︎

Set on_hovered_over_javascript to run code when the pointer hovers over a field:

this.getField("test").value = "hovered over";
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_hovered_over_javascript = "./script.js"

form.write("output.pdf")
this.getField("test").value = "hovered over";
{
    "test": {
        "on_hovered_over_javascript": "./script.js"
    }
}
pypdfform update field sample_template.pdf -f data.json -o output.pdf

Execute JavaScript when hover ends⚓︎

Set on_hovered_off_javascript to run code when the pointer leaves a field:

this.getField("test").value = "hovered off";
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_hovered_off_javascript = "./script.js"

form.write("output.pdf")
this.getField("test").value = "hovered off";
{
    "test": {
        "on_hovered_off_javascript": "./script.js"
    }
}
pypdfform update field sample_template.pdf -f data.json -o output.pdf

Execute JavaScript on mouse press⚓︎

Set on_mouse_pressed_javascript to run code when a mouse button is pressed inside a field:

this.getField("test").value = "mouse pressed";
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_mouse_pressed_javascript = "./script.js"

form.write("output.pdf")
this.getField("test").value = "mouse pressed";
{
    "test": {
        "on_mouse_pressed_javascript": "./script.js"
    }
}
pypdfform update field sample_template.pdf -f data.json -o output.pdf

Execute JavaScript on mouse release⚓︎

Set on_mouse_released_javascript to run code when a mouse button is released inside a field:

this.getField("test").value = "mouse released";
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_mouse_released_javascript = "./script.js"

form.write("output.pdf")
this.getField("test").value = "mouse released";
{
    "test": {
        "on_mouse_released_javascript": "./script.js"
    }
}
pypdfform update field sample_template.pdf -f data.json -o output.pdf

Execute JavaScript on focus⚓︎

Set on_focused_javascript to run code when a field gains focus:

this.getField("test").value = "focused";
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_focused_javascript = "./script.js"

form.write("output.pdf")
this.getField("test").value = "focused";
{
    "test": {
        "on_focused_javascript": "./script.js"
    }
}
pypdfform update field sample_template.pdf -f data.json -o output.pdf

Execute JavaScript on blur⚓︎

Set on_blurred_javascript to run code when a field loses focus:

this.getField("test").value = "not focused";
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.widgets["test"].on_blurred_javascript = "./script.js"

form.write("output.pdf")
this.getField("test").value = "not focused";
{
    "test": {
        "on_blurred_javascript": "./script.js"
    }
}
pypdfform update field sample_template.pdf -f data.json -o output.pdf

Execute JavaScript on PDF open⚓︎

Use PdfWrapper.on_open_javascript to set or read the script that runs when the PDF opens:

this.getField("test").value = "opened";
from PyPDFForm import PdfWrapper

form = PdfWrapper("sample_template.pdf")
form.on_open_javascript = "./script.js"
print(form.on_open_javascript)

form.write("output.pdf")

Use update script to set document-level JavaScript that runs when the PDF opens:

this.getField("test").value = "opened";
pypdfform update script sample_template.pdf -s script.js -o output.pdf