Skip to content

Annotation Controller viewer>=4.3.0 & annotation>=1.6.0 ​

AnnotationControl ​

An instance object for general annotation management. annotationControl is always available on the viewer instance regardless of whether the @vue-pdf-viewer/annotation plugin is loaded.

No Plugin Required

annotationControl is always defined on the viewer instance. It manages the viewer's internal annotation state, which is populated when the @vue-pdf-viewer/annotation plugin is loaded and the user creates or imports annotations.

Methods ​

NameDescriptionType
getAnnotationsReturns all current editable annotations held in the viewer's internal storage. Returns an empty array when no editable annotations are present or the annotation plugin has not been loaded.() => Annotation[]
clearAnnotationsRemoves all editor annotations from the viewer.() => void

Example ​

vue
<script setup lang="ts">
import { ref, computed } from 'vue'
import { VPdfViewer, type VPVInstance } from '@vue-pdf-viewer/viewer'
import VPdfAnnotationPlugin from '@vue-pdf-viewer/annotation'

const viewerRef = ref<VPVInstance>()
const annotationControl = computed(() => viewerRef.value?.annotationControl)

const annotationPlugin = VPdfAnnotationPlugin({ textSelection: true, freeText: true })

const logAnnotations = () => {
  const annotations = annotationControl.value?.getAnnotations() ?? []
  console.log(`${annotations.length} annotation(s):`, annotations)
}

const clearAll = () => {
  annotationControl.value?.clearAnnotations()
}
</script>

<template>
  <div :style="{ width: '1028px', height: '700px' }">
    <div class="toolbar">
      <button @click="logAnnotations">Log Annotations</button>
      <button @click="clearAll">Clear All</button>
    </div>
    <VPdfViewer
      ref="viewerRef"
      src="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
      :plugins="[annotationPlugin]"
    />
  </div>
</template>
vue
<script setup>
import { ref, computed } from 'vue'
import { VPdfViewer } from '@vue-pdf-viewer/viewer'
import VPdfAnnotationPlugin from '@vue-pdf-viewer/annotation'

const viewerRef = ref()
const annotationControl = computed(() => viewerRef.value?.annotationControl)

const annotationPlugin = VPdfAnnotationPlugin({ textSelection: true, freeText: true })

const logAnnotations = () => {
  const annotations = annotationControl.value?.getAnnotations() ?? []
  console.log(`${annotations.length} annotation(s):`, annotations)
}

const clearAll = () => {
  annotationControl.value?.clearAnnotations()
}
</script>

<template>
  <div :style="{ width: '1028px', height: '700px' }">
    <div class="toolbar">
      <button @click="logAnnotations">Log Annotations</button>
      <button @click="clearAll">Clear All</button>
    </div>
    <VPdfViewer
      ref="viewerRef"
      src="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
      :plugins="[annotationPlugin]"
    />
  </div>
</template>
vue
<script lang="ts">
import { ref, computed, defineComponent } from 'vue'
import { VPdfViewer, type VPVInstance } from '@vue-pdf-viewer/viewer'
import VPdfAnnotationPlugin from '@vue-pdf-viewer/annotation'

export default defineComponent({
  components: { VPdfViewer },
  setup() {
    const viewerRef = ref<VPVInstance>()
    const annotationControl = computed(() => viewerRef.value?.annotationControl)

    const annotationPlugin = VPdfAnnotationPlugin({ textSelection: true, freeText: true })

    const logAnnotations = () => {
      const annotations = annotationControl.value?.getAnnotations() ?? []
      console.log(`${annotations.length} annotation(s):`, annotations)
    }

    const clearAll = () => {
      annotationControl.value?.clearAnnotations()
    }

    return {
      viewerRef,
      annotationPlugin,
      logAnnotations,
      clearAll,
    }
  }
})
</script>

<template>
  <div :style="{ width: '1028px', height: '700px' }">
    <div class="toolbar">
      <button @click="logAnnotations">Log Annotations</button>
      <button @click="clearAll">Clear All</button>
    </div>
    <VPdfViewer
      ref="viewerRef"
      src="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
      :plugins="[annotationPlugin]"
    />
  </div>
</template>
vue
<script>
import { ref, computed, defineComponent } from 'vue'
import { VPdfViewer } from '@vue-pdf-viewer/viewer'
import VPdfAnnotationPlugin from '@vue-pdf-viewer/annotation'

export default defineComponent({
  components: { VPdfViewer },
  setup() {
    const viewerRef = ref()
    const annotationControl = computed(() => viewerRef.value?.annotationControl)

    const annotationPlugin = VPdfAnnotationPlugin({ textSelection: true, freeText: true })

    const logAnnotations = () => {
      const annotations = annotationControl.value?.getAnnotations() ?? []
      console.log(`${annotations.length} annotation(s):`, annotations)
    }

    const clearAll = () => {
      annotationControl.value?.clearAnnotations()
    }

    return {
      viewerRef,
      annotationPlugin,
      logAnnotations,
      clearAll,
    }
  }
})
</script>

<template>
  <div :style="{ width: '1028px', height: '700px' }">
    <div class="toolbar">
      <button @click="logAnnotations">Log Annotations</button>
      <button @click="clearAll">Clear All</button>
    </div>
    <VPdfViewer
      ref="viewerRef"
      src="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf"
      :plugins="[annotationPlugin]"
    />
  </div>
</template>