embedpdf/embed-pdf-viewer
 Watch   
 Star   
 Fork   
20 hours ago
embed-pdf-viewer

Release v2.7.0

@embedpdf/engines@2.7.0

Minor Changes

  • #467 by @bobsingor – Implemented renderPageAnnotationsRaw to batch render annotation appearance streams and updated updatePageAnnotation to support skipping appearance regeneration.

@embedpdf/models@2.7.0

Minor Changes

  • #467 by @bobsingor – Added types and interfaces for annotation appearance streams (AnnotationAppearanceMap, AnnotationAppearances, AnnotationAppearanceImage) and updated PdfEngine interface with renderPageAnnotationsRaw.

@embedpdf/plugin-annotation@2.7.0

Minor Changes

  • #467 by @bobsingor
    • Added support for rendering annotation appearance streams (AP) for better visual fidelity with other PDF viewers.
    • Refactored annotation rendering to use a registry-based system, allowing for easier extensibility.
    • Introduced moveAnnotation API to update annotation positions without regenerating their appearance streams.
    • Added caching for rendered appearance streams.

@embedpdf/plugin-redaction@2.7.0

Patch Changes

  • #467 by @bobsingor – Updated redaction tools and renderers to explicitly disable appearance stream usage, ensuring dynamic rendering for redaction marks.

@embedpdf/plugin-ui@2.7.0

Patch Changes

  • #467 by @bobsingor – Fix Vue reactivity bugs when switching documents in the schema-driven viewer. useRegisterAnchor now accepts MaybeRefOrGetter<string> and re-registers anchors when documentId changes. AutoMenuRenderer now passes a reactive getter to useUIState so menu state tracks the active document.

@embedpdf/snippet@2.7.0

Patch Changes

  • #486 by @shunyy – Add Japanese (ja) translations to the snippet viewer. Thanks to @shunyy !

  • #478 by @phreyah – Add Swedish (sv) translations to the snippet viewer.

  • #487 by @shunyy – Expose fontFallback configuration option in the snippet viewer.

  • #467 by @bobsingor – Fixed color matching case insensitivity and rotation debounce logic in the annotation sidebar.

@embedpdf/core@2.7.0

@embedpdf/pdfium@2.7.0

@embedpdf/plugin-attachment@2.7.0

@embedpdf/plugin-bookmark@2.7.0

@embedpdf/plugin-capture@2.7.0

@embedpdf/plugin-commands@2.7.0

@embedpdf/plugin-document-manager@2.7.0

@embedpdf/plugin-export@2.7.0

@embedpdf/plugin-fullscreen@2.7.0

@embedpdf/plugin-history@2.7.0

@embedpdf/plugin-i18n@2.7.0

@embedpdf/plugin-interaction-manager@2.7.0

@embedpdf/plugin-pan@2.7.0

@embedpdf/plugin-print@2.7.0

@embedpdf/plugin-render@2.7.0

@embedpdf/plugin-rotate@2.7.0

@embedpdf/plugin-scroll@2.7.0

@embedpdf/plugin-search@2.7.0

@embedpdf/plugin-selection@2.7.0

@embedpdf/plugin-spread@2.7.0

@embedpdf/plugin-thumbnail@2.7.0

@embedpdf/plugin-tiling@2.7.0

@embedpdf/plugin-view-manager@2.7.0

@embedpdf/plugin-viewport@2.7.0

@embedpdf/plugin-zoom@2.7.0

@embedpdf/utils@2.7.0

@embedpdf/react-pdf-viewer@2.7.0

@embedpdf/svelte-pdf-viewer@2.7.0

@embedpdf/vue-pdf-viewer@2.7.0

7 days ago
embed-pdf-viewer

Release v2.6.2

@embedpdf/engines@2.6.2

Patch Changes

  • #475 by @bobsingor – ### Extract tight glyph bounds and font size from PDFium
    • readGlyphInfo now calls FPDFText_GetCharBox alongside FPDFText_GetLooseCharBox to extract tight character bounds (closely surrounding the actual glyph shape) and maps them to device-space coordinates.
    • buildRunsFromGlyphs passes tight bounds through to each PdfGlyphSlim record (tightX, tightY, tightWidth, tightHeight) and stores per-run fontSize from FPDFText_GetFontSize.

@embedpdf/models@2.6.2

Patch Changes

  • #475 by @bobsingor – ### Tight glyph bounds and font size on run/glyph models
    • PdfGlyphSlim gains optional tightX, tightY, tightWidth, tightHeight fields for tight character bounds from FPDFText_GetCharBox (closely surrounding the actual glyph shape, as opposed to the existing loose bounds from FPDFText_GetLooseCharBox).
    • PdfGlyphObject gains optional tightOrigin and tightSize fields for the same purpose at the intermediate object level.
    • PdfRun gains an optional fontSize field populated from FPDFText_GetFontSize, used for font-size-aware rectangle merging during selection.

@embedpdf/plugin-selection@2.6.2

Patch Changes

  • #475 by @bobsingor – ### Selection plugin: Chrome PDFium parity and geometry cache eviction

    Double-click / triple-click selection

    • Double-click selects the word around the clicked glyph, triple-click selects the full visual line, matching Chromium's PDFiumEngine::OnMultipleClick behaviour.

    Drag threshold

    • Pointer-down no longer immediately begins a drag-selection. The pointer must move beyond a configurable minSelectionDragDistance (default 3 px) before selection starts, preventing accidental selections on simple clicks.

    Tolerance-based hit-testing with tight bounds

    • glyphAt now performs two-pass hit-testing adapted from PDFium's CPDF_TextPage::GetIndexAtPos: an exact-match pass followed by a tolerance-expanded nearest-neighbour pass using Manhattan distance.
    • Hit-testing uses tight glyph bounds (FPDFText_GetCharBox) instead of loose bounds (FPDFText_GetLooseCharBox), matching Chrome's behaviour and preventing cross-line selection jumping on short lines. Configurable via toleranceFactor (default 1.5).

    Font-size-aware rectangle merging

    • shouldMergeHorizontalRects now refuses to merge runs whose font sizes differ by more than 1.5x, preventing a large character (e.g. a heading "1") from merging into adjacent body-text lines.
    • rectsWithinSlice sub-splits runs when the horizontal gap between consecutive glyphs exceeds 2.5x the average glyph width, mirroring Chrome's CalculateTextRunInfoAt character-distance heuristic.

    Geometry cache eviction (LRU)

    • Added maxCachedGeometries config option (default 50) to bound per-document geometry memory. Least-recently-used pages are evicted when the limit is exceeded; pages with active UI registrations are pinned and never evicted.
    • When an evicted page scrolls back into view and falls within an active selection, its rects are lazily recomputed and pushed to the UI.

    Marquee / text-selection coordination

    • Introduced hasTextAnchor state so the marquee handler does not activate while the text handler has a pending anchor (before the drag threshold is met).

@embedpdf/core@2.6.2

@embedpdf/pdfium@2.6.2

