EmbedPDF

Getting Started

The ready-made viewer gives you a complete PDF experience with a small integration surface. Pick your stack in the sidebar; this page and every example will stay on that integration.

Installation#

Vanilla JavaScript can load the viewer directly from a CDN. Framework projects install their dedicated adapter with pnpm.

install.html
<script type="module">
  import EmbedPDF from 'https://cdn.jsdelivr.net/npm/@embedpdf/snippet@2/dist/embedpdf.js';
</script>

Add your first viewer#

Give the viewer a PDF URL and a height. The adapter handles the engine, plugins, toolbar, and document lifecycle for you.

basic.html
<div id="pdf-viewer" style="height: 500px"></div>

<script type="module">
  import EmbedPDF from 'https://cdn.jsdelivr.net/npm/@embedpdf/snippet@2/dist/embedpdf.js';

  const viewer = EmbedPDF.init({
    type: 'container',
    target: document.getElementById('pdf-viewer'),
    src: 'https://snippet.embedpdf.com/ebook.pdf',
  });
</script>

Built-in stamps#

The Insert tab’s stamps panel loads the standard rubber stamps from @embedpdf/default-stamps the first time it opens — one Acrobat-compatible PDF per locale, shipped as a lazy chunk of your own build (the CDN snippet carries it in its folder), in the language negotiated from the viewer’s locale and the browser’s. Nothing is fetched from a third party. The stamps option decides where that library comes from:

stamps: {
  defaultLibrary: false;
} // no built-in library, no request (air-gapped)
stamps: {
  defaultLibrary: 'https://your.cdn/stamps/{locale}/stamps.pdf';
} // self-host

A self-hosted URL is used exactly as given. Libraries a user creates — stamps made from selected annotations, PDFs imported into the panel — are kept in the browser across reloads. For the whole picture — the engine’s WebAssembly, workers, CSP — see Self-hosting & air-gapped deployments.

Where to go next#

  • Configure the toolbar and available viewer controls.
  • Listen to the ready event when you need access to the plugin registry.
  • Switch to the Headless docs when you want to build the entire interface yourself.
Was this page helpful?

Your feedback goes directly to the documentation team.