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

# Version 9.0.1.77825 Changelog (June 29, 2021)

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

Version: 9.0.1.77825

Release Date: June 29, 2021

## Breaking Changes

* \[tools] AnnotEdit class: method name change

|       | Declaration                      |
| ----- | -------------------------------- |
| From: | AnnotEdit.HandleCalibration      |
| To:   | AnnotEdit.HandleCalibrationAsync |

* \[tools] ViewerViewModel class : properties rename

|       | Declaration                                  |
| ----- | -------------------------------------------- |
| From: | ViewerViewModel.IsExtraUIVisible             |
| To:   | ViewerViewModel.IsPageNumberIndicatorVisible |

* \[tools] ViewerViewModel class : properties rename

|       | Declaration             |
| ----- | ----------------------- |
| From: | IsSaveCopyButtonVisible |
| To:   | IsActionsButtonVisible  |

* \[tools] ViewerControl class : properties rename

|       | Declaration                 |
| ----- | --------------------------- |
| From: | IsAnnotationToolsVisible    |
| To:   | ShowAnnotationToolbarButton |

* \[tools] SaveNeededStates enum : properties rename

|       | Declaration                   |
| ----- | ----------------------------- |
| From: | SaveNeededStates.saveApproved |
| To:   | SaveNeededStates.saveNeeded   |

## Change Behavior

* \[pdf] Calling PDFNet.Initialize() with an invalid license key will cause an exception

## New Features

### PDFCompare Control

The PDFCompare control allows to open 2 PDF side by side with sync scrolling, single toolbar to annotate on both PDF, and text difference tool to highlight the differences between 2 documents.

