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 lang="ts"> import { PDFViewer, SpreadMode } from '@embedpdf/svelte-pdf-viewer'; </script> <PDFViewer config={{ spread: { defaultSpreadMode: SpreadMode.Odd } }} />

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 lang="ts"> import { PDFViewer, SpreadMode, type PluginRegistry, type SpreadPlugin } from '@embedpdf/svelte-pdf-viewer'; let registry = $state<PluginRegistry | null>(null); const handleReady = (r: PluginRegistry) => { registry = r; }; const setBookView = () => { const spreadPlugin = registry?.getPlugin<SpreadPlugin>('spread')?.provides(); const docSpread = spreadPlugin?.forDocument('my-doc-id'); docSpread?.setSpreadMode(SpreadMode.Even); }; const setSinglePage = () => { const spreadPlugin = registry?.getPlugin<SpreadPlugin>('spread')?.provides(); const docSpread = spreadPlugin?.forDocument('my-doc-id'); docSpread?.setSpreadMode(SpreadMode.None); }; </script> <PDFViewer onready={handleReady} config={{ src: '/doc.pdf' }} />

Reading Current Mode

<script lang="ts"> const getCurrentMode = () => { const spreadPlugin = registry?.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 lang="ts"> import { PDFViewer, type PluginRegistry } from '@embedpdf/svelte-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> <PDFViewer onready={handleReady} config={{ src: '/doc.pdf' }} />
Last updated on December 22, 2025

Need Help?

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