@embedpdf/plugin-annotation@2.6.2

@embedpdf/plugin-attachment@2.6.2

@embedpdf/plugin-bookmark@2.6.2

@embedpdf/plugin-capture@2.6.2

@embedpdf/plugin-commands@2.6.2

@embedpdf/plugin-document-manager@2.6.2

@embedpdf/plugin-export@2.6.2

@embedpdf/plugin-fullscreen@2.6.2

@embedpdf/plugin-history@2.6.2

@embedpdf/plugin-i18n@2.6.2

@embedpdf/plugin-interaction-manager@2.6.2

@embedpdf/plugin-pan@2.6.2

@embedpdf/plugin-print@2.6.2

@embedpdf/plugin-redaction@2.6.2

@embedpdf/plugin-render@2.6.2

@embedpdf/plugin-rotate@2.6.2

@embedpdf/plugin-scroll@2.6.2

@embedpdf/plugin-search@2.6.2

@embedpdf/plugin-spread@2.6.2

@embedpdf/plugin-thumbnail@2.6.2

@embedpdf/plugin-tiling@2.6.2

@embedpdf/plugin-ui@2.6.2

@embedpdf/plugin-view-manager@2.6.2

@embedpdf/plugin-viewport@2.6.2

@embedpdf/plugin-zoom@2.6.2

@embedpdf/utils@2.6.2

@embedpdf/react-pdf-viewer@2.6.2

@embedpdf/snippet@2.6.2

@embedpdf/svelte-pdf-viewer@2.6.2

@embedpdf/vue-pdf-viewer@2.6.2

8 days ago
embed-pdf-viewer

Release v2.6.1

@embedpdf/engines@2.6.1

Patch Changes

  • #473 by @bobsingor – Implement getPageTextRuns in PdfiumNative, WebWorkerEngine, and RemoteExecutor for extracting rich text runs with font, size, and color metadata. Implement renderPageRaw and renderPageRectRaw in WebWorkerEngine for returning raw ImageDataLike pixel data without encoding.

  • #463 by @bobsingor – Update readPageAnnoRect to call EPDFAnnot_GetRect instead of FPDFAnnot_GetRect, ensuring annotation rectangles are always normalized. Fixes link annotations appearing below their expected position when the PDF Rect array has inverted y-coordinates.

@embedpdf/models@2.6.1

Patch Changes

  • #473 by @bobsingor – Add PdfFontInfo, PdfTextRun, and PdfPageTextRuns types for rich text extraction with font metadata and color info. Add renderPageRaw and renderPageRectRaw methods to PdfEngine for raw pixel output (ImageDataLike). Add getPageTextRuns to PdfEngine and IPdfiumExecutor. Add TaskSequence utility for composing sequential Task operations with abort propagation.

@embedpdf/pdfium@2.6.1

Patch Changes

  • #463 by @bobsingor – Add EPDFAnnot_GetRect that wraps FPDFAnnot_GetRect with rect normalization. Upstream FPDFAnnot_GetRect does not normalize the rect read from the PDF dictionary, so when a PDF stores its Rect array with y1 > y2 the top/bottom values are inverted. This caused link annotations to be positioned incorrectly.

  • #463 by @bobsingor – Sync pdfium-src with upstream chromium/7689

@embedpdf/plugin-render@2.6.1

Patch Changes

  • #473 by @bobsingor – Add renderPageRaw and renderPageRectRaw methods to RenderCapability and RenderScope for returning raw ImageDataLike pixel data, useful for AI/ML pipelines that need direct pixel access without Blob encoding.

@embedpdf/snippet@2.6.1

Patch Changes

  • #465 by @bobsingor – Switch toolbar close command from hardcoded pointerMode to activateDefaultMode. On mobile devices the default mode is pan mode rather than pointer mode, and activating pointer mode prevented scrolling (only allowing text selection).

  • #466 by @bobsingor – Fix toolbar UI visibility: hide the mode select dropdown when no annotation/shape/redact modes are available (previously showed a dropdown with a single item), and hide the file-actions divider when document:open and document:close items are not visible.

@embedpdf/core@2.6.1

@embedpdf/plugin-annotation@2.6.1

@embedpdf/plugin-attachment@2.6.1

@embedpdf/plugin-bookmark@2.6.1

@embedpdf/plugin-capture@2.6.1

@embedpdf/plugin-commands@2.6.1

@embedpdf/plugin-document-manager@2.6.1

@embedpdf/plugin-export@2.6.1

@embedpdf/plugin-fullscreen@2.6.1

@embedpdf/plugin-history@2.6.1

@embedpdf/plugin-i18n@2.6.1

@embedpdf/plugin-interaction-manager@2.6.1

@embedpdf/plugin-pan@2.6.1

@embedpdf/plugin-print@2.6.1

@embedpdf/plugin-redaction@2.6.1

@embedpdf/plugin-rotate@2.6.1

@embedpdf/plugin-scroll@2.6.1

@embedpdf/plugin-search@2.6.1

@embedpdf/plugin-selection@2.6.1

@embedpdf/plugin-spread@2.6.1

@embedpdf/plugin-thumbnail@2.6.1

@embedpdf/plugin-tiling@2.6.1

@embedpdf/plugin-ui@2.6.1

@embedpdf/plugin-view-manager@2.6.1

@embedpdf/plugin-viewport@2.6.1

@embedpdf/plugin-zoom@2.6.1

@embedpdf/utils@2.6.1

@embedpdf/react-pdf-viewer@2.6.1

@embedpdf/svelte-pdf-viewer@2.6.1

@embedpdf/vue-pdf-viewer@2.6.1

@embedpdf/example-engines-node@1.0.1

@embedpdf/example-pdfium-node@1.0.1

13 days ago
embed-pdf-viewer

Release v2.6.0

@embedpdf/engines@2.6.0

Minor Changes

  • #452 by @bobsingor
    • Update PDFium engine to support saving and loading rotated annotations.
    • Add support for EPDFAnnot_SetRotate, EPDFAnnot_SetExtendedRotation, and EPDFAnnot_SetUnrotatedRect.
    • Implement unrotated rendering path for rotated annotations.

Patch Changes

  • #458 by @bobsingor
    • Fallback unknown font to Helvetica in setAnnotationDefaultAppearance so annotations with non-standard fonts can still be edited.

@embedpdf/models@2.6.0

Minor Changes

  • #452 by @bobsingor
    • Add rotation geometry utilities: rotatePointAround, calculateRotatedRectAABB, inferRotationCenterFromRects.
    • Add rotation and unrotatedRect properties to PdfAnnotationObjectBase.

Patch Changes

  • #459 by @bobsingor – Fix JSDoc descriptions for color and overlayColor on PdfRedactAnnoObject to match actual semantics.

  • #458 by @bobsingor

    • Fix StandardFontDescriptor.css to use base family names only (not variant-specific like "Helvetica-Bold").
    • Add StandardFontCssProperties interface and standardFontCssProperties() for cross-platform font rendering with proper fontWeight/fontStyle.

