This HTML page is not optimized for LLM or AI agent consumption. Fetch the Markdown version instead: /guides/web/release-notes/1-19.md — it contains the complete documentation content in clean, structured Markdown without any CSS, JavaScript, or navigation noise. 1.19 release notes

1.19 release notes

RSS

Nutrient Web SDK 1.19 adds programmatic execution of PDF actions, line spacing control for text and form field annotations, and a configurable Standalone page cache limit. It also brings annotation tab order to Document Engine mode, strengthens screen reader support, updates GdPicture, and ships a broad round of memory, rendering, and forms fixes. This release also removes duplicate localization keys, which requires an update if you override them. See the changelog for full details.

Execute PDF actions programmatically

You can now execute PDF actions from your own code with instance.executeAction() instead of relying on a user activating them in the UI. This works with action objects returned by APIs such as getDocumentOutline() and getBookmarks(), with actions attached to link annotations, and with actions you construct yourself.

  • Execution is fail-fast: Traversal of the action tree stops at the first error and the returned promise is rejected. Side effects from actions that already ran aren’t rolled back.
  • In server-backed mode, JavaScript actions require an execution context. Use the context option to pass the triggering annotation or form field.
// Execute the action of the first document outline element.
const outline = await instance.getDocumentOutline();
const firstItem = outline.first();
if (firstItem?.action) {
await instance.executeAction(firstItem.action);
}
// Execute an action you construct yourself.
await instance.executeAction(
new NutrientViewer.Actions.GoToAction({ pageIndex: 5 })
);
// Execute a JavaScript action with annotation context.
await instance.executeAction(linkAnnotation.action, {
context: { type: "annotation", annotation: linkAnnotation },
triggerEventType: "onPointerDown",
});

For more information, refer to the PDF actions guide.

Line spacing for text and form field annotations

Text annotations and widget annotations now expose a lineSpacing property that controls the spacing between lines of text. The value is the total line height in PDF points, measured baseline to baseline, and is independent of the font size:

const textAnnotation = new NutrientViewer.Annotations.TextAnnotation({
pageIndex: 0,
boundingBox: new NutrientViewer.Geometry.Rect({
left: 50,
top: 50,
width: 300,
height: 120,
}),
fontSize: 12,
text: {
format: "plain",
value: "First line\nSecond line",
},
// Total line height in PDF points, independent of `fontSize`.
lineSpacing: 18,
});
await instance.create(textAnnotation);

Configurable Standalone page cache

In Standalone mode, the page cache is now capped at 256 MiB by default. It was previously unbounded, which allowed long viewing sessions over large documents to retain more memory than necessary. Use the new pageCacheSizeInBytes option to raise or lower the limit to suit your documents and target devices:

NutrientViewer.load({
// ...your existing configuration.
pageCacheSizeInBytes: 512 * 1024 * 1024, // 512 MiB
});

The currently active page can still exceed this limit when that page alone requires more memory.

Annotation tab order in Document Engine mode

instance.getPageTabOrder() is now supported in Document Engine mode, so you can read the keyboard navigation order of a page’s annotations and form fields with the same API in both backends. This requires Document Engine 1.18.0 or later, once available; against earlier versions, the method reports that the Document Engine version doesn’t provide the tab order.

Independent callout text box positioning

Callout annotations are easier to lay out. You can now move a callout’s text box on its own by clicking and dragging it, leaving the callout line and its end point in place. A plain click still enters text edit mode, so existing editing behavior is unchanged.

Accessibility

This release resolves a round of issues that accessibility audits flagged, and it improves how the UI behaves for assistive technology and motion-sensitive users.

  • Comment threads, comment markers, and the Form Creator dialog no longer carry invalid ARIA references, so their accessible names and controls resolve correctly.
  • The visibility and lock toggles in the layers sidebar now have accessible names for screen readers.
  • Comment threads no longer nest a complementary landmark inside another landmark.
  • Annotations sidebar page groups no longer reference a missing element in their ARIA label, and Document Editor page thumbnails no longer declare an ARIA description that cannot be resolved across the shadow DOM boundary. Both previously caused audits to report invalid ARIA attribute values.
  • The comment sidebar animation now honors the prefers-reduced-motion setting.

Localization changes

Duplicate and dotted localization keys are removed, so each string now has exactly one canonical key. If you override any of the affected keys through custom translations, update them to the new names.

Old keyNew key
TextComparison.filterInstructionTextComparison_filterInstruction
FormCreatorformCreator
multilinemultiLine

This release also fixes the custom color picker showing raw translation keys when using the en-GB locale. For more information on overriding translations, refer to the localization guide.

Performance improvements

  • Switching documents is faster because already-fetched dynamic fonts are reused instead of being downloaded again.
  • Opening the annotations sidebar on large documents in Standalone mode no longer delays page thumbnails and other content from rendering.
  • Standalone mode no longer preloads GdPicture for PDF ArrayBuffer inputs that begin with a UTF-8 byte-order mark before the PDF header.

Other additions

  • GdPicture is updated to 14.4.6.1. Refer to the GdPicture changelog for details.
  • Errors raised when Document Engine rejects an annotation, comment, or form field change now include the rejection reason reported by the server.

Memory and stability

  • Fixes retained workers and memory when a document load fails, and memory retention after unloading Standalone instances.
  • Fixes a memory leak where a failed GdPicture engine initialization left its web worker running, and stops the GdPicture runtime from being downloaded again on every subsequent document load after a failed preload.
  • Fixes a WebAssembly stack overflow in Safari when reusing Standalone instances.
  • Fixes server-backed exportPDF ignoring optimization, linearization, and PDF/A conformance options, and fixes PDF exports against Document Engine versions earlier than 1.12.0, which require authentication tokens in query parameters for the legacy /pdf endpoints.
  • Fixes automatically extracted links being skipped when loading a document, and empty arrays and null values in annotation custom data not being preserved.

Rendering, editing, and forms

  • Fixes rich text handling in text annotations, including font sizes (fractional sizes included) changing on PDF export, reimport, and editing or when pasting formatted content from external editors, and semi-transparent pasted backgrounds.
  • Fixes several rendering issues, including PDFs that combine CMYK content, spot colors, soft masks, and transparency effects rendering incorrectly, some elements not being rendered on complex pages, and appearance stream generation for text annotations containing a caron.
  • Fixes form field issues, including list box and combo box fields losing all but their first option when copied, pasted, or duplicated, and focused text fields not reflecting explicit value resets.
  • Fixes UI interaction issues, including the search UI opening behind an active annotation tool’s toolbar, the toolbar not reappearing when reopening a tool such as Document Crop or Measurements, moving a non-contiguous Document Editor page selection after a selected page doing nothing, and Content Editor Add Text on iOS requiring a second tap to show the keyboard.
  • Fixes annotations being placed with a horizontal offset in iframe render mode (useIframe: true) after a sidebar is opened when the viewer container isn’t flush with the viewport’s left edge.
  • Fixes preventTextCopy blocking text copying from the note annotation editor under the default shadow DOM rendering, the distance measurement tool creating a scale calibration when calibration was armed but not completed, and UI customization behavior for late-mounted slots and password prompt recipes, including note annotation creation now respecting keepSelectedTool.

For a full list of fixes, refer to the changelog.

Minimum Document Engine version required: 1.5.6

For a complete list of changes, bug fixes, and improvements, refer to the changelog. For previous release notes, refer to the Web SDK 1.18 release notes. We appreciate your feedback and contributions as we continue to enhance Nutrient Web SDK.