> 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/uwp/changelogs/version-9/v9-3-0-2.md).

# Version 9.3.0.2 Changelog (September 6th, 2022)

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

Version: 9.3.0.2

Release Date: September 6th, 2022

## New features

* \[tools] Added Snapping Option for Measurement Tools (Ruler/Perimeter/Area)

![](https://3246663708-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frgmys2szYV2Z567Zu3vi%2Fuploads%2Fgit-blob-2b33e14c9fa242d1c70144296e6dd1b8b57c5069%2F003bdeb0fcedabc6dc2b0ff7273219e25bed815b-1909x980.gif?alt=media)

* \[tools] Added Count Tool for Measurement Tools

![](https://3246663708-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frgmys2szYV2Z567Zu3vi%2Fuploads%2Fgit-blob-645e88c194c6f5a31699b01e1dda93eb606e5969%2F4531c61dece632516ffb91318c1bfc6057bbad55-1909x996.gif?alt=media)

## Improvements

* \[tools] Reworked Signature Feature
  * New UI
  * Upload Signature file (png/jpeg)
  * Support for multiple signatures (saved locally)

## Bug Fixes

* \[Tools] Fix bug where converted images were no longer generating temp. pdfs after being loaded

## New APIs - Tools Package SDK

*Updated* Class AnnotationCommandBar

* *New* Properties
* `bool IsSignatureToolbarOpen`

*New* Enum SignatureType

* `Draw`
* `Type`
* `Upload`

*New* Class pdftron.PDF.Tools.Controls.Signature.SignatureContentDialog

* *New* Constructor
* `SignatureContentDialog(bool isFullScreenEnabled = false)`
* *New* Method
* `async Task OpenContentDialogAsync()`
* `void CloseContentDialog()`
* *New* Properties
* `SignatureItem CurrentSignatureItem`
* `bool IsDrawSignatureContentEnabled`
* `bool IsUploadSignatureContentEnabled`

*New* Class pdftron.PDF.Tools.Controls.Signature.SignatureDropdownControl

* *New* Constructor
* `SignatureDropdownControl()`
* *New* Method
* `void Dispose()`

*New* Class pdftron.PDF.Tools.Controls.Signature.SignatureUploadControl

* *New* Constructor
* `SignatureUploadControl()`
* *New* Events
* `event SignatureUploadViewModel.SignatureContentChangedHandler SignatureContentChangedRequested`
* *New* Method
* `void Dispose()`
* *New* Properties
* `SignatureItem SignatureStampItem`
* `bool HasSignatureContent`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.Signature.SignSignatureViewModel

* *New* Constructor
* `SignSignatureViewModel()`
* *New* delegate
* `delegate void SignatureContentChangedHandler(object val);`
* *New* Events
* `event SignatureContentChangedHandler SignatureContentChangedeRequested`
* *New* Properties
* `bool IsClearButtonEnabled`
* `bool HasSignatureContent`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.Signature.SignatureNavItemCategory

* *New* Properties
* `string Name`
* `bool IsSelected`
* `SignatureType ViewType`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.Signature.SignatureStamps

* *New* Properties
* `List<SignatureItem> SignatureItemCollection`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.Signature.SignatureItem

* *New* Properties
* `Guid ID`
* `SignatureType SignatureType`
* `List<List<UIPoint>> Strokes`
* `Color StrokeColor`
* `double LeftMost`
* `double RightMost`
* `double TopMost`
* `double BottomMost`
* `double StrokeThickness`
* `bool UseStylus`
* `string FileName`
* `string StringID`
* `ImageSource PreviewImage`
* `PDFDoc Doc`
* `Page Signature`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.Signature.SignatureUploadViewModel

* *New* Constructor
* `SignatureUploadViewModel()`
* *New* delegate
* `delegate void SignatureContentChangedHandler(object val);`
* *New* Events
* `event SignatureContentChangedHandler SignatureContentChangedeRequested`
* *New* Method
* `async Task InitSignatureUploadViewModelAsync()`
* *New* Properties
* `bool ShowUploadFileContent`
* `bool HasImage`
* `bool IsClearButtonEnabled`
* `bool HasSignatureContent`
* `BitmapImage SignatureImage`
* `StorageFile SignatureFile`
* `SignatureItem CurrentSignatureItem`
* `ICommand CMDOpenFilePicker`
* `ICommand CMDClearFile`

*Update* Class pdftron.PDF.Tools.SignatureDialog

* *New* Events
* `public event SignSignatureViewModel.SignatureContentChangedHandler SignatureContentChangedRequested`
* *New* Method
* `void Dispose()`
* *New* Properties
* `SignatureItem SignatureStampItem`

*Update* Class pdftron.PDF.Tools.UtilityFunctions

* *New* Method
* `static async Task<StorageFile> CreateStorageFileAsync(string filePath)`
* `static async Task<StorageFile> GetSignatureFileFromStorageAsync(string signatureID, string fileName)`

*Update* Class pdftron.PDF.Tools.Controls.ViewModels.AnnotationPropertiesViewModel

* *New* Delegate
* `delegate void ToggleSnapSelectedDelegate(bool snapSetting);`
* *New* Events
* `event ToggleSnapSelectedDelegate ToggleSnapSelected = delegate`
* *New* Properties
* `IsSnappingEnabled`

*New* Class pdftron.PDF.Tools.Controls.MeasureCountTool.CustomColorPicker

* *New* Constructor
* `CustomColorPicker()`
* *New* Events
* `event CustomColorPickerViewModel.ContentChangedHandler ContentChangedRequested`
* *New* Method
* `void Dispose()`
* *New* Properties
* `SolidColorBrush SelectedColor`

*New* Class pdftron.PDF.Tools.Controls.MeasureCountTool.MeasureCountContentDialog

* *New* Constructor
* `MeasureCountContentDialog()`
* *New* Properties
* `MeasureCountItem CurrentMeasureCountItem`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.MeasureCountTool.MeasureCountCreateControl

* *New* Constructor
* `MeasureCountCreateControl()`
* *New* Events
* `event MeasureCountCreateViewModel.ContentChangedHandler ContentChangedRequested`
* *New* Method
* `void Dispose()`
* *New* Properties
* `MeasureCountItem CurrentItem`
* `bool HasContent`

*New* Class pdftron.PDF.Tools.Controls.MeasureCountTool.MeasureCountDropdownControl

* *New* Constructor
* `MeasureCountDropdownControl()`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.MeasureCountTool.ColorOptionDataModel

* *New* Properties
* `string Label`
* `SolidColorBrush ColorBrush`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.MeasureCountTool.CustomColorPickerViewModel

* *New* Constructor
* `CustomColorPickerViewModel()`
* *New* Delegate
* `delegate void ContentChangedHandler(string key, object val)`
* *New* Events
* `event ContentChangedHandler ContentChangedeRequested`
* *New* Properties
* `ObservableCollection<ColorOptionDataModel> ColorOptionCollection`
* `ColorOptionDataModel SelectedItem`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.MeasureCountTool.MeasureCountCreateViewModel

* *New* Constructor
* `MeasureCountCreateViewModel()`
* *New* Delegate
* `delegate void ContentChangedHandler(string key, object val)`
* *New* Events
* `event ContentChangedHandler ContentChangedeRequested`
* *New* Method
* `void Dispose()`
* *New* Properties
* `string GroupLabel`
* `CustomColorPicker CustomColorPickerControl`
* `MeasureCountItem CurrentItem`
* `bool HasContent`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.MeasureCountTool.MeasureCountCollection

* *New* Properties
* `List<MeasureCountItem> MeasureCountList`

*New* Class pdftron.PDF.Tools.Controls.ViewModels.MeasureCountTool.MeasureCountItem

* *New* Properties
* `Guid ID`
* `string Label`
* `Color ColorBrush`
* `string StringID`
* `SolidColorBrush ConvertedSolidColorBrush`

*Update* pdftron.PDF.Tools.Controls.Viewer.ViewerSettings

* *New* Properties
* `Guid CurrentMeasureCountItem`

*Update* Enum pdftron.PDF.Tools.ToolType

* `e_measure_count`

*New* Class pdftron.PDF.Tools.MeasureCountAnnotations

* *New* Constructor
* `MeasureCountAnnotations`
* *New* Method
* `void CountAnnotations(PDFDoc doc)`
* `Flyout ShowCountInfoFlyout(FrameworkElement target, string label)`
* *New* Properties
* `Dictionary<string, int> DictCountAnnots`
* `int TotalCount`


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.apryse.com/uwp/changelogs/version-9/v9-3-0-2.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