@embedpdf/pdfium@2.6.0

Minor Changes

  • #452 by @bobsingor
    • Export new rotation-related PDFium functions: EPDFAnnot_SetRotate, EPDFAnnot_GetRotate, EPDFAnnot_SetExtendedRotation, etc.
    • Update WASM build.

Patch Changes

  • #458 by @bobsingor
    • Add abbreviated font name aliases (Helv, ZaDb, Cour, etc.) and missing Helvetica-Oblique mapping in StringToStandardFont.

@embedpdf/plugin-annotation@2.6.0

Minor Changes

  • #447 by @bobsingor – Added modeId filtering to marquee end event handler so annotation selection only triggers during pointerMode, preventing interference with redaction marquees. Added page activity claims (annotation-selection topic) when selecting/deselecting annotations for scroll plugin page elevation.

  • #452 by @bobsingor

    • Add support for rotating annotations.
    • Add rotationUI prop to AnnotationLayer and AnnotationContainer.
    • Add isRotatable and isGroupRotatable properties to AnnotationTool.
    • Add insertUpright behavior for stamps and free text.
    • Update AnnotationLayer to support custom rotation handles via slots/components.

Patch Changes

  • #458 by @bobsingor
    • Use standardFontCssProperties in FreeText components (React, Svelte, Vue) so bold/italic render correctly on all platforms.

@embedpdf/plugin-interaction-manager@2.6.0

Minor Changes

  • #447 by @bobsingor – Added topic-based page activity tracking system. New methods claimPageActivity, releasePageActivity, and hasPageActivity on both InteractionManagerCapability and InteractionManagerScope. New onPageActivityChange event and PageActivityChangeEvent type. Topics are named strings (e.g. 'annotation-selection', 'selection-menu') that can be active on one page at a time per document, automatically moving when re-claimed on a different page.

@embedpdf/plugin-redaction@2.6.0

Minor Changes

  • #447 by @bobsingor – Subscribe to selection plugin's onEmptySpaceClick event to deselect pending redactions when the user clicks on empty page space. Restores background-click-to-deselect behavior that was lost during the marquee unification.

  • #447 by @bobsingor – Unified marquee redaction with the selection plugin's marquee infrastructure. Removed standalone createMarqueeHandler, registerMarqueeOnPage, RegisterMarqueeOnPageOptions, and MarqueeRedactCallback. Marquee redaction now subscribes to selection plugin's onMarqueeChange and onMarqueeEnd events and forwards them via new onRedactionMarqueeChange method. Enabled marquee for RedactionMode.Redact and RedactionMode.MarqueeRedact modes via enableForMode. Added page activity claims (redaction-selection topic) in legacy mode for scroll plugin page elevation.

Patch Changes

  • #459 by @bobsingor – Fix default redaction fill color (color) to #000000 (black) and overlay text color (overlayColor) to #FFFFFF (white).

  • #458 by @bobsingor

    • Use standardFontCssProperties in redaction overlay components (React, Svelte, Vue) for consistent font rendering.
  • #452 by @bobsingor

    • Explicitly disable rotation for redaction tools.

@embedpdf/plugin-scroll@2.6.0

Minor Changes

  • #447 by @bobsingor – Added page elevation support driven by interaction manager page activity. New elevated boolean on PageLayout interface. Scroll plugin subscribes to onPageActivityChange and tracks elevated pages per document. Scroller components (React, Svelte, Vue) apply zIndex: 1 and position: relative on page containers when layout.elevated is true. Added optional dependency on @embedpdf/plugin-interaction-manager.

@embedpdf/plugin-selection@2.6.0

Minor Changes

  • #447 by @bobsingor – Added onEmptySpaceClick event to SelectionScope and SelectionCapability. Fires when the user clicks directly on the page background (empty space) rather than on a child element. Detection runs before mode-gating so it fires for all modes regardless of whether text or marquee selection is enabled. New EmptySpaceClickEvent and EmptySpaceClickScopeEvent type exports.

  • #447 by @bobsingor – Unified text selection and marquee selection under the enableForMode API. Extended EnableForModeOptions with enableSelection, showSelectionRects, enableMarquee, and showMarqueeRects options. Deprecated showRects (use showSelectionRects), setMarqueeEnabled, and isMarqueeEnabled (use enableForMode with enableMarquee). Added modeId to SelectionChangeEvent, BeginSelectionEvent, EndSelectionEvent, MarqueeChangeEvent, MarqueeEndEvent, and their scoped counterparts. Marquee handler now uses registerAlways so any plugin can enable marquee for their mode. Removed stopImmediatePropagation from text selection handler in favor of isTextSelecting coordination.

    Refactored SelectionLayer into a thin orchestrator that composes the new TextSelection component and existing MarqueeSelection component. Consumers no longer need to render MarqueeSelection separately -- SelectionLayer now includes both text and marquee selection. Added new TextSelection export for advanced standalone usage. Added textStyle and marqueeStyle props to SelectionLayer for consistent CSS-standard styling (background, borderColor, borderStyle). MarqueeSelection updated with CSS-standard props (background, borderColor, borderStyle); old stroke and fill props deprecated. New TextSelectionStyle and MarqueeSelectionStyle type exports.

@embedpdf/utils@2.6.0

Minor Changes

  • #452 by @bobsingor
    • Update DragResizeController to support rotation interactions.
    • Add useInteractionHandles support for rotation handles.
    • Add rotation snapping and constraints.

@embedpdf/snippet@2.6.0

Minor Changes

  • #452 by @bobsingor
    • Add rotation property control to the annotation sidebar.
    • Update selection menu to handle rotated annotations.

@embedpdf/core@2.6.0

@embedpdf/plugin-attachment@2.6.0

@embedpdf/plugin-bookmark@2.6.0

@embedpdf/plugin-capture@2.6.0

@embedpdf/plugin-commands@2.6.0

@embedpdf/plugin-document-manager@2.6.0

@embedpdf/plugin-export@2.6.0

@embedpdf/plugin-fullscreen@2.6.0

@embedpdf/plugin-history@2.6.0

@embedpdf/plugin-i18n@2.6.0

@embedpdf/plugin-pan@2.6.0

@embedpdf/plugin-print@2.6.0

@embedpdf/plugin-render@2.6.0

@embedpdf/plugin-rotate@2.6.0

@embedpdf/plugin-search@2.6.0

@embedpdf/plugin-spread@2.6.0

@embedpdf/plugin-thumbnail@2.6.0

@embedpdf/plugin-tiling@2.6.0

@embedpdf/plugin-ui@2.6.0

@embedpdf/plugin-view-manager@2.6.0

@embedpdf/plugin-viewport@2.6.0

@embedpdf/plugin-zoom@2.6.0

@embedpdf/react-pdf-viewer@2.6.0

@embedpdf/svelte-pdf-viewer@2.6.0

@embedpdf/vue-pdf-viewer@2.6.0

