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