PDF Actions JSON Format Schema

Flow Types

We use Flow type declarations to specify the format of Instant JSON records.

The optional keys are specified as follows:

{ optionalKey?: value; }

To save traffic, these keys should not be included in the record if the value is undefined.

Action Types

Only a subset of all possible annotation actions is supported. These can be triggered when clicking or pressing on a link annotation:

// Example of an Instant JSON payload for a `GoToAction` action:
{
	"pageIndex": 0,
	"type": "goTo"
}
declare type BaseAction = {
	subAction?: Action,
};

declare type GoToAction = BaseAction & {
	type: 'goTo',
	// The `pageIndex` you want to go to.
	pageIndex: number,
};

declare type GoToRemoteAction = BaseAction & {
	type: 'goToRemote',
	relativePath: string,
	namedDestination: string,
};

declare type GoToEmbeddedAction = BaseAction & {
	type: 'goToEmbedded',
	newWindow: boolean,
	relativePath: string,
	targetType: 'parent' | 'child',
};

declare type LaunchAction = BaseAction & {
	type: 'launch',
	filePath: string,
};

declare type URIAction = BaseAction & {
	type: 'uri',
	// URI, e.g.: `https://pspdfkit.com`
	uri: string,
};

declare type AnnotationReference = {
	fieldName?: string,
	pdfObjectId?: number,
};

declare type HideAction = BaseAction & {
	type: 'hide',
	hide: boolean,
	annotationReferences: Array<AnnotationReference>,
};

declare type JavaScriptAction = BaseAction & {
	type: 'javaScript',
	script: string,
};

declare type SubmitFormFlags = Array<
	| 'includeExclude'
	| 'includeNoValueFields'
	| 'exportFormat'
	| 'getMethod'
	| 'submitCoordinated'
	| 'xfdf'
	| 'includeAppendSaves'
	| 'includeAnnotations'
	| 'submitPDF'
	| 'canonicalFormat'
	| 'excludeNonUserAnnotations'
	| 'excludeFKey'
	| 'embedForm',
>;

declare type SubmitFormAction = BaseAction & {
	type: 'submitForm',
	uri: string,
	flags: SubmitFormFlags,
	fields?: Array<AnnotationReference>,
};

declare type ResetFormAction = BaseAction & {
	type: 'resetForm',
	flags?: 'includeExclude',
	fields?: Array<AnnotationReference>,
};

declare type NamedAction = BaseAction & {
	type: 'named',
	action:
		| 'nextPage'
		| 'prevPage'
		| 'firstPage'
		| 'lastPage'
		| 'goBack'
		| 'goForward'
		| 'goToPage'
		| 'find'
		| 'print'
		| 'outline'
		| 'search'
		| 'brightness'
		| 'zoomIn'
		| 'zoomOut'
		| 'saveAs'
		| 'info',
};

declare type Action =
	| GoToAction
	| GoToRemoteAction
	| GoToEmbeddedAction
	| LaunchAction
	| URIAction
	| HideAction
	| JavaScriptAction
	| SubmitFormAction
	| ResetFormAction
	| NamedAction;