21 days ago
embed-pdf-viewer

Release v2.5.0

@embedpdf/engines@2.5.0

Minor Changes

  • #441 by @bobsingor – Implemented per-document rotation normalization in the PDFium engine:

    • Updated PdfCache.setDocument() to accept per-document normalizeRotation flag
    • Added normalizeRotation property to DocumentContext for tracking document-level setting
    • Updated PageCache to use EPDF_LoadPageNormalized when normalization is enabled
    • Modified page size retrieval to use EPDF_GetPageSizeByIndexNormalized for normalized documents
    • Propagated doc: PdfDocumentObject parameter through 30+ coordinate transformation methods to access the normalization flag
    • Updated convertDevicePointToPagePoint and convertPagePointToDevicePoint to use 0° rotation when normalization is enabled

    This change allows annotations, text selection, and rendering to work correctly across pages with different rotations by treating all coordinates in a consistent 0° space.

@embedpdf/models@2.5.0

Minor Changes

  • #441 by @bobsingor – Added support for per-document rotation normalization:

    • Added normalizedRotation: boolean property to PdfDocumentObject to track whether the document was opened with normalized rotation
    • Added normalizeRotation?: boolean option to PdfOpenDocumentBufferOptions interface
    • Added normalizeRotation?: boolean option to PdfOpenDocumentUrlOptions interface

    When normalizeRotation is enabled, all page coordinates (annotations, text, rendering) are in 0° space regardless of the page's original rotation.

@embedpdf/pdfium@2.5.0

Minor Changes

  • #441 by @bobsingor – Added new PDFium functions to support normalized page rotation:

    • EPDF_GetPageSizeByIndexNormalized: Returns page dimensions as if the page had 0° rotation (swaps width/height for 90°/270° rotated pages)
    • EPDF_LoadPageNormalized: Loads a page with normalized rotation, treating all coordinates in 0° space

    These functions enable the engine to work with page coordinates consistently regardless of original page rotation.

@embedpdf/plugin-document-manager@2.5.0

Minor Changes

  • #441 by @bobsingor – Enabled rotation normalization by default for all documents opened through the document manager:

    • Added normalizeRotation: true to openDocumentFromUrl() method
    • Added normalizeRotation: true to openDocumentFromBuffer() method
    • Added normalizeRotation: true to internal doOpen() method

    This ensures all documents managed by the plugin have consistent coordinate handling regardless of individual page rotations.

@embedpdf/plugin-annotation@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed rotation calculation in AnnotationLayer components to properly combine page intrinsic rotation with document rotation:
    • Updated React AnnotationLayer component to compute effective rotation as (pageRotation + docRotation) % 4
    • Updated Vue annotation-layer.vue component with the same rotation logic
    • Updated Svelte AnnotationLayer.svelte component with the same rotation logic

@embedpdf/plugin-interaction-manager@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed rotation calculation in PagePointerProvider components to properly handle rotation override and combine page intrinsic rotation with document rotation:
    • Updated React PagePointerProvider to use rotation override directly when provided, otherwise combine page and document rotation
    • Updated Vue page-pointer-provider.vue with the same rotation logic
    • Updated Svelte PagePointerProvider.svelte with the same rotation logic

@embedpdf/plugin-redaction@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed rotation calculation in RedactionLayer components to properly combine page intrinsic rotation with document rotation:
    • Updated React RedactionLayer component to compute effective rotation as (pageRotation + docRotation) % 4
    • Updated Vue redaction-layer.vue component with the same rotation logic
    • Updated Svelte redaction-layer.svelte component with the same rotation logic

@embedpdf/plugin-rotate@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed rotation calculation in Rotate components to properly handle rotation override and combine page intrinsic rotation with document rotation:
    • Updated React Rotate component to use rotation override directly when provided, otherwise combine page and document rotation
    • Updated Vue rotate.vue component with the same rotation logic
    • Updated Svelte Rotate.svelte component with the same rotation logic

@embedpdf/plugin-scroll@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed scroll calculations to account for page intrinsic rotation:
    • Updated getSpreadPagesWithSizes() to compute effective rotation as (pageRotation + docRotation) % 4 for each page
    • Updated scrollToPage() to use effective rotation when calculating scroll position
    • Updated getRectPositionForPage() to use effective rotation when provided rotation is undefined
    • Fixed calculatePageVisibility() in base strategy to account for horizontal centering offset

@embedpdf/plugin-selection@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed rotation calculation in SelectionLayer components to properly combine page intrinsic rotation with document rotation:
    • Updated React SelectionLayer component to compute effective rotation as (pageRotation + docRotation) % 4
    • Updated Vue selection-layer.vue component with the same rotation logic
    • Updated Svelte SelectionLayer.svelte component with the same rotation logic

@embedpdf/plugin-thumbnail@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed thumbnail rendering to account for page intrinsic rotation:
    • Updated rebuildLayout() to swap width/height for pages with 90° or 270° rotation when calculating thumbnail dimensions
    • Added rotation: page.rotation to render options in renderThumb() to ensure thumbnails display with correct orientation

@embedpdf/plugin-tiling@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed tile calculations to account for page intrinsic rotation:
    • Updated refreshTilesForPages() to compute effective rotation as (pageRotation + docRotation) % 4 for each page
    • Updated onScrollMetricsChange() to use effective rotation per page when calculating tiles

@embedpdf/utils@2.5.0

Patch Changes

  • #441 by @bobsingor – Fixed resize handle cursors to account for page rotation:

    • Updated diagonalCursor() function to swap ns-resize and ew-resize cursors for edge handles (n, s, e, w) on odd rotation values (90° and 270°)
    • Reorganized cursor logic to handle edge handles separately from corner handles

    Previously, edge resize handles showed incorrect cursors on rotated pages (e.g., north handle showed ns-resize instead of ew-resize on 90° rotated pages).

@embedpdf/core@2.5.0

@embedpdf/plugin-attachment@2.5.0

@embedpdf/plugin-bookmark@2.5.0

@embedpdf/plugin-capture@2.5.0

@embedpdf/plugin-commands@2.5.0

@embedpdf/plugin-export@2.5.0

@embedpdf/plugin-fullscreen@2.5.0

@embedpdf/plugin-history@2.5.0

@embedpdf/plugin-i18n@2.5.0

@embedpdf/plugin-pan@2.5.0

@embedpdf/plugin-print@2.5.0

@embedpdf/plugin-render@2.5.0

@embedpdf/plugin-search@2.5.0

@embedpdf/plugin-spread@2.5.0

@embedpdf/plugin-ui@2.5.0

@embedpdf/plugin-view-manager@2.5.0

@embedpdf/plugin-viewport@2.5.0

@embedpdf/plugin-zoom@2.5.0

@embedpdf/react-pdf-viewer@2.5.0

@embedpdf/snippet@2.5.0

@embedpdf/svelte-pdf-viewer@2.5.0

@embedpdf/vue-pdf-viewer@2.5.0

