> 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-1-0.md).

# Version 3.1.0 Changelog (2017-12-12)

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

### New strings

* sidepanel.searchTab.wildCardMode, sidepanel.searchTab.searching
* password.enter, password.incorrect, password.ok, password.cancel

### PDFNetJS updates

* Added a WebAssembly based worker. This should improve viewer performance on Firefox and Safari in addition to being central to the new mobile support.
* Added brotli and gzip compression for worker files to allow for a faster download
* Added a PDF page operations sample
* Added an Office to PDF conversion sample
* Various performance improvements for loading documents
* Added support for text annotation repositioning on Office documents
* Added support for viewing of documents when the WebViewer library is on a separate server from the web application
* Added support for hyperlinks in Office documents
* Fixed a number of page cancellation issues with Office documents
* Fixed a number of API issues when loading documents using downloader
* Fixed issues with downloading Office documents before they were completely loaded

### WebViewer HTML5 updates

* Added support for streaming page thumbnails ahead of the pages themselves for XOD documents
* Added a sample showing how to integrate WebViewer into an Angular project
* Added support for displaying multiple search results at once. The search result colors can now be customized by using [docViewer.setSearchHighlightColors](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#setSearchHighlightColors__anchor)
* Added the [annotationsLoaded](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#event:annotationsLoaded) event to DocumentViewer that occurs when all of the document annotations have been loaded
* Updated the full text search UI to include arrows to navigate between search results, a button to cancel and clear search results ([docViewer.clearSearchResults](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#clearSearchResults__anchor)) and an indicator that a search is ongoing
* Added support for wildcard and regex searching
* Added the [searchInProgress event on DocumentViewer](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#event:searchInProgress__anchor) to indicate when a search starts or stops
* Required form fields now have a red border displayed around them
* Various optimizations to improve annotation rendering performance
* Added support for borders on links
* Added samples for node.js (annotationHandler.js) and ASP.NET (AnnotationController.cs) server annotation handlers under lib/html5
* Added warning messages to help troubleshoot issues with using the serverUrl option
* Updated translation files for languages besides English so that it was clear which translations were missing
* Added a tutorial explaining the WebViewer HTML structure
* Added [docViewer.setAnnotationImportOptions](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#setAnnotationImportOptions__anchor) to set the batch size and delay for async loading of annotations
* Added support for newlines in header and footer watermarks
* Updated auto font size fields as text is entered into the field and a minimum font size is now enforced
* Added support for importing and exporting all annotation flags
* Added support for the print, noview, locked, lockedcontents and readonly flags on annotations
* Added the [ACCEPTED\_IMAGE\_TYPES](https://sdk.apryse.com/api/web/Core.Tools.StampCreateTool.html) property to the stamp creation tool to specify which image types can be opened
* Added option to disable exporting of contents-richtext: `Annotations.Annotation.exportContentsRichText = false`
* The calculated font size is now exported for FreeText annotations with auto font size because of display issues in other viewers
* The note options menu is now displayed in the notes panel by default
* Updated so that IE will always use the desktop viewer so that instances of IE which incorrectly state they support touch won't receive the mobile viewer
* Improved performance when zooming on documents that have many widgets
* Annotations can no longer be selected when they are toggled off
* Added "page" attribute to annotation delete command
* The popup subelement is no longer serialized for FreeText annotations as this can cause issues with other viewers
* Fixed issue with Chrome 62 adding extra data to stamp annotation data URLs which caused issues in parsing
* Fixed slowness when selecting text on several pages
* Fixed memory leak when changing pages in non-continuous display modes
* Fixed memory issues with keeping page thumbnails around in the desktop viewer
* Fixed issue with the border and fill overlapping for semitransparent annotations
* Fixed issue with calculating auto sized text of form fields when the browser zoom was not 100%
* Fixed issue with Chrome and the ImageData constructor
* Fixed issue with the LocalPartRetriever in Cordova on iOS11 where if the document had many simultaneous requests for parts iOS would fail to return all of the part data
* Fixed issue where trying to click widgets on top of document text wouldn't work
* Fixed issue with selected sheared text
* Fixed issues with annotations from a previous document being loaded onto the new document if the new document was loaded before the previous annotations had finished loading
* Fixed several issues with handling text data that affected text selection and searching
* Fixed issue with drawing polygon paths in some situations
* Fixed issue with IE10 not working with xdomain
* Properly move to the beginning of the page when calling setCurrentPage and the page is rotated
* Fixed issue where calling loadDocument wouldn't load the annotations for the new document
* Fixed issue with the Subject property of FreeText annotations being overwritten when calling setIntent
* Fixed issue where the Content-Range header wouldn't be handled properly if it was lowercase
* Fixed issue with multiline form fields when the scroll long text flag is disabled
* The mouse cursor displayed when hovering over an annotation control point now properly takes page rotation into account
* Fixed issue with the handling of creation and modified date for annotations if they hadn't been specified in the XFDF that they were deserialized from

### WebViewer mobile updates

* Added viewing support for PDF documents using the new WebAssembly worker
* Added much better support for copying selected text
* Disabled pull to refresh that could happen when dragging downwards in Chrome
* Only display the creation date in the annotation list if it's defined on the annotation
* Fixed issue with loading a document while the user is swiping quickly through the pages
* Fixed a timing issue where a new annotation canvas could be requested before the previous one was discarded causing issues rendering annotations


---

# 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-1-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.
