> 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-4/v4-0-0.md).

# Version 4.0.0 Changelog (2018-10-09)

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

## Breaking Changes

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

* The lineCount property is now a property on the CalloutCreateTool prototype instead of a property on the constructor.
* The getMarkupOff, setMarkupOff, toggleAnnotations, getUseFilter, setUseFilter and filterAnnotations functions on AnnotationManager have been removed. You can achieve the same functionality using AnnotationManager's hideAnnotations and showAnnotations functions.

## Updates

* The beta UI is now the default viewer. The legacy UI can be enabled by passing `ui: 'legacy'` in the WebViewer constructor.
* jQuery is no longer required to be loaded as a dependency along with webviewer.min.js.
* Added support for viewing annotation appearances on all markup annotations and on push button widgets. AnnotationManager's drawAnnotations function is now asynchronous and returns a promise to accommodate this.
* Many structural changes to the download package. The lib folder has been changed so that the UI and core files are in separate folders. The samples have also been revamped.
* Incremental loading of annotations is now supported to more quickly render and display annotations when jumping to a random page.
* Allow annotations to be dragged outside of the page boundaries using a new flag [`ALLOW_ANNOTS_OUTSIDE_PAGE`](https://sdk.apryse.com/api/web/Core.Tools.Tool.html#Tool__anchor) on the base tool object.
* The default FreeText font has been changed from Verdana to Helvetica.
* Added the [MaintainAspectRatio](https://sdk.apryse.com/api/web/Core.Annotations.Annotation.html#Annotation__anchor) property to annotations. If true then the annotation will only have control points on the corners and the aspect ratio will be maintained when resizing.
* Added a [getAnnotationsLoadedPromise](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#getAnnotationsLoadedPromise__anchor) function on DocumentViewer that can be used instead of the annotationsLoaded event if preferred.
* Added [setAnnotationDisplayAuthorMap](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#setAnnotationDisplayAuthorMap__anchor) and [getDisplayAuthor](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#getDisplayAuthor__anchor) functions on AnnotationManager to allow easy mapping between annotation author ids and the name that is displayed in the UI.
* Added [displayPageLocation](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#displayPageLocation__anchor) function on DocumentViewer to jump to a specific location on a page.
* Updated WinRT sample to work with VS2017.

## Fixes

* Fixed issue with caching too much page text data when calling loadPageText.
* Fixed issue where annotations would be unnecessarily rerendered when the visible pages changed.
* Fixed issue with margins not being removed when printing in Edge.
* Fixed issue with loading documents that have a query or hash parameter in the path.


---

# 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-4/v4-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.