22 days ago
embed-pdf-viewer

Release v2.4.1

@embedpdf/engines@2.4.1

Patch Changes

  • #434 by @bobsingor – Fixed memory leak where image encoder workers were never terminated when the engine was destroyed:

    • Added optional destroy() method to ImageDataConverter interface for resource cleanup
    • Updated createWorkerPoolImageConverter and createHybridImageConverter to attach destroy() that terminates the encoder worker pool
    • Updated PdfEngine.destroy() to call imageConverter.destroy?.() to clean up encoder workers

    Previously, each viewer instance would leave 2 encoder workers running after destruction.

@embedpdf/snippet@2.4.1

Patch Changes

  • #434 by @bobsingor – Fixed memory leak in EmbedPdfContainer where Preact components were not unmounted on disconnect:

    • Added render(null, this.root) in disconnectedCallback() to properly unmount Preact components
    • This triggers the cleanup chain: plugin destroy, engine destroy, and worker termination

    Previously, navigating between pages would leave workers running (1 PDFium + 2 encoder workers per viewer instance).

@embedpdf/core@2.4.1

@embedpdf/models@2.4.1

@embedpdf/pdfium@2.4.1

@embedpdf/plugin-annotation@2.4.1

@embedpdf/plugin-attachment@2.4.1

@embedpdf/plugin-bookmark@2.4.1

@embedpdf/plugin-capture@2.4.1

@embedpdf/plugin-commands@2.4.1

@embedpdf/plugin-document-manager@2.4.1

@embedpdf/plugin-export@2.4.1

@embedpdf/plugin-fullscreen@2.4.1

@embedpdf/plugin-history@2.4.1

@embedpdf/plugin-i18n@2.4.1

@embedpdf/plugin-interaction-manager@2.4.1

@embedpdf/plugin-pan@2.4.1

@embedpdf/plugin-print@2.4.1

@embedpdf/plugin-redaction@2.4.1

@embedpdf/plugin-render@2.4.1

@embedpdf/plugin-rotate@2.4.1

@embedpdf/plugin-scroll@2.4.1

@embedpdf/plugin-search@2.4.1

@embedpdf/plugin-selection@2.4.1

@embedpdf/plugin-spread@2.4.1

@embedpdf/plugin-thumbnail@2.4.1

@embedpdf/plugin-tiling@2.4.1

@embedpdf/plugin-ui@2.4.1

@embedpdf/plugin-view-manager@2.4.1

@embedpdf/plugin-viewport@2.4.1

@embedpdf/plugin-zoom@2.4.1

@embedpdf/utils@2.4.1

@embedpdf/react-pdf-viewer@2.4.1

@embedpdf/svelte-pdf-viewer@2.4.1

@embedpdf/vue-pdf-viewer@2.4.1

23 days ago
embed-pdf-viewer

Release v2.4.0

@embedpdf/engines@2.4.0

Minor Changes

  • #426 by @bobsingor – Added redaction annotation engine methods:
    • Added applyRedaction() to apply a single REDACT annotation, removing content and flattening the overlay
    • Added applyAllRedactions() to apply all REDACT annotations on a page
    • Added flattenAnnotation() to flatten any annotation's appearance to page content
    • Added readPdfRedactAnno() for reading REDACT annotations with all properties
    • Added addRedactContent() for creating REDACT annotations with QuadPoints, colors, and overlay text
    • Added overlay text getter/setter methods for REDACT annotations

@embedpdf/models@2.4.0

Minor Changes

  • #426 by @bobsingor – Added support for REDACT annotation type with full read/write capabilities:
    • Added PdfRedactAnnoObject interface for redact annotations with properties for overlay text, colors, and font settings
    • Added PdfAnnotationColorType.OverlayColor enum value for redaction overlay color
    • Added PdfRedactAnnoObject to PdfSupportedAnnoObject union type
    • Added new engine interface methods: applyRedaction, applyAllRedactions, flattenAnnotation
    • Added corresponding methods to IPdfiumExecutor interface

@embedpdf/pdfium@2.4.0

Minor Changes

  • #426 by @bobsingor – Added PDFium functions for redaction annotation support:
    • Added EPDFAnnot_ApplyRedaction to apply a single redaction annotation
    • Added EPDFAnnot_Flatten to flatten an annotation's appearance to page content
    • Added EPDFPage_ApplyRedactions to apply all redactions on a page
    • Added EPDFAnnot_GetOverlayText and EPDFAnnot_SetOverlayText for overlay text
    • Added EPDFAnnot_GetOverlayTextRepeat and EPDFAnnot_SetOverlayTextRepeat for text repeat setting

Patch Changes

  • #433 by @bobsingor – Reduced WASM binary size from 7.4MB to 4.5MB by removing debug symbols (-g flag) from the build.

    Thanks to @Mikescops for reporting this.

@embedpdf/plugin-annotation@2.4.0

Minor Changes

  • #426 by @bobsingor – Added annotation renderer registry and enhanced annotation capabilities:
    • Added purgeAnnotation() method to remove annotations from state without calling the PDF engine
    • Added annotation renderer registry allowing external plugins to register custom annotation renderers
    • Added useRegisterRenderers() hook and AnnotationRendererProvider context for renderer registration
    • Changed interaction properties (isDraggable, isResizable, lockAspectRatio) to support dynamic functions based on annotation
    • Added AnnotationCommandMetadata interface for history command filtering
    • Added isRedact() helper function for type-checking redact annotations
    • Framework exports now include AnnotationPluginPackage with AnnotationRendererProvider wrapper

Patch Changes

  • #429 by @bobsingor – Fixed group selection box ignoring document permissions:
    • Added canModifyAnnotations permission check to GroupSelectionBox component across React, Vue, and Svelte
    • Group drag and resize operations are now properly disabled when the user lacks annotation modification permissions
    • This aligns group selection behavior with individual annotation container permission checks

@embedpdf/plugin-commands@2.4.0

Minor Changes

  • #426 by @bobsingor – Added logger to command action context, enabling commands to log debug information through the plugin's logger instance.

@embedpdf/plugin-history@2.4.0

Minor Changes

  • #426 by @bobsingor – Added history purging by command metadata:
    • Added purgeByMetadata() method to remove history entries matching a predicate on command metadata
    • Added generic metadata field to Command interface for attaching identifiable data to commands
    • Enables permanent operations (like redaction commits) to clean up related undo/redo history

@embedpdf/plugin-redaction@2.4.0

Minor Changes

  • #426 by @bobsingor – Added annotation-based redaction mode for integrated redaction workflow:
    • Added useAnnotationMode config option to use REDACT annotations as pending redactions
    • Added unified RedactionMode.Redact mode supporting both text selection and area marquee
    • Added redactTool annotation tool for integration with annotation plugin
    • Added RedactHighlight and RedactArea components for rendering redact annotations
    • Added automatic renderer registration via framework-specific RedactionPluginPackage
    • Added source, markColor, redactionColor, and text properties to RedactionItem type
    • Pending redactions now sync with annotation plugin state in annotation mode
    • Added enableRedact(), toggleRedact(), isRedactActive(), endRedact() methods
    • Removed deprecated startRedaction() and endRedaction() methods from scope API

