> 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-3/v3-3-0.md).

# Version 3.3.0 Changelog (2018-07-31)

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

### WebViewer Server Integration

* Official support for multi-container scaling

### PDFNetJS updates

* Both lean and full PDF workers are now included in one build. You can choose the full API by passing "fullAPI: true" to your WebViewer constructor instead of downloading a separate build.
* Added support for setting the worker path to an absolute location on another server
* Added Link support in markdown documents
* Performance improvements when loading Excel documents
* Adjusted the names of compressed worker files to end in .mem so that servers won't try to compress them again
* Updated the page operations sample to include extractPages functionality
* Fixed issue with office worker document loading where the first pages may be loaded before they were being listened to

### WebViewer HTML5 updates

* Added a new beta UI based on React. You can pass the constructor option `ui: beta` to try out this UI.
* Added a runInIframe function which makes it easier to run custom WebViewer code from your app without using a config file
* Updated margin handling in the viewer so that they scale with the zoom level
* Added a showcase sample and a quick start script to get it running locally
* Added the `assetPath` option to allow JS and CSS files to be loaded from another server
* Added the `css` option to allow a custom CSS file to be loaded inside the WebViewer iframe
* Allow documents to load when the "path" option is on a different domain from the app location
* When importing annotations asynchronously, periodically draw annotations on the currently visible pages
* Optimizations for annotation loading from XOD files
* Exposed the [forEachField](https://sdk.apryse.com/api/web/Core.Annotations.Forms.FieldManager.html#forEachField) function on FieldManager
* Fire a single annotationChanged event when dragging multiple selected annotations
* The initialDoc option is no longer required to be passed if startOffline is true
* Pulled the usage of the i18next library outside of CoreControls.js
* Updates to the Array prototype are no longer enumerable
* Fixed issue where drawing a watermark would offset the printing of text fields
* Fixed issue with flickering hand cursors in IE and Edge
* Fixed slowness when creating and dragging annotations in IE on large documents
* Fixed issue where getAnnotCommand wasn't outputting field values for nested fields
* Fixed issue where the same annotation reply could added multiple times to the parent annotation's list of replies

### WebViewer mobile updates

* Double tapping is now disallowed when using an annotation tool to prevent accidental zooming
* Fixed issue with copying selected text across multiple pages


---

# 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-3/v3-3-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.
