Importing and Exporting Annotations in Instant JSON

Annotations can be imported and exported to a document using PSPDFKit’s Instant JSON format, which keeps all the important properties of annotations and supports long-term storage. Refer to the Instant JSON documentation for more details about the format.

A single annotation JSON can be generated by calling the ToJson() method of our public API:

var annotation = _annotationManager.AnnotationFactory.CreateAnnotation<Line>();
annotation.StartPoint = new System.Drawing.PointF(10, 10);
annotation.EndPoint = new System.Drawing.PointF(100, 100);
annotation.BoundingBox = new Sdk.Models.Geometry.Rectangle()
 {
    Left = 0,
    Top = 0,
    Width = 100,
    Height = 100
};
var annotationJson = annotation.ToJson();
// Annotation Instant JSON.
{
	"startPoint": [10, 10],
	"endPoint": [100, 100],
	"strokeColor": "#2293FB",
	"strokeWidth": 5,
	"blendMode": "normal",
	"bbox": [0, 0, 100, 100],
	"createdAt": "2024-02-09T10:21:17.1203525+00:00",
	"opacity": 1,
	"pageIndex": 0,
	"updatedAt": "2024-02-09T10:21:17.1203525+00:00",
	"v": 2,
	"type": "pspdfkit/shape/line"
}

The annotation JSON that’s obtained can later be deserialized using the counterpart to CreateAnnotation(), PSPDFKit.Api.Annotation.IAnnotationFactory.CreateAnnotation():

var annotation = _annotationFactory.CreateAnnotation(JObject.Parse(annotationJson));

Importing Annotations in Instant JSON

If the Document Editor component is included in the license, ImportInstantJsonAsync can be used to import Instant JSON via IAnnotationManager.ImportInstantJsonAsync():

await _annotationManager.ImportInstantJsonAsync(
  JObject.Parse(@"{
    bbox: [100, 150, 200, 75],
    blendMode: ""normal"",
    createdAt: ""1970-01-01T00:00:00Z"",
    id: ""01F73GJ4RPENTCMFSCJ5CSFT5G"",
    name: ""01F73GJ4RPENTCMFSCJ5CSFT5G"",
    opacity: 1,
    pageIndex: 0,
    strokeColor: ""#2293FB"",
    strokeWidth: 5,
    type: ""pspdfkit/shape/rectangle"",
    updatedAt: ""1970-01-01T00:00:00Z"",
    v: 1
  }"));

Importing Instant JSON annotations can also be achieved without the Document Editor license component using the IViewerConfiguration.InstantJson:

var config = PSPDFKitController.CreateViewerConfiguration();
config.InstantJson = JObject.Parse(@"{
    bbox: [100, 150, 200, 75],
    blendMode: ""normal"",
    createdAt: ""1970-01-01T00:00:00Z"",
    id: ""01F73GJ4RPENTCMFSCJ5CSFT5G"",
    name: ""01F73GJ4RPENTCMFSCJ5CSFT5G"",
    opacity: 1,
    pageIndex: 0,
    strokeColor: ""#2293FB"",
    strokeWidth: 5,
    type: ""pspdfkit/shape/rectangle"",
    updatedAt: ""1970-01-01T00:00:00Z"",
    v: 1
}");
await PSPDFKitController.LoadDocumentFromAssetsAsync(DemoFile, config);

Exporting Annotations in Instant JSON

Annotations that have been saved can be exported in Instant JSON format using the IAnnotationManager.ExportInstantJsonAsync() API method:

const json = await _annotationManager.ExportInstantJsonAsync();