@embedpdf/plugin-ui@2.4.0

Minor Changes

  • #428 by @bobsingor – Added modal props feature to pass context when opening modals:
    • Extended openModal(modalId, props?) to accept optional props parameter
    • Added props field to ModalSlotState type
    • Added modalProps to ModalRendererProps for all frameworks (Preact, React, Svelte, Vue)
    • Updated schema renderers to pass modalProps through to modal components

@embedpdf/snippet@2.4.0

Minor Changes

  • #428 by @bobsingor – Fixed link modal context handling:

    • Added source prop to LinkModal to distinguish between annotation and text selection context
    • Updated annotation:add-link command to pass { source: 'selection' } when opening modal
    • Updated annotation:toggle-link command to pass { source: 'annotation' } when opening modal
    • Prevents incorrect behavior where annotation selection would override text selection when creating links
  • #426 by @bobsingor – Added redaction management features:

    • Added RedactionSidebar component for viewing and managing pending redactions
    • Added annotation:apply-redaction command to apply the selected redaction annotation
    • Added redaction:redact command for unified redact mode (text + area)
    • Added panel:toggle-redaction command for toggling the redaction sidebar
    • Added redaction panel configuration to UI schema
    • Added REDACT annotation type support in annotation sidebar
    • Added redactCombined and redactionSidebar icons
    • Added translations for redaction panel, overlay text, and redaction states
    • Updated redaction toolbar to use unified redact mode

Patch Changes

  • #430 by @bobsingor – Added document permission checks to redaction sidebar buttons:

    • "Clear All" button is now disabled when canModifyAnnotations is false
    • "Redact All" button is now disabled when canModifyContents is false
    • Added squiggly annotation tool to annotation toolbar
    • Added ink tool to annotation overflow menu and responsive breakpoints
  • 57a8431 by @bobsingor – Fixed TabButton component causing unintended form submission when used inside forms. Added type="button" to prevent tab buttons from triggering form submit, which was causing the link modal to close immediately when switching to the Page tab.

@embedpdf/core@2.4.0

Patch Changes

  • #426 by @bobsingor – Fixed AutoMount component to render utilities inside wrapper context. Utilities registered via addUtility() now have access to context provided by wrappers (React, Vue, Svelte), enabling plugins to share context between wrappers and utilities.

@embedpdf/plugin-attachment@2.4.0

@embedpdf/plugin-bookmark@2.4.0

@embedpdf/plugin-capture@2.4.0

@embedpdf/plugin-document-manager@2.4.0

@embedpdf/plugin-export@2.4.0

@embedpdf/plugin-fullscreen@2.4.0

@embedpdf/plugin-i18n@2.4.0

@embedpdf/plugin-interaction-manager@2.4.0

@embedpdf/plugin-pan@2.4.0

@embedpdf/plugin-print@2.4.0

@embedpdf/plugin-render@2.4.0

@embedpdf/plugin-rotate@2.4.0

@embedpdf/plugin-scroll@2.4.0

@embedpdf/plugin-search@2.4.0

@embedpdf/plugin-selection@2.4.0

@embedpdf/plugin-spread@2.4.0

@embedpdf/plugin-thumbnail@2.4.0

@embedpdf/plugin-tiling@2.4.0

@embedpdf/plugin-view-manager@2.4.0

@embedpdf/plugin-viewport@2.4.0

@embedpdf/plugin-zoom@2.4.0

@embedpdf/utils@2.4.0

@embedpdf/react-pdf-viewer@2.4.0

@embedpdf/svelte-pdf-viewer@2.4.0

@embedpdf/vue-pdf-viewer@2.4.0

2026-01-22 23:21:41
embed-pdf-viewer

Release v2.3.0

@embedpdf/engines@2.3.0

Minor Changes

  • #406 by @bobsingor – Added support for creating and updating PDF link annotations with URI and internal page targets. Implemented IRT (In Reply To) and RT (Reply Type) property handling for annotation relationships and grouping. Refactored annotation content methods to use centralized applyBaseAnnotationProperties and readBaseAnnotationProperties helpers, reducing code duplication. Updated text markup and ink handlers to prefer strokeColor over deprecated color property.

@embedpdf/models@2.3.0

Minor Changes

  • #406 by @bobsingor – Added PdfAnnotationReplyType enum with Reply and Group values to support annotation relationships per ISO 32000-2. Added inReplyToId and replyType properties to PdfAnnotationObjectBase for annotation grouping and reply threads. Extended PdfLinkAnnoObject with styling properties: strokeColor, strokeWidth, strokeStyle, and strokeDashArray. Deprecated color in favor of strokeColor for text markup and ink annotations. Deprecated backgroundColor in favor of color for free text annotations. Fixed documentation comments for squiggly, underline, and strikeout annotations.

@embedpdf/plugin-annotation@2.3.0

Minor Changes

  • #406 by @bobsingor – Added multi-selection support with new Redux actions: ADD_TO_SELECTION, REMOVE_FROM_SELECTION, and SET_SELECTION. The selectedUids array now tracks multiple selected annotations, with selectedUid computed for backward compatibility. Implemented annotation grouping and ungrouping using IRT/RT properties via groupAnnotations() and ungroupAnnotations() methods. Added unified drag and resize API (startDrag, updateDrag, commitDrag, cancelDrag, startResize, updateResize, commitResize, cancelResize) that handles multi-annotation operations including attached link annotations. Added Link annotation component and GroupSelectionBox component for Preact, Svelte, and Vue frameworks. Updated text markup tools to use strokeColor and suppress selection layer rects. Improved commit process with collectPendingChanges, executeCommitBatch, and commit locking to prevent concurrent modifications.

@embedpdf/plugin-commands@2.3.0

Minor Changes

  • #406 by @bobsingor – Made labelKey dynamic, allowing it to be a function that returns different translation keys based on state. Added dynamic icon support so command icons can change at runtime. Added registry to the dynamic evaluation context for accessing other plugins. Made ui an optional dependency instead of not listed. Added early return in detectCommandChanges when document is not fully loaded.

@embedpdf/plugin-interaction-manager@2.3.0

Minor Changes

  • #406 by @bobsingor – Added stopImmediatePropagation() and isImmediatePropagationStopped() methods to pointer events via the new EmbedPdfPointerEventExtensions interface. This allows higher-priority handlers to prevent lower-priority handlers from activating for the same event. Updated mergeHandlers to respect propagation state and stop calling handlers when propagation is stopped. Refactored EmbedPdfPointerEvent as a generic type that combines native events with extensions.

@embedpdf/plugin-selection@2.3.0

