DocsVueViewerPluginsSpread Layouts

Spread Layouts

The PDFViewer supports switching between single-page view and two-page “spread” views. This is ideal for reading magazines, books, or any content designed to be viewed side-by-side.

Configuration

You can configure the initial layout mode using the spread config object.

<script setup lang="ts"> import { PDFViewer, SpreadMode } from '@embedpdf/vue-pdf-viewer'; </script> <template> <PDFViewer :config="{ spread: { defaultSpreadMode: SpreadMode.Odd } }" /> </template>

Understanding Spread Modes

ModeDescriptionPage Grouping
SpreadMode.NoneDefault. Each page is displayed individually in a vertical list.[1], [2], [3], [4]
SpreadMode.OddPages are paired starting from page 1. Good for content where page 1 is the left side of a spread.[1, 2], [3, 4]
SpreadMode.EvenThe first page is standalone (e.g., a cover), and subsequent pages are paired.[1], [2, 3], [4, 5]

Programmatic Control

You can dynamically change the layout mode using the plugin API.

Changing the Mode

<script setup lang="ts"> import { ref } from 'vue'; import { PDFViewer, SpreadMode, type PluginRegistry, type SpreadPlugin } from '@embedpdf/vue-pdf-viewer'; const registry = ref<PluginRegistry | null>(null); const handleReady = (r: PluginRegistry) => { registry.value = r; }; const setBookView = () => { const spreadPlugin = registry.value?.getPlugin<SpreadPlugin>('spread')?.provides(); const docSpread = spreadPlugin?.forDocument('my-doc-id'); docSpread?.setSpreadMode(SpreadMode.Even); }; const setSinglePage = () => { const spreadPlugin = registry.value?.getPlugin<SpreadPlugin>('spread')?.provides(); const docSpread = spreadPlugin?.forDocument('my-doc-id'); docSpread?.setSpreadMode(SpreadMode.None); }; </script> <template> <PDFViewer @ready="handleReady" :config="{ src: '/doc.pdf' }" /> </template>

Reading Current Mode

<script setup lang="ts"> const getCurrentMode = () => { const spreadPlugin = registry.value?.getPlugin<SpreadPlugin>('spread')?.provides(); const docSpread = spreadPlugin?.forDocument('my-doc-id'); return docSpread?.getSpreadMode(); }; </script>

Listening for Changes

You can listen for layout changes to keep your external UI in sync.

<script setup lang="ts"> import { PDFViewer, type PluginRegistry } from '@embedpdf/vue-pdf-viewer'; const handleReady = (registry: PluginRegistry) => { const spreadPlugin = registry.getPlugin('spread')?.provides(); // Subscribe to global spread changes (any document) spreadPlugin?.onSpreadChange(({ documentId, spreadMode }) => { console.log(`Document ${documentId} layout changed to ${spreadMode}`); }); // Or subscribe to a specific document const docSpread = spreadPlugin?.forDocument('my-doc'); docSpread?.onSpreadChange((spreadMode) => { console.log(`My doc is now in ${spreadMode} mode`); }); }; </script> <template> <PDFViewer @ready="handleReady" :config="{ src: '/doc.pdf' }" /> </template>
Last updated on December 22, 2025

Need Help?

Join our community for support, discussions, and to contribute to EmbedPDF's development.