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

# Version 3.2.0 Changelog (2018-04-05)

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

### Breaking changes

* The setStyles function on annotations (that might be called inside custom annotation draw functions) now expects a page matrix as the second parameter. The draw function for all annotations now gets passed in a page matrix so you can just pass it in from there. See the custom annotations sample for an example of this.

{% tabs %}
{% tab title="JavaScript" %}
{% code lineNumbers="true" %}

```js
draw: function(ctx, pageMatrix) {
  this.setStyles(ctx, pageMatrix);
  // ...
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

### New strings

* tooltips.redact, print.includeComments

### PDFNetJS updates

* Added support for color separation rendering and calculation as well as a [sample to showcase the APIs](/web/get-started/guides/samples/pdf-manipulation.md#color-separation)
* Added support for WebAssembly instantiateStreaming
* Fixed rendering issue with transparent stamp annotations
* Fixed a number of rendering issues for Office viewing
* Fixed issue where if there was an error parsing internal annotations then annotations would not be fetched from the server URL

### WebViewer HTML5 updates

* Added changes necessary to support the [WebViewer Docker sample](/web/webviewer-server/wv-server-deployment.md)
* Added support for printing form fields
* Added an option for displaying annotation comments when printing
* Added readerControl.PRINT\_QUALITY to set the print quality programmatically without editing ReaderControl
* Made the API for setting stroke thickness and font size consistent between XOD and PDF documents. Scaling of the values now only happens on render instead of at import time. This won't have large noticeable effects but should make XFDF exported from one document type consistent with the same converted document.
* Preserve XFDF attributes when exporting annotations that were imported and not modified (previously some properties would be changed or removed)
* Added optimizations to better handle many annotations existing in the notes panel
* Added support for exporting and importing many XFDF attributes
* WebViewer is now able to be imported as a module using require.js or a CommonJS module bundler
* Stamp annotations can now have their opacity changed from the UI
* Added the [CoreControls.get/setResourcesPath](https://sdk.apryse.com/api/web/Core.html#.getResourcesPath__anchor) function to change the location of the Resources folder
* Added support for thickening thin lines in XOD rendering
* Added a "custom" option to the [DocumentViewer.setWatermark](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#setWatermark__anchor) function so that watermarks aren't just limited to text in particular locations
* Updated the [DocumentViewer.setWatermark](https://sdk.apryse.com/api/web/Core.DocumentViewer.html#setWatermark__anchor) function so that it is able to take a promise and won't render the first page until the promise has resolved
* Exposed the [Tool.getMouseLocation](https://sdk.apryse.com/api/web/Core.Tools.Tool.html#getMouseLocation__anchor) function
* Better handling of default (unspecified) values from XFDF
* Added [option to disable changing cursors](https://sdk.apryse.com/api/web/Core.Tools.Tool.html#Tool__anchor) when hovering over annotations
* Added support for importing redaction annotations from XFDF
* Exposed the [Actions.GoTo.Dest](https://sdk.apryse.com/api/web/Core.Actions.Dest.html) object
* Updated the default direction that the arrow tool adds the arrow head
* Improved the behavior for creating FreeText annotations from a single click so that they won't be created if another FreeText is currently being edited
* Fixed issue with viewport rendering where WebViewer was unnecessarily rerendering pages that are not the current page
* Fixed issue where semitransparent cloud polygons wouldn't render the fill all the way to the bottom and right sides
* Fixed issue with annotation thumbnail canvas not always being updated correctly
* Fixed issue with importing line annotations that didn't have start or end points defined
* Fixed issue with annotation tools not being hidden in readonly mode
* Fixed issue with FreeText annotations created from a single click having the wrong dimensions when the page is rotated
* Fixed issue with FreeText annotations with auto font size not having the size calculate correctly
* Fixed issue where hideAnnotations was not hiding HTML based annotations (widgets and links)
* Fixed issue editing styles of line annotations with a different arrow style than OpenArrow or None
* Fixed issue with switching to readonly mode when there are annotations that have replies
* Fixed issue where callout annotations with zero stroke thickness were not drawing the arrow line as other viewers do
* Fixed issue with widget date validation formats that started with days
* Fixed issue where extra incorrect text would show up when printing in some situations

### WebViewer mobile updates

* Shift the view upwards when focusing a field so that the virtual keyboard doesn't cover the field on Android
* Fixed issue with auto font size fields in iOS resetting the cursor position to the end when typing
* Capped the canvas multiplier at 2 to prevent iOS from erroring out due to internal canvas size limitations
* Fixed issue with widgets temporarily appearing out of position when zooming


---

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