Minor Changes

  • #406 by @bobsingor – Added marquee selection functionality allowing users to drag a rectangle to select multiple elements. Introduced createMarqueeSelectionHandler and createTextSelectionHandler as separate pointer event handlers that can be combined with mergeHandlers. Added MarqueeSelection component for Preact, Svelte, and Vue. Added EnableForModeOptions interface with showRects option for configurable selection behavior. Added onMarqueeChange and onMarqueeEnd events. Added setMarqueeEnabled and isMarqueeEnabled methods to the capability.

@embedpdf/snippet@2.3.0

Minor Changes

  • #406 by @bobsingor – Added LinkModal component for creating and editing link annotations with URL and internal page targets. Added new icons: GroupIcon, UngroupIcon, LinkIcon, LinkOffIcon, ExternalLinkIcon, and MarqueeSelectIcon. Updated annotation sidebar to support multi-selection using getSelectedAnnotations selector. Added grouping and ungrouping commands with dynamic labels and icons. Added marquee selection command. Updated UI schema and translations for new link and grouping features.

@embedpdf/pdfium@2.3.0

Patch Changes

  • #406 by @bobsingor – Updated PDFium WASM module with new bindings for annotation actions and reply types. Added EPDFAnnot_SetAction, EPDFAnnot_GetReplyType, and EPDFAnnot_SetReplyType functions to support link annotations and annotation grouping.

@embedpdf/plugin-redaction@2.3.0

Patch Changes

  • #406 by @bobsingor – Updated to use the new enableForMode signature with options object. Configured redaction mode to suppress selection layer rects since the redaction plugin renders its own selection visualization.

@embedpdf/plugin-ui@2.3.0

Patch Changes

  • #406 by @bobsingor – Removed commands from required dependencies. The UI plugin no longer requires the commands plugin to be registered.

@embedpdf/core@2.3.0

@embedpdf/plugin-attachment@2.3.0

@embedpdf/plugin-bookmark@2.3.0

@embedpdf/plugin-capture@2.3.0

@embedpdf/plugin-document-manager@2.3.0

@embedpdf/plugin-export@2.3.0

@embedpdf/plugin-fullscreen@2.3.0

@embedpdf/plugin-history@2.3.0

@embedpdf/plugin-i18n@2.3.0

@embedpdf/plugin-pan@2.3.0

@embedpdf/plugin-print@2.3.0

@embedpdf/plugin-render@2.3.0

@embedpdf/plugin-rotate@2.3.0

@embedpdf/plugin-scroll@2.3.0

@embedpdf/plugin-search@2.3.0

@embedpdf/plugin-spread@2.3.0

@embedpdf/plugin-thumbnail@2.3.0

@embedpdf/plugin-tiling@2.3.0

@embedpdf/plugin-view-manager@2.3.0

@embedpdf/plugin-viewport@2.3.0

@embedpdf/plugin-zoom@2.3.0

@embedpdf/utils@2.3.0

@embedpdf/react-pdf-viewer@2.3.0

@embedpdf/svelte-pdf-viewer@2.3.0

@embedpdf/vue-pdf-viewer@2.3.0

2026-01-13 03:05:54
embed-pdf-viewer

Release v2.2.0

@embedpdf/core@2.2.0

Minor Changes

  • #389 by @bobsingor – Add document permissions support:

    • Add useDocumentPermissions hook for React, Svelte, and Vue with reactive permission state and helper methods (hasPermission, hasAllPermissions, and shorthand booleans like canPrint, canCopyContents, etc.)
    • Add UPDATE_DOCUMENT_SECURITY action and updateDocumentSecurity action creator for updating document security state
    • Add reducer case for updating document permissions and owner unlock state
    • Add permission helper methods to BasePlugin: getDocumentPermissions, checkPermission, requirePermission
    • Export useDocumentPermissions from shared, svelte, and vue entry points
  • #389 by @bobsingor – Add permission override system with global and per-document configuration:

    • Add PermissionConfig interface for configuring permission overrides with enforceDocumentPermissions and overrides options
    • Add permissions option to PluginRegistryConfig for global permission configuration
    • Add permissions to DocumentState for per-document permission overrides
    • Add getEffectivePermission and getEffectivePermissions selectors for layered permission resolution (per-document → global → PDF)
    • Add human-readable permission names (print, modifyContents, copyContents, etc.) as alternatives to numeric flags
    • Update BasePlugin permission helpers (checkPermission, requirePermission, getDocumentPermissions) to use effective permissions
    • Update useDocumentPermissions hooks (React, Svelte, Vue) to return both effective and raw PDF permissions
    • Add config prop to EmbedPDF components for passing PluginRegistryConfig, deprecating individual logger prop
    • Export PermissionConfig, PermissionName, ALL_PERMISSION_FLAGS, and permission selectors

@embedpdf/engines@2.2.0

Minor Changes

  • #389 by @bobsingor – Add document security/encryption engine methods:
    • Add setDocumentEncryption for setting AES-256 encryption with user/owner passwords and permission flags
    • Add removeEncryption for marking documents for encryption removal on save
    • Add unlockOwnerPermissions for unlocking owner permissions on encrypted documents
    • Add isEncrypted and isOwnerUnlocked query methods
    • Implement security methods in PdfEngine orchestrator, RemoteExecutor, PdfiumNative, WebWorkerEngine, and EngineRunner
    • Query and store isEncrypted, isOwnerUnlocked, and permissions when opening documents

@embedpdf/models@2.2.0

Minor Changes

  • #389 by @bobsingor – Add PDF permission and security types:
    • Add isEncrypted, isOwnerUnlocked, and permissions properties to PdfDocumentObject
    • Add PdfPermissionFlag enum with all PDF permission flags (Print, ModifyContents, CopyContents, ModifyAnnotations, FillForms, ExtractForAccessibility, AssembleDocument, PrintHighQuality) and AllowAll combination
    • Add buildPermissions helper function for combining permission flags
    • Add PermissionDeniedError class for permission check failures
    • Add security methods to PdfEngine interface: setDocumentEncryption, removeEncryption, unlockOwnerPermissions, isEncrypted, isOwnerUnlocked
    • Add security methods to IPdfiumExecutor interface

@embedpdf/plugin-annotation@2.2.0

Minor Changes

  • #389 by @bobsingor – Add permission checking for annotation operations:
    • Check PdfPermissionFlag.ModifyAnnotations before creating, updating, or deleting annotations
    • Check permission before activating annotation tools
    • Check permission before creating annotations from text selection
    • Update AnnotationContainer components (React, Svelte, Vue) to respect canModifyAnnotations permission:
      • Disable drag/resize when permission is denied
      • Hide vertex handles when permission is denied
      • Guard double-click handlers based on permission

@embedpdf/plugin-document-manager@2.2.0

Minor Changes

  • #389 by @bobsingor – Add per-document permission overrides when opening documents:
    • Add permissions option to LoadDocumentUrlOptions for URL-based document loading
    • Add permissions option to LoadDocumentBufferOptions for buffer-based document loading
    • Add permissions option to OpenFileDialogOptions for file dialog document loading
    • Pass permission configuration to core store when documents are opened

