Pluggable runtime layer that abstracts over multiple PDF engines (PDF-ium, Web Workers, mocks, etc.) to provide a unified API for rendering, search, annotation, and other document-level operations in EmbedPDF.
npm install @embedpdf/enginesPluggable rendering engines for EmbedPDF. Ships with PdfiumNative (low-level executor) and PdfEngine (high-level orchestrator) – a promise‑first API built on top of @embedpdf/pdfium.
For complete guides, examples, and full API reference, visit:
@embedpdf/engines?- High‑level abstraction – handles tasks, DPR scaling, annotation colour resolution, range/linearised loading.
- Universal runtimes – works in browsers, Node, and serverless environments.
- Typed & composable – 100 % TypeScript with generics for custom image pipelines.
- Open PDFs from ArrayBuffer or URL
- Render full pages, arbitrary rectangles, thumbnails – all DPI‑aware
- Text extraction, glyph geometry, word‑break‑aware search with context windows
- Read / create / transform / delete annotations and form fields
- Page ops: merge, extract, flatten, partial import
- Attachments & digital‑signature introspection
``bash`
npm install @embedpdf/engines @embedpdf/pdfium
`typescript
import { init } from '@embedpdf/pdfium';
import { PdfiumNative, PdfEngine } from '@embedpdf/engines/pdfium';
import { browserImageDataToBlobConverter } from '@embedpdf/engines/converters';
const pdfiumWasm =
'https://cdn.jsdelivr.net/npm/@embedpdf/pdfium/dist/pdfium.wasm';
(async () => {
const response = await fetch(pdfiumWasm);
const wasmBinary = await response.arrayBuffer();
// 1 – boot the low‑level WASM module
const pdfiumModule = await init({ wasmBinary });
// 2 – create the native executor (initializes PDFium automatically)
const native = new PdfiumNative(pdfiumModule);
// 3 – create the orchestrator with image converter
const engine = new PdfEngine(native, {
imageConverter: browserImageDataToBlobConverter,
});
// 4 – open & render
const doc = await engine
.openDocumentUrl({ id: 'demo', url: '/demo.pdf' })
.toPromise();
const page0 = doc.pages[0];
const blob = await engine.renderPage(doc, page0).toPromise();
})();
``
Head over to our docs for:
- Getting Started – initialise, render, destroy
- Engine Interface – implement your own back‑end
- Advanced Topics – workers, Node pipelines, Sharp image adapters
MIT – see the LICENSE file.