Skip to content

Add Annotations to PDF

This sample shows how to set the annotations (including markup, notes, ink, free text, shapes, stamp, and so on), and delete them

javascript
// Import the JS file of ComPDFKit Web Demo.
<script src="/webviewer.global.js"></script>;

const viewer = document.getElementById('webviewer');
ComPDFKitViewer.init({
  pdfUrl: 'Your PDF Url',
  license: 'Input your license here'
}, viewer)
.then((core) => {
  const docViewer = core.docViewer;
  docViewer.addEvent('documentloaded', () => {
    console.log('ComPDFKit Web Demo loaded');

    // Sample1: Create annotations.
    CreateAnnots(docViewer);

    // Sample2: Delete Annotations.
    DeleteAnnotations(docViewer);
  })
})

function CreateAnnots(docViewer) {
  CreateNoteAnnotation(docViewer);
  CreateLinkAnnotation(docViewer);
  CreateFreetextAnnotation(docViewer);
  CreateShapeAnnotation(docViewer);
  CreateMarkupAnnotation(docViewer);
  CreateInkAnnotation(docViewer);
  CreateStampAnnotation(docViewer);
}

// Create note annotation.
function CreateNoteAnnotation(docViewer) {
  docViewer.addAnnotations({
    type: 'text',
    pageIndex: 0,
    color: '#FF0000',
    fontSize: 16,
    fontName: 'Helvetica',
    opacity: 1,
    contents: 'test',
    rect: {
      left: 100,
      top: 30,
      right: 124,
      bottom: 54
    }
  });
}

// Create link annotation.
function CreateLinkAnnotation(docViewer) {
  // Add a hyperlink.
  docViewer.addAnnotations({
    type: 'link',
    pageIndex: 0,
    rect: {
      left: 92,
      top: 200,
      right: 167,
      bottom: 230
    },
    url: 'https://example.com'
  });

  // Add a intra-document link.
  docViewer.addAnnotations({
    type: 'link',
    pageIndex: 0,
    rect: {
      left: 92,
      top: 200,
      right: 167,
      bottom: 230
    },
    destPage: 2
  });
}

// Create freetext annotation.
function CreateFreetextAnnotation(docViewer) {
  docViewer.addAnnotations({
    type: 'freetext',
    pageIndex: 0,
    color: '#000000',
    fontSize: 16,
    fontName: 'Helvetica',
    opacity: 1,
    textAlignment: 'left',
    contents: 'test',
    rect: {
      left: 100,
      top: 200,
      right: 160,
      bottom: 240
    }
  });
}