@embedpdf/plugin-print@2.2.0

Minor Changes

  • #389 by @bobsingor – Add permission checking for print operations:
    • Check PdfPermissionFlag.Print before allowing document printing
    • Return PdfErrorCode.Security error when print permission is denied

@embedpdf/plugin-redaction@2.2.0

Minor Changes

  • #389 by @bobsingor – Add permission checking for redaction operations:
    • Check PdfPermissionFlag.ModifyContents before adding pending redaction items
    • Check permission before enabling redact selection or marquee redact modes
    • Check permission before starting redaction mode
    • Check permission before committing pending redactions (single or all)
    • Return PdfErrorCode.Security error when permission is denied for commit operations

@embedpdf/plugin-ui@2.2.0

Minor Changes

  • #389 by @bobsingor – Add overlay enable/disable functionality:
    • Add SET_OVERLAY_ENABLED action and setOverlayEnabled action creator
    • Add enabledOverlays state to UIDocumentState for tracking overlay visibility
    • Add overlay management methods to UIScope: enableOverlay, disableOverlay, toggleOverlay, isOverlayEnabled, getEnabledOverlays
    • Add onOverlayChanged event hook for overlay state changes
    • Update schema renderer to filter overlays by enabled state
    • Initialize overlay enabled state from schema's defaultEnabled property

@embedpdf/snippet@2.2.0

Minor Changes

  • #389 by @bobsingor – Add document security and protection features:

    • Add ProtectModal component for setting document encryption with user/owner passwords and permission restrictions
    • Add UnlockOwnerOverlay component to notify users when viewing protected documents with restricted permissions
    • Add ViewPermissionsModal component for viewing and unlocking document permissions
    • Add PermissionsDisplay component for showing permission status
    • Add permission-based command disabling for annotation, redaction, print, copy, and capture commands
    • Add security-related translations for English, German, Dutch, French, Spanish, and Chinese
    • Add new icons: EyeIcon, EyeOffIcon, InfoIcon, UnlockIcon
    • Update UI schema with protection modal, view permissions modal, and unlock owner overlay
  • #389 by @bobsingor – Add global permission configuration to snippet viewer:

    • Add permissions option to PDFViewerConfig for global permission overrides
    • Support enforceDocumentPermissions to ignore PDF permissions entirely
    • Support overrides with human-readable names (print, modifyAnnotations, etc.) or numeric flags
    • Update command permission checks to use effective permissions via getEffectivePermission
    • Pass permission configuration to EmbedPDF via new config prop

@embedpdf/pdfium@2.2.0

@embedpdf/plugin-attachment@2.2.0

@embedpdf/plugin-bookmark@2.2.0

@embedpdf/plugin-capture@2.2.0

@embedpdf/plugin-commands@2.2.0

@embedpdf/plugin-export@2.2.0

@embedpdf/plugin-fullscreen@2.2.0

@embedpdf/plugin-history@2.2.0

@embedpdf/plugin-i18n@2.2.0

@embedpdf/plugin-interaction-manager@2.2.0

@embedpdf/plugin-pan@2.2.0

@embedpdf/plugin-render@2.2.0

@embedpdf/plugin-rotate@2.2.0

@embedpdf/plugin-scroll@2.2.0

@embedpdf/plugin-search@2.2.0

@embedpdf/plugin-selection@2.2.0

@embedpdf/plugin-spread@2.2.0

@embedpdf/plugin-thumbnail@2.2.0

@embedpdf/plugin-tiling@2.2.0

@embedpdf/plugin-view-manager@2.2.0

@embedpdf/plugin-viewport@2.2.0

@embedpdf/plugin-zoom@2.2.0

@embedpdf/utils@2.2.0

@embedpdf/react-pdf-viewer@2.2.0

@embedpdf/svelte-pdf-viewer@2.2.0

@embedpdf/vue-pdf-viewer@2.2.0

2026-01-09 06:56:08
embed-pdf-viewer

Release v2.1.2

@embedpdf/pdfium@2.1.2

Patch Changes

  • #369 by @bobsingor – Improved PDF content handling with the following changes:
    • Shading object support: Shading patterns (gradients, mesh shadings) are now properly preserved and regenerated when modifying PDF pages. Previously, shading objects could be lost during page content updates.
    • Shading redaction: Redaction now correctly removes shading objects that fall entirely within a redaction area, ensuring complete content removal.
    • Graphics state preservation: Existing graphics state resources (such as soft masks, overprint modes, and other advanced properties) are now preserved with their original names during content regeneration.

@embedpdf/snippet@2.1.2

Patch Changes

  • #369 by @bobsingor – Add missing translations for redaction delete and commit commands (redaction.deleteSelected and redaction.commitSelected) in all supported languages (English, German, Dutch, French, Spanish).

  • #381 by @bobsingor

    • Add i18n support for capture and print dialogs with translations for all supported languages
    • Add document:capture command to toolbar for screenshot functionality
    • Refactor hint-layer and capture components to use translation hooks
    • Remove unused @types/classnames dependency
  • #378 by @bobsingor

    • Add Simplified Chinese (zh-CN) translations for all UI elements
    • Add i18n support for annotation type labels in comment sidebar with translation keys and fallbacks
    • Fix rimraf command to use --glob flag for compatibility with rimraf v4+

@embedpdf/core@2.1.2

@embedpdf/engines@2.1.2

@embedpdf/models@2.1.2

@embedpdf/plugin-annotation@2.1.2

@embedpdf/plugin-attachment@2.1.2

@embedpdf/plugin-bookmark@2.1.2

@embedpdf/plugin-capture@2.1.2

@embedpdf/plugin-commands@2.1.2

@embedpdf/plugin-document-manager@2.1.2

@embedpdf/plugin-export@2.1.2

@embedpdf/plugin-fullscreen@2.1.2

@embedpdf/plugin-history@2.1.2

@embedpdf/plugin-i18n@2.1.2

@embedpdf/plugin-interaction-manager@2.1.2

@embedpdf/plugin-pan@2.1.2

@embedpdf/plugin-print@2.1.2

@embedpdf/plugin-redaction@2.1.2

@embedpdf/plugin-render@2.1.2

@embedpdf/plugin-rotate@2.1.2

@embedpdf/plugin-scroll@2.1.2

@embedpdf/plugin-search@2.1.2

@embedpdf/plugin-selection@2.1.2

@embedpdf/plugin-spread@2.1.2

@embedpdf/plugin-thumbnail@2.1.2

@embedpdf/plugin-tiling@2.1.2

@embedpdf/plugin-ui@2.1.2

@embedpdf/plugin-view-manager@2.1.2

@embedpdf/plugin-viewport@2.1.2

@embedpdf/plugin-zoom@2.1.2

@embedpdf/utils@2.1.2

@embedpdf/react-pdf-viewer@2.1.2

@embedpdf/svelte-pdf-viewer@2.1.2

@embedpdf/vue-pdf-viewer@2.1.2