PDF annotation actions support
A PDF action is similar to a web hyperlink, but it’s much more flexible. Nutrient Web SDK implements common actions as defined in Adobe’s PDF Reference (page 417ff).
Action | Nutrient class | Use case |
---|---|---|
GoTo | GoToAction |
Go to a destination (page) in the current document. |
URI | URIAction |
Resolve a Uniform Resource Identifier (web link). |
SubmitForm | SubmitFormAction |
Send data to a Uniform Resource Locator. |
ResetForm | ResetFormAction |
Set fields to their default values. |
JavaScript | JavaScriptAction |
Execute a script. |
GoToAction
A GoTo action can define a different pageIndex
in the same document. Clicking on it updates the scroll position to make the page visible, but it doesn’t update the zoom level.
URIAction
A URI action contains a URI. When executing this annotation, Nutrient uses window.open
to create a new browser tab, which also clears the opener as a security measurement to avoid allowing the target page to have access to your PDF state:
let newWindow = window.open(action.uri, "_blank"); newWindow.opener = null;
var newWindow = window.open(action.uri, "_blank"); newWindow.opener = null;
JavaScriptAction
Working with PDF JavaScript is available when using the Web SDK in standalone operational mode.
This is a PDF action for running arbitrary JavaScript. Actions are executed on a click. WidgetAnnotation
and form fields can also define an additionalActions
field, which is a dictionary of event name and action pairs. For more information about the additional actions of WidgetAnnotation
s and FormField
s, refer to the API documentation.
You can learn more about the security problems when using _blank
in this article from JitBit.
Refer to an individual browser’s documentation for a list of supported URI protocols. The most used protocols (http
, https
, and mailto
) are supported in all major browsers.
Here’s an example showing how to run JavaScript code when a WidgetAnnotation
is focused. This is done using the additionalActions
field:
const widget = new PSPDFKit.Annotations.WidgetAnnotation({ id: PSPDFKit.generateInstantId(), pageIndex: 0, formFieldName: "MyFormField", boundingBox: new PSPDFKit.Geometry.Rect({ left: 100, top: 75, width: 200, height: 80 }), additionalActions: { onFocus: new PSPDFKit.Actions.JavaScriptAction({ script: "alert('onFocus')" }) } }); const formField = new PSPDFKit.FormFields.TextFormField({ name: "MyFormField", annotationIds: new PSPDFKit.Immutable.List([widget.id]), value: "Text shown in the form field" }); instance.create([widget, formField]);