// Create shape annotations.
function CreateShapeAnnotation(docViewer) {
  // Square.
  docViewer.addAnnotations({
    type: 'square',
    pageIndex: 0,
    rect: {
      left: 50,
      top: 50,
      right: 100,
      bottom: 100
    },
    borderWidth: 2,
    opacity: 1,
    fillTransparency: 1,
    fillColor: '',
    color: '#FF0000',
    borderColor: '#FF0000',
    borderStyle: 'solid',
    dashes: []
  });

  // Circle.
  docViewer.addAnnotations({
    type: 'circle',
    pageIndex: 0,
    rect: {
      left: 50,
      top: 50,
      right: 100,
      bottom: 100
    },
    borderWidth: 2,
    opacity: 1,
    fillTransparency: 1,
    fillColor: '',
    color: '#FF0000',
    borderColor: '#FF0000',
    borderStyle: 'solid',
    dashes: []
  });

  // Line.
  docViewer.addAnnotations({
    type: 'line',
    pageIndex: 0,
    linePoints: [50, 50, 100, 100],
    rect: {
      left: 50,
      top: 50,
      right: 100,
      bottom: 100
    },
    borderWidth: 2,
    opacity: 1,
    color: '#FF0000',
    borderColor: '#FF0000',
    borderStyle: 'solid',
    dashes: [],
  });

  // Polygon.
  docViewer.addAnnotations({
    type: 'polygon',
    pageIndex: 0,
    rect: {
      left: 114,
      top: 302,
      right: 310,
      bottom: 447
    },
    vertices: [
      { x: 156, y: 328 },
      { x: 230, y: 302 },
      { x: 300, y: 362 },
      { x: 310, y: 436 },
      { x: 180, y: 447 },
      { x: 114, y: 395 }
    ],
    borderWidth: 2,
    opacity: 1,
    fillTransparency: 1,
    fillColor: '',
    color: '#FF0000',
    borderColor: '#FF0000',
    borderStyle: 'solid',
    dashes: [],
  });

  // Multiline.
  docViewer.addAnnotations({
    type: 'polyline',
    pageIndex: 0,
    rect: {
      left: 130,
      top: 120,
      right: 263,
      bottom: 232
    },
    vertices: [
      { x: 130, y: 156 },
      { x: 202, y: 120 },
      { x: 263, y: 223 },
      { x: 157, y: 232 }
    ],
    borderWidth: 2,
    opacity: 1,
    color: '#FF0000',
    borderColor: '#FF0000',
    borderStyle: 'solid',
    dashes: [],
  });

  // Arc.
  docViewer.addAnnotations({
    type: 'ink',
    pageIndex: 0,
    arcPoints: [
      { x: 92, y: 225 },
      { x: 233, y: 169 },
      { x: 143, y: 98 }
    ],
    inkPointes: [
      [
        { PointX: 92, PointY: 225 },
        { PointX: 233, PointY: 169 },
        { PointX: 143, PointY: 98 }
      ]
    ],
    borderWidth: 2,
    opacity: 1,
    color: '#FF0000',
    borderColor: '#FF0000',
  });
}

// Create markup annotation.
function CreateMarkupAnnotation(docViewer) {
  docViewer.addAnnotations({
    type: 'highlight',  // Types include highlight, underline, strikeout, squiggly.
    pageIndex: 0,
    opacity: 0.8,
    quadPoints: [
      { PointX: 116, PointY: 300 },
      { PointX: 360, PointY: 300 },
      { PointX: 116, PointY: 360 },
      { PointX: 360, PointY: 360 },
    ],
    rect: {
      left: 116,
      top: 300,
      right: 360,
      bottom: 360
    },
    color: '#FF0000',
    contents: 'test'
  });
}

// Create ink annotation.
function CreateInkAnnotation(docViewer) {
  docViewer.addAnnotations({
    type: 'ink',
    pageIndex: 0,
    borderWidth: 2,
    opacity: 0.8,
    borderColor: '#FF0000',
    inkPointes: [[
      { PointX: 9.20, PointY: 34 },
      { PointX: 9.20, PointY: 34 },
      { PointX: 9.20, PointY: 33 },
      { PointX: 9.20, PointY: 31 },
      { PointX: 10.20, PointY: 31 },
      { PointX: 11.20, PointY: 30 },
      { PointX: 12.20, PointY: 28 },
      { PointX: 13.2, PointY: 27 },
      { PointX: 13.2, PointY: 26 },
      { PointX: 15.2, PointY: 24 },
      { PointX: 17.2, PointY: 23 },
      { PointX: 22.2, PointY: 19 }
    ]],
    rect: {
      left: 9.2,
      top: 19,
      right: 22.2,
      bottom: 34
    }
  });
}

// Create stamp annotation.
function CreateStampAnnotation(docViewer) {
  // Standard stamp.
  docViewer.addAnnotations({
    type: 'stamp',
    pageIndex: 0,
    rect: {
      left: 205,
      top: 379,
      right: 435,
      bottom: 431
    },
    stampType: 'standard',
    contents: 'NotApproved'
  });

  // Text stamp.
  docViewer.addAnnotations({
    type: 'stamp',
    pageIndex: 0,
    rect: {
      left: 220,
      top: 367,
      right: 320,
      bottom: 412
    },
    stampType: 'text',
    contents: 'REVISED',
    time: '28/07/2023 07:28:28',
    stampColor: 1,
    stampShape: 0
  });
}

// Delete all annotations.
async function DeleteAnnotations(docViewer) {
  docViewer.deleteAnnotations();
}