> For the complete documentation index, see [llms.txt](https://docs.apryse.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.apryse.com/web/changelogs/version-8/v8-0/v8-0-0.md).

# Version 8.0.0 Changelog (2021-07-19)

World's #1 PDF SDK Library for Web, Mobile, Server, Desktop

## Breaking changes

See [v8 migration guide](/web/migration-guides/migrating-to-v8.md) for information on the breaking changes.

Technically not a breaking change, but there are new namespaces on the `instance` object for `Core` and `UI`. You can find more details and examples inside the [migration guide](/web/migration-guides/migrating-to-v8.md).

## WebViewer Core

### New

* Added the [`FormFieldCreationManager`](https://sdk.apryse.com/api/web/Core.FormFieldCreationManager.html) as well as several new tools to allow users to create form fields. Note that these new tools are used in the UI's new forms toolbar.
* Added the ability to view `doc`, `xls` and `ppt` files completely on the client side
* Added support for adding/editing/reorganizing bookmarks in the outline panel. Note that `fullAPI: true` needs to be enabled.
* Added support for rotating freetext, stamp, rectangle and ellipse annotations
* Added a new [`Core`](https://sdk.apryse.com/api/web/Core.html) namespace which replaces the `CoreControls` namespace and now contains all the other namespaces (e.g. Annotations, Tools, etc). Note that the previous namespace structure is still usable but deprecated. See the [migration guide](/web/migration-guides/migrating-to-v8.md#instance-namespace-adjustments) for more details
* Added support for adding [3D annotations](/web/annotation/3d.md) to a document in WebViewer. Note that the annotations can be saved in XFDF but are not currently merged into the PDF when downloading.
* Updated the three-panel [Diff Documents sample](https://sdk.apryse.com/samples/web/samples/advanced/diff/) to have better performance, handle rotation better and show differences in annotations
* Added APIs for office file template filling [`doc.getTemplateKeys`](https://sdk.apryse.com/api/web/Core.Document.html#getTemplateKeys__anchor) and [`doc.applyTemplateValues`](https://sdk.apryse.com/api/web/Core.Document.html#applyTemplateValues__anchor), as well as a sample that demonstrates how to use them
* Updated the version of `PDFNet` used to version 9.0. All Apryse SDK 9.0 APIs are available with the full API.
* Added support for passing initialization options into Annotation constructors (e.g. X, Y, Width, FillColor, etc)
* Updated a number of APIs to be of the form `enableXYZ`/`disableXYZ`. The previous APIs are still available for backwards compatibility.
* Renamed `CoreControls.js` to `webviewer-core.min.js`
* Updated annotation linking to use the normal grouping APIs instead of special link only APIs
* Added support for scrolling a document with two fingers on mobile devices
* Added the [`fieldManager.areRequiredFieldsFilled`](https://sdk.apryse.com/api/web/Core.Annotations.Forms.FieldManager.html#areRequiredFieldsFilled__anchor) API that returns true if all required fields in the current document have a value
* Added the [`fieldManager.getFields`](https://sdk.apryse.com/api/web/Core.Annotations.Forms.FieldManager.html#getFields__anchor) API which returns an array of all fields in the document, including nested fields
* Added a tool for creating freehand highlight annotations, typically used for highlighting images or text on scanned documents
* For files with no extension specified or contained in the URL, WebViewer will attempt to read the Content-Type header to determine the type of file
* Removed the `WidgetEditingManager` as it has been replaced by the [`FormFieldCreationManager`](https://sdk.apryse.com/api/web/Core.FormFieldCreationManager.html)
* Updated the [`annotationManager.jumpToAnnotation`](https://sdk.apryse.com/api/web/Core.AnnotationManager.html#jumpToAnnotation__anchor) API to take optional options `zoom`, `horizontalOffset`, `verticalOffset` and `fitToView`
* Improved the performance of automatic page linking so that it doesn't slow down the [`annotationsLoaded`](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#event:annotationsLoaded__anchor) event
* Updated the [`annotationManager.getDisplayAuthor`](https://sdk.apryse.com/api/web/Core.AnnotationManager.html#getDisplayAuthor__anchor) API to [take an author string instead of an annotation object](/web/migration-guides/migrating-to-v8.md#getdisplayauthor-parameter-change)
* Added the [`document.updateRasterizerOptions`](https://sdk.apryse.com/api/web/Core.Document.html#updateRasterizerOptions__anchor) API which allows a number of document rasterizer options to be applied when rendering pages.
* Added the [`freetextAnnotation.setAutoSizeType`](https://sdk.apryse.com/api/web/Core.Annotations.FreeTextAnnotation.html#setAutoSizeType__anchor) API which lets the type of autosizing being used be changed programmatically
* Added the [`useStamp`](https://sdk.apryse.com/api/web/Core.Tools.RubberStampCreateTool.html#useStamp__anchor) API on the `RubberStampCreateTool`. When called on an instance of this tool it will immediately create a stamp with the provided properties that can be added to the page.
* Updated the [`setCustomData`](https://sdk.apryse.com/api/web/Core.Annotations.Annotation.html#setCustomData__anchor) function to only take in strings, and the `getCustomData` function to only return strings. The `CustomData` property has been removed. This is for compatibility with other platforms and more information can be found in the [migration guide](/web/migration-guides/migrating-to-v8.md#customdata-changes)
* Added better crash reporting for office documents
* Added support for displaying file attachment annotations created by Outlook
* Added support for displaying the appearance of readonly text widgets
* Added constants for stamp annotation icon files [`Annotations.StampAnnotation.IconNames`](https://sdk.apryse.com/api/web/Core.Annotations.StampAnnotation.html#.IconNames__anchor)
* Added the [`documentViewer.setDefaultPageColor`](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#setDefaultPageColor__anchor) API which sets the background color for pages
* Added support for symmetric annotation resizing. Holding alt/option and resizing will maintain the center point while resizing in all directions. Holding alt/option and shift while resizing will do the same thing while also maintaining the aspect ratio.
* Improving the zooming behavior so that annotations don't blink when changing the zoom level
* Updated annotation `NoZoom` rendering to be consistent. Now all annotations will properly render with the `NoZoom` property set to true.
* Added support for the `documentFileName` property in embedded JS
* Added support for displaying different checkbox and radio button styles (e.g. circle, square, star, cross, rectangle, diamond)
* Added the [`refreshAppearances`](https://sdk.apryse.com/api/web/Core.Annotations.Forms.Field.html#refreshAppearances__anchor) API on field objects which will refresh the appearance of each widget associated with that field
* When `deselectAllAnnotations` is called, now the `annotationSelected` event will return an array of the previously selected annotations, not null
* Updated the expected property name of the parameter to `documentViewer.select` to be `pageNumber` instead of `pageIndex`
* Updated the pageList parameter passed to setPagesUpdatedInternalAnnotationsTransform from 0-indexed page numbers to 1-indexed

### Fixes

* Fixed issue where a freetext annotation with a callout intent is treated as a normal freetext if there are no callout line values
* Fixed issue where the measurement value for perimeter and area annotations wasn't being updated as the annotation was created
* Fixed issue where using `DocumentViewer` directly inside an Angular project wouldn't fire iframe loading events properly because of how Angular changes the event handling
* Fixed issue where the `documentViewer.setViewportRenderMode` API wasn't working properly
* Fixed issue where the text height wasn't calculated properly for freetext annotations in Safari
* Fixed issue where autosized freetext annotations didn't work correctly on rotated pages
* Fixed issue with some embedded JS scripts in IE11
* Fixed issue where undo didn't work in certain cases
* Fixed issue with surrogate handling in XOD rendering
* Fixed issue where Firefox and Safari were scaling down checkboxes unnecessarily
* Fixed issue where page open actions for the first page wouldn't fire if the document loaded wasn't the first one
* Fixed issue where the optimize script wouldn't work with the npm package
* Fixed issue where signatures with a white background weren't able to be signed
* Fixed issue where freetext annotations could be partially initialized in a bad state programmatically
* Fixed issue where XOD canvas elements with opacity wouldn't be blended correctly
* Fixed issue where WebViewer was capping the maximum font size for auto-sized text widgets

## WebViewer UI

### New

* Added a new "Forms" toolbar which provides tools to create different form fields. A form style menu is also available to edit various styles on existing form fields.
* Added a "Fill and Sign" toolbar which provides tools to more easily fill and sign documents that don't include fillable forms (e.g. scanned documents)
* The legacy UI will no longer be updated to work with WebViewer Core 8.0 or newer versions
* Added the [`UI`](https://sdk.apryse.com/api/web/UI.html) namespace on the WebViewer instance object. This namespace includes all UI APIs and constants.
* Added the [`addEventListener`](https://sdk.apryse.com/api/web/UI.html#.addEventListener__anchor) and [`removeEventListener`](https://sdk.apryse.com/api/web/UI.html#.removeEventListener__anchor) APIs on the `UI` namespace to more easily listen to events fired by the UI.
* Added support for viewing, adding and modifying text annotations in reader mode
* Added the [`instance.UI.enable/disableDesktopOnlyMode`](https://sdk.apryse.com/api/web/UI.html#.enableDesktopOnlyMode__anchor) APIs which prevents the UI from making adjustments to the UI on smaller screens
* Changing the freetext fill and stroke will now update the icon color in the UI
* Improved handling of nested and locked layers in the layers panel
* Updated the page navigation component to automatically fade out after a period of inactivity so that it doesn't block the page content. It will return when scrolling or hovering. The [`instance.UI.disableFadePageNavigationComponent`](https://sdk.apryse.com/api/web/UI.html#.disableFadePageNavigationComponent__anchor) API is available if you would like to disable this behavior.
* Added support for multiple page selection in the thumbnail panel with shift + click
* Updated extract pages modal to allow the extracted pages to be removed at the same time
* Added support for sorting and filtering by annotation color in the notes panel
* Adjusted the behavior of the annotation style popup so that if there was not enough space on the bottom or top of the annotation it would position itself on whichever side had more space
* Added [`instance.UI.disablePageDeletionConfirmationModal`](https://sdk.apryse.com/api/web/UI.html#.disablePageDeletionConfirmationModal__anchor) to disable the delete page modal that appears when deleting pages from the thumbnail panel
* When dragging more than one file into the thumbnail panel now all files will be merged
* Added support for wildcard matching in configorigin.txt file. This means you can use the `*` character as a wildcard for matching allowed origins.
* Added the [`selectedThumbnailChanged`](https://sdk.apryse.com/api/web/UI.html#event:selectedThumbnailChanged__anchor) event
* Added [`instance.UI.enable/disableToolDefaultStyleUpdateFromAnnotationPopup`](https://sdk.apryse.com/api/web/UI.html#.disableToolDefaultStyleUpdateFromAnnotationPopup__anchor) which prevents the default tool styles from updating when annotation styles are changed
* Updated the thumbnail panel slider styling to be consistent across browsers
* Added support for disabling zooming with the mouse wheel through `instance.UI.disableFeatures([instance.UI.Feature.MouseWheelZoom])`
* Added a cloudy rectangle area measurement tool to the default measurement toolbar
* Removed the "Subject" label in the printed note summary if there was no subject defined on the annotation

### Fixes

* Fixed issue with styling header items when the header layout is reversed
* Fixed issue where the rectangle used for cropping was visible in the notes panel
* Fixed issue where enabling the MathSymbols feature didn't also enable the richtext popup
* Fixed issue where the thumbnail panel shows the incorrect text value when only one thumbnail is selected
* Fixed issue where text inside the header ribbon dropdown would overflow in some languages
* Fixed issue where the ribbons wouldn't be centered when more buttons are added to the header
* Fixed issue where in IE you were not able to scroll all the way over horizontally when zoomed in
* Fixed issue where the opacity level of the annotation tools wasn't updated when the annotation was updated


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.apryse.com/web/changelogs/version-8/v8-0/v8-0-0.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