![](https://3246663708-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frgmys2szYV2Z567Zu3vi%2Fuploads%2Fgit-blob-33298557c20f8b24e422193339d52c116287de2c%2Fb991d87b41055a5ca7ba4004e7d53cda0bad0658-979x773.gif?alt=media)

### Copy, Paste and Duplicate Annotations

ViewerControl now support Copy, Paste and Duplicate single annotations

![](https://3246663708-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frgmys2szYV2Z567Zu3vi%2Fuploads%2Fgit-blob-652bff605619c60d75b97c1d0d82dca0a7327232%2Fb9da4c50e416b40df85a766b444f0ac33d8bd025-993x783.gif?alt=media)

### Right to Left Reading Support

Not it is possible to set the reading direction to Right-to-Left.

![](https://3246663708-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frgmys2szYV2Z567Zu3vi%2Fuploads%2Fgit-blob-22a302559647bf947d35d657a282a42c3b58c6e1%2F8e86a536265321ec579d5ce98581a2b537047323-993x783.gif?alt=media)

## Improvements

* \[pdf] Added PDF to SVG conversion support
* \[tools] \[control] ViewerControl: Add UI Customization so fetures can be enabled or disabled
* \[tools] \[control] ViewerControl: Added Rigtht to Left Language Support
* \[tools] \[control] ViewerControl: Added Viewer setting “Always Show Page Navigation Tools” to maintain page control overlay
* \[tools] \[control] ViewerControl: Added keyboard shortcuts for Copy (ctrl + C) and Paste (Ctrl + V)
* \[tools] \[control] ViewerControl: Reduced startup time by running in an async call temp files cleanup
* \[tools] \[control] ViewerControl: Updated tabs colors for better UX
* \[tools] \[control] AnnotationToolbarBase: Expanded UI customization to hide/show Close and Expand buttons
* \[tools] \[control] Added new langauge: Korean
* \[tools] Lasso Tool: Better line and arrow annotation selection
* \[tools] \[ux] ViewerControl: When ESC key is pressed current selected tool switches to pan (hand)
* \[tools] \[ux] PopupCommandMenu: Added tooltip to the annotation popup menu for better options feedback

## Bug Fixes

* \[tools] \[control] AnnotationToolbar: Fixed possible layout cycle exception when resizing the toolbar
* \[tools] \[control] ViewerControl: Fixed initialization which would cause improper rendering on Xamarin apps
* \[tools] Fixed ToolManager.SelectedAnnotation property not returning the selected annotation for line and advanced shape while editing
* \[tools] Fixed ToolManager.SelectAnnotationGroup(IAnnot, int) not properly selecting a group of annotations
* \[tools] Fixed color mode issue where adding an annotation while color mode is set to Night Mode would reset the current color mode to Normal Mode
* \[tools] Fixed Ink tool where hitting ESC key would cause newly created Ink annotations to be deleted
* \[tools] Fixed possible exception when selecting an annotation for editing and scrolling at the same time

## New APIs - PDF SDK

*New* Methods

* `static void PDF.Convert.ToSvg(PDFDoc, String)`
* `static void PDF.Convert.ToSvg(PDFDoc, String, SVGOutputOptions)`
* `static void PDF.Convert.ToSvg(Page, String)`
* `static void PDF.Convert.ToSvg(Page, String, SVGOutputOptions)`
* `static IAsyncAction PDF.Convert.ToSvgAsync(Page, String)`
* `static IAsyncAction PDF.Convert.ToSvgAsync(Page, String, SVGOutputOptions)`

*New* class: SVGOutputOptions

* *New* Constructor: `SVGOutputOptions()`
* *New* Method: `void SetEmbedImages(bool)`
* *New* Method: `void SetPreserveFontFamilyNames(bool)`
* *New* Method: `void SetNoFonts(bool)`
* *New* Method: `void SetSvgFonts(bool)`
* *New* Method: `void SetEmbedFonts(bool)`
* *New* Method: `void SetNoUnicode(bool)`
* *New* Method: `void SetIndividualCharPlacement(bool)`
* *New* Method: `void SetRemoveCharPlacement(bool)`
* *New* Method: `void SetFlattenContent(bool)`
* *New* Method: `void SetFlattenThreshold(bool)`
* *New* Method: `void SetFlattenDPI(bool)`
* *New* Method: `void SetFlattenMaximumImagePixels(bool)`
* *New* Method: `void SetCompress(bool)`
* *New* Method: `void SetOutputThumbnails(bool)`
* *New* Method: `void SetThumbnailSize(bool)`
* *New* Method: `void SetCreateXmlWrapper(bool)`
* *New* Method: `void SetDtd(bool)`
* *New* Method: `void SetAnnots(bool)`
* *New* Method: `void SetOverprint(bool)`

## New APIs - Tools Package SDK

*New* Properties

* `bool AnnotationCommandBar.IsCloseToolbarButtonVisible`
* `bool AnnotationCommandBar.IsExpandButtonVisible`
* `bool AnnotationToolbarViewModel.IsCloseToolbarButtonVisible`
* `bool AnnotationToolbarViewModel.IsExpandButtonVisible`
* `bool AnnotationToolbarViewModel.IsMeasureToolsButtonVisible`
* `bool AnnotationToolbarViewModel.IsRedactionTextToolButtonVisible`
* `bool AnnotationToolbarViewModel.IsRedactionAreaToolButtonVisible`
* `bool AnnotationToolbarBase.IsMeasureToolsButtonVisible`
* `bool AnnotationToolbarBase.IsRedactionTextToolButtonVisible`
* `bool AnnotationToolbarBase.IsRedactionAreaToolButtonVisible`
* `PdfCompareControl ViewerViewModel.PdfCompareViewer`
* `bool ViewerViewModel.IsPdfCompareViewOpen`
* `bool ViewerViewModel.IsRightToLeftVisibile`
* `bool ViewerViewModel.IsEditbuttonVisible`
* `bool ViewerViewModel.IsThumbnailViewVisible`
* `bool ViewerViewModel.IsCropViewVisible`
* `bool ViewerViewModel.IsPdfCompareVisible`
* `bool ViewerViewModel.IsPdfCompareEnabled`
* `bool ViewerViewModel.IsPdfCompareActive`
* `bool ViewerViewModel.CanSaveDocument`
* `bool ViewerViewModel.IsSaveAsButtonEnabled`
* `bool ViewerViewModel.IsActionsEnabled`
* `bool ViewerViewModel.IsShareVisible`
* `bool ViewerViewModel.IsPrintVisible`
* `bool ViewerViewModel.IsExportXFDFVisible`
* `bool ViewerViewModel.IsTextSearchVisible`
* `bool ViewerViewModel.IsAllowDropEnabled`
* `bool SettingsViewMode.AlwaysShowPageNavigationTools`
* `bool ViewerSettings.AlwaysShowPageNavigationTools`
* `bool ViewerSettings.IsRightToLeftVisible`
* `bool ViewerPageSettingsViewModel.IsRightToLeftVisible`
* `bool ViewerPageSettingsViewModel.IsRightToLeftEnabled`
* `bool ViewerPageSettingsViewModel.IsThumbnailViewVisible`
* `bool ViewerPageSettingsViewModel.IsCropViewVisible`
* `bool PdfViewCtrlTabInfo.IsRightToLeftEnabled`
* `bool PdfViewCtrlTabMetaData.IsRightToLeft`
* `bool ViewerControl.IsRightToLeftVisible`
* `bool ViewerControl.ShowAnnotationToolbarButton`
* `bool ViewerControl.ShowThumbnailView`
* `ThumbnailViewer ThumbnailViewer`
* `bool ViewerControl.ShowCropView`
* `bool ViewerControl.ShowActionsOption`
* `bool ViewerControl.ShowShareOption`
* `bool ViewerControl.ShowPrintOption`
* `bool ViewerControl.ShowExportXFDF`
* `bool ViewerControl.ShowTextSearchOption`
* `bool ViewerControl.ShowSaveOption`
* `bool ViewerControl.ShowSaveAsOption`
* `bool ViewerControl.ShowPDFCompare`

*New* Commands

* `ViewerViewModel.PdfCompareCommand`

*New* Methods

* `void AnnotEdit.HandleAnnotCopy()`
* `void AnnotEdit.HandleAnnotPasteAsync()`
* `void AnnotEdit.HandleDuplicateAnnotAsync()`
* `static bool UtilityFunctions.CopyToClipBoard(DataPackage)`
* `AnnotationToolbarViewMode.PerformEscapeFromTool()`

*New* Events

* `InternalControlStateDelegate ViewerViewModel.PDFCompareState`

*New* class: AnnotationClipboardHelper

* *New* Methods
  * `static bool IsAnnotToPaste()`
  * `static bool CopyAnnotToClipboard(PDFViewCtrl, IAnnot)`
  * `async Task<bool> PasteAnnotFromClipboardAsync(PDFViewCtrl, int, Point)`

*New* class: SaveOnExitHelper

* *New* Methods
  * `static SaveNeededStates CheckTabSavingRequirements(PdfViewCtrlTabInfo)`
  * `static async Task SaveTabHelperAsync(PdfViewCtrlTabInfo, ResourceLoader, bool, bool, bool)`
  * `static async Task<SaveResult> SaveTabToOriginalAsync(PdfViewCtrlTabInfo, bool, bool)`

*New* control: PdfCompareControl

* *New* constructors
  * `PdfCompareControl()`
  * `PdfCompareControl(PDFViewCtrl)`
  * `PdfCompareControl(IStorageFile)`
* *New* Property: `PdfCompareViewModel ViewModel`
* *New* Method: `void CloseControl()`
* *New* Event: `ControlClosed`

*New* class: PdfCompareViewModel

* *New* constructors
  * `PdfCompareViewModel()`
  * `PdfCompareViewModel(PDFViewCtrl, ICloseableControl)`
  * `PdfCompareViewModel(IStorageFile)`
* *New* Properties
  * `AnnotationCommandBar AnnotToolbar`
  * `PDFViewCtrl PdfViewCtrlA`
  * `PDFViewCtrl PdfViewCtrlB`
  * `PDFViewCtrl PdfViewCtrlTxtDiff`
  * `ClickablePageNumberIndicator PageNumbIndicatorPdfA`
  * `ClickablePageNumberIndicator PageNumbIndicatorPdfB`
  * `bool SyncScrolling`
  * `bool SyncZoom`
  * `string PdfAName`
  * `string PdfBName`
  * `string TxtDiffName`
  * `string TxtDiffCurrentPageText`
  * `bool IsPdfAVisible`
  * `bool IsPdfBVisible`
  * `bool IsPdfAOpenPageVisible`
  * `bool IsPdfBOpenPageVisible`
  * `bool IsTextDiffResultVisible`
  * `bool IsTextDiffEnabled`
  * `bool IsToolbarVisible`
  * `bool PersistAnnotTool`
  * `bool IsProgressRingVisible`
  * `bool IsAnyDocsModified`
* *New* Commands (ICommand)
  * `CMDOpenPdfA`
  * `CMDOpenPdfB`
  * `CMDSavePdfA`
  * `CMDSavePdfB`
  * `CMDClosePdfA`
  * `CMDClosePdfB`
  * `CMDGoBack`
  * `CMDPageTxtDiff`
  * `CMDAllPagesTxtDiff`
  * `CMDSaveTxtDiff`
  * `CMDCloseTxtDiff`
  * `CMDCancelTxtDiff`
  * `CMDZoomIn`
  * `CMDZoomOut`
* *New* Methods
  * `void CleanUp()`
  * `async Task OpenAndCompareFileAAsync(StorageFile)`
  * `async Task OpenAndCompareFileBAsync(StorageFile)`
* *New* image resources
  * `Resources/Images/local_device.svg`

*New* language resources

Korean

* `string\kr-KO\Printing.resw`
* `string\kr-KO\Resources.resw`


---

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