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

# Version 9.1.0.78544 Changelog (September 14th, 2021)

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

Version: 9.1.0.78544

Release Date: September 14th, 2021

## Breaking Changes

* \[tools] PdfViewCtrlTabInfo class: property has been moved

|       | Declaration                             |
| ----- | --------------------------------------- |
| From: | PdfViewCtrlTabInfo.TabPreviewFolderName |
| To:   | DocumentManager.TabPreviewFolderName    |

* \[tools] ViewerControl class: cleanup method changed

|       | Declaration             |
| ----- | ----------------------- |
| From: | ViewerControl.CleanUp() |
| To:   | ViewerControl.Dispose() |

## New Features

### Outline redesign and editing capability

Outline has been redesigned to display items in a treeview style and it also has editing capabilities

| Re-organizing                                                                                                                                                                                                                                   | Deleting                                                                                                                                                                                                                                        |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![](https://3246663708-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frgmys2szYV2Z567Zu3vi%2Fuploads%2Fgit-blob-90be3296ebc90b47a1ef9a71141ca820af7279c3%2F17144c451f4980676e6afb3423f626b62f1a07fa-397x738.gif?alt=media) | ![](https://3246663708-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Frgmys2szYV2Z567Zu3vi%2Fuploads%2Fgit-blob-cb73d887f43702cfae6f9062b0cd073c8d3f82c3%2Fe5910438575f99114f6f47de4223826498a17220-397x738.gif?alt=media) |

## Improvements

* \[pdf] Added Digital Signature Verification/Validation and LTV (Long Term Validation with time stamping) support
* \[pdf] Expand Text Diffence tools to support exclusion zones (TextDiff.Options.AddIgnoreZonesForPage())
* \[pdf] Expanded Reflow API with more control over how images are included/excluded
* \[tools] Improved positining of TextBox annotation on insertion considering different font sizes
* \[tools] Added supported to copy the internal text of annotations like Sticky note and TextBox
* \[tools] Added better cleanup logic to remove unused preview images and documents from the Local and Temporary app's folder
* \[tools] Escape key will now save ongoing Free Text annotation creation - previous behavior would just delete it
* \[tools] \[control] Context Menu: Added ability to cut annotation so it can be paste in a different page or document
* \[tools] \[control] ViewerControl: Improved cleanup/dispose, removal of unused events, on deactivation
* \[tools] \[control] ViewerControl: Improved performance when opening Side Panel / Outline by only loading annotations when requested
* \[tools] \[control] ViewerControl: Added error message when trying to load a not supported format using ActivateWithFileAsync
* \[tools] \[control] ViewerControl: Improved icons size and look on command bar
* \[tools] \[control] ViewerControl: Page Up and Page Down can now control pages
* \[tools] \[control] FindText: added mechanism to the ViewModel to avoid events to be re-registered
* \[tools] \[control] Custom Color Dialog: improved UX by adding nice round corners to the dialog

## Bug Fixes

* \[tools] Added better internal exception handlers to ensure no unhandled exceptions happen
* \[tools] \[control] ViewerControl: fixed context menu getting stuck after a keyboard shortcut Shift + F10 is issued
* \[tools] \[control] ViewerControl: fixed missing notification (to Undo/Redo and Save doc) after a Link annotation is added to the document
* \[tools] \[control] ViewerControl: fixed issue where the Side Panel resize buttons (Narrow, Medium and Wide) would not trigger an event to resize the side panel when using the ViewerControl on different pages which need to support navigation. The solution is to call `ViewerControl.Dispose()` on `OnNavigatingFrom` to ensure all resources are cleared during page navigation
* \[tools] \[control] Side Panel/Outline: fixed background color when side panel is in narrow mode

## New APIs - PDF SDK

*New* Methods

* `static SDF.Obj OptionsHelpers.GetArray(SDF.Obj, string)`
* `static void InsertREctCollection(SDF.Obj, string, RectCollection, int)`
* `SignaturesVerificationStatus PDFDoc.VerifySignedDigitalSignatures(VerificationOptions)`
* `void PDFDoc.SaveCustomSignature(byte[], pdftron.PDF.DigitalSignatureField, String)`
* `void PDFDoc.SaveCustomSignature(byte[]], pdftron.PDF.DigitalSignatureField, Filters.IFilter)`
* `void PDFDoc.AppendTextDiff(PDFDoc, PDFDoc, TextDiffOptions)`
* `Windows.Foundation.IAsyncOperation<Windows.Storage.Streams.IBuffer> pdftron.FDF.FDFDoc.SaveAsXFDFToBufferAsync(XFDFExportOptions)`
* `Windows.Foundation.IAsyncAction pdftron.FDF.FDFDoc.SaveAsXFDFAsync(string, XFDFExportOptions)`
* `Windows.Foundation.IAsyncAction pdftron.FDF.FDFDoc.SaveAsXFDFAsync(Filters.IFilter, XFDFExportOptions)`
* `string pdftron.FDF.FDFDoc.SaveAsXFDFString(XFDFExportOptions)`
* `pdftron.PDF.VerificationResult DigitalSignatureField.Verify(pdftron.PDF.VerificationOptions)`
* `bool DigitalSignatureField.IsCertification()`
* `pdftron.Crypto.X509Certificate DigitalSignatureField.GetSignerCertFromCMS()`
* `bool DigitalSignatureField.EnableLTVOfflineVerification(pdftron.PDF.VerificationResult)`
* `void DigitalSignatureField.TimestampOnNextSave(pdftron.PDF.TimestampingConfiguration, pdftron.PDF.VerificationOptions)`
* `pdftron.PDF.TimestampingResult DigitalSignatureField.GenerateContentsWithEmbeddedTimestamp(pdftron.PDF.TimestampingConfiguration, pdftron.PDF.VerificationOptions)`
* `byte[] DigitalSignatureField.CalculateDigest(Crypto.DigestAlgorithm)`
* `byte[] DigitalSignatureField.CalculateDigest()`
* `void DigitalSignatureField.SetPreferredDigestAlgorithm(Crypto.DigestAlgorithm, bool)`
* `void DigitalSignatureField.SetPreferredDigestAlgorithm(Crypto.DigestAlgorithm)`
* `void DigitalSignatureField.CreateSigDictForCustomCertification(string , DigitalSignatureFieldSubFilterType, uint)`
* `void DigitalSignatureField.CreateSigDictForCustomSigning(string, DigitalSignatureFieldSubFilterType, uint)`
* `void DigitalSignatureField.SetSigDictTimeOfSigning(Date)`
* `static byte[] DigitalSignatureField.SignDigest(byte[], string, string, bool, Crypto.DigestAlgorithm)`
* `static byte[] DigitalSignatureField.SignDigest(byte[], byte[], string, bool, Crypto.DigestAlgorithm)`
* `void Reflow.SetHTMLOutputTextMarkup(bool)`
* `void Reflow.SetMessageWhenNoReflowContent(string)`
* `void Reflow.SetMessageWhenReflowFailed(string)`
* `void Reflow.SetHideBackgroundImages(bool)`
* `void Reflow.SetHideImagesUnderText(bool)`
* `void Reflow.SetDoNotReflowTextOverImages(bool)`

*New* Class - pdftron.PDF.RectCollection

* *New* Constructors
  * `RectCollection()`
* *New* Methods
  * `void AddRect(Rect)`
  * `void AddRect(double, double, double, double)`
  * `Rect GetRectAt(int)`
  * `int GetNumRects()`
  * `void Clear()`

*New* Class - pdftron.PDF.TextDiffOptions

* *New* Constructors
  * `TextDiffOptions()`
* *New* Methods
  * `TextDiffOptions AddIgnoreZonesForPage(RectCollection, int)`
  * `SDF.Obj GetInternalObj()`
  * `SDF.Obj GetDict()`

*New* Class - pdftron.PDF.VerificationOptions

* *New* Constructors
  * `VerificationOptions(VerificationOptionsSecurityLevel)`
* *New* Methods
  * `void Destroy()`
  * `void AddTrustedCertificate(uint8[], uint64[])`
  * `AddTrustedCertificate(uint8[])`
  * `AddTrustedCertificate(string, uint64)`
  * `void AddTrustedCertificate(string)`
  * `void addTrustedCertificates(uint8[])`
  * `void LoadTrustList(FDFDoc)`
  * `void EnableModificationVerification(bool)`
  * `void EnableDigestVerification(bool)`
  * `void EnableTrustVerification(bool)`
  * `void EnableOnlineCRLRevocationChecking(bool)`
  * `void EnableOnlineOCSPRevocationChecking(bool)`
  * `void EnableOnlineRevocationChecking(bool)`

*New* Class - pdftron.PDF.DisallowedChange

* *New* Methods
* `void Destroy()`
* `int GetObjNum()`
* `int GetType()`
* `string GetTypeAsString()`

*New* Class - pdftron.PDF.TrustVerificationResult

* *New* Methods
  * `void Destroy()`
  * `bool WasSuccessful()`
  * `string GetResultString()`
  * `uint64 GetTimeOfTrustVerification()`
  * `VerificationOptionsTimeMode GetTimeOfTrustVerificationEnum()`
  * `bool HasEmbeddedTimestampVerificationResult()`
  * `pdftron.PDF.EmbeddedTimestampVerificationResult GetEmbeddedTimestampVerificationResult()`
  * `pdftron.Crypto.X509Certificate[] GetCertPath()`

*New* Class - pdftron.PDF.EmbeddedTimestampVerificationResult

* *New* Methods
  * `void Destroy()`
  * `boolean GetVerificationStatus()`
  * `VerificationResultDigestStatus GetCMSDigestStatus()`
  * `VerificationResultDigestStatus GetMessageImprintDigestStatus()`
  * `VerificationResultDigestStatus GetTrustStatus()`
  * `string GetCMSDigestStatusAsString()`
  * `string GetMessageImprintDigestStatusAsString()`
  * `string GetTrustStatusAsString()`
  * `bool HasTrustVerificationResult()`
  * `TrustVerificationResult GetTrustVerificationResult()`
  * `Crypto.DigestAlgorithm GetCMSSignatureDigestAlgorithm()`
  * `Crypto.DigestAlgorithm GetMessageImprintDigestAlgorithm()`
  * `string[] GetUnsupportedFeatures()`

*New* Class - pdftron.PDF.VerificationResult

* *New* Methods
  * `void Destroy()`
  * `DigitalSignatureField GetDigitalSignatureField()`
  * `bool GetVerificationStatus()`
  * `VerificationResultDocumentStatus GetDocumentStatus()`
  * `VerificationResultDigestStatus GetDigestStatus()`
  * `VerificationResultTrustStatus GetTrustStatus()`
  * `ModificationPermissionsStatus GetPermissionsStatus()`
  * `bool HasTrustVerificationResult()`
  * `TrustVerificationResult GetTrustVerificationResult()`
  * `DisallowedChange[] GetDisallowedChanges()`
  * `pdftron.Crypto.DigestAlgorithm GetDigestAlgorithm()`
  * `string GetDocumentStatusAsString()`
  * `string GetDigestStatusAsString()`
  * `string GetTrustStatusAsString()`
  * `string GetPermissionsStatusAsString()`
  * `string[] GetUnsupportedFeatures()`

*New* Class - pdftron.PDF.TimestampingResult

* *New* Methods
  * `void Destroy()`
  * `bool GetStatus()`
  * `string GetString()`
  * `bool HasResponseVerificationResult()`
  * `PDF.EmbeddedTimestampVerificationResult GetResponseVerificationResult()`
  * `byte[] GetData()`

*New* Class - pdftron.PDF.TimestampingConfiguration

* *New* Constructors
  * `TimestampingConfiguration(string)`
* *New* Methods
  * `void Destroy()`
  * `void SetTimestampAuthorityServerURL(string)`
  * `void SetTimestampAuthorityServerUsername(string)`
  * `void SetTimestampAuthorityServerPassword(string)`
  * `void SetUseNonce(bool in_use_nonce)`
  * `PDF.TimestampingResult TestConfiguration(PDF.VerificationOptions)`

*New* Class - pdftron.FDF.XFDFExportOptions

* *New* Constructors
  * `XFDFExportOptions()`
* *New* Methods
  * `bool GetWriteAnnotationAppearance()`
  * `XFDFExportOptions SetWriteAnnotationAppearance(bool)`
  * `bool GetWriteImagedata()`
  * `XFDFExportOptions SetWriteImagedata(bool)`
  * `virtual SDF.ObjSet GetInternalObj()`
  * `virtual SDF.Obj GetDict()`

*New* enum - pdftron.PDF.SignaturesVerificationStatus

* `e_unsigned`
* `e_failure`
* `e_untrusted`
* `e_unsupported`
* `e_verified`

*New* enum - pdftron.PDF.VerificationOptionsSecurityLevel

* `e_compatibility_and_archiving`
* `e_maximum`

*New* enum - pdftron.PDF.VerificationOptionsTimeMode

* `e_signing`
* `e_timestamp`
* `e_current`

*New* enum - pdftron.PDF.VerificationOptionsCertificateTrustFlag

* `e_signing_trust`
* `e_certification_trust`
* `e_dynamic_content`
* `e_javascript`
* `e_identity`
* `e_trust_anchor`
* `e_default_trust`
* `e_complete_trust`

*New* enum - pdftron.PDF.VerificationResultDocumentStatus

* `e_no_error`
* `e_corrupt_file`
* `e_unsigned`
* `e_bad_byteranges`
* `e_corrupt_cryptographic_contents`

*New* enum - pdftron.PDF.VerificationResultDigestStatus

* `e_digest_invalid`
* `e_digest_verified`
* `e_digest_verification_disabled`
* `e_weak_digest_algorithm_but_digest_verifiable`
* `e_no_digest_status`
* `e_unsupported_encoding`
* `e_unsupported_digest_algorithm`

*New* enum - pdftron.PDF.VerificationResultTrustStatus

* `e_trust_verified`
* `e_untrusted`
* `e_trust_verification_disabled`
* `e_no_trust_status`
* `e_unsupported_trust_features`

*New* enum - pdftron.PDF.ModificationPermissionsStatus

* `e_invalidated_by_disallowed_changes`
* `e_has_allowed_changes`
* `e_unmodified`
* `e_permissions_verification_disabled`
* `e_no_permissions_status`
* `e_unsupported_permissions_features`

*New* Namespace - pdftron.Crypto

*New* enum - pdftron.Crypto.DigestAlgorithm

* `e_sha1`
* `e_sha256`
* `e_sha384`
* `e_sha512`
* `e_ripemd160`
* `e_unknown_digest_algorithm`

*New* enum - pdftron.Crypto.ObjectIdentifierPredefined

* `e_common_name`
* `e_surname`
* `e_country_name`
* `e_locality_name`
* `e_state_or_province_name`
* `e_organization_name`
* `e_organizational_unit_name`

*New* Class - pdftron.Crypto.ObjectIdentifier

* *New* Constructors
  * `ObjectIdentifier(pdftron.Crypto.ObjectIdentifierPredefined)`
  * `ObjectIdentifier(int[])`
* *New* Methods
  * `void Destroy()`
  * `Int[] GetRawValue()`

*New* Class - pdftron.Crypto.X501AttributeTypeAndValue

* *New* Methods
  * `void Destroy()`
  * `pdftron.Crypto.ObjectIdentifier GetAttributeTypeOID()`
  * `String GetStringValue()`
* *New* Class - pdftron.Crypto.X501DistinguishedName
* *New* Methods
  * `void Destroy()`
  * `bool HasAttribute(pdftron.Crypto.ObjectIdentifier)`
  * `String[] GetStringValuesForAttribute(pdftron.Crypto.ObjectIdentifier)`
  * `pdftron.Crypto.X501AttributeTypeAndValue[] GetAllAttributesAndValues()`

*New* Class - pdftron.Crypto.X509Extension

* *New* Methods
  * `void Destroy()`
  * `bool IsCritical()`
  * `pdftron.Crypto.ObjectIdentifier GetObjectIdentifier()`
  * `int[] GetData()`
  * `String ToString()`

*New* Class - pdftron.Crypto.X509Certificate

* *New* Methods
  * `void Destroy()`
  * `X501DistinguishedName GetIssuerField()`
  * `pdftron.Crypto.X501DistinguishedName GetSubjectField()`
  * `uint64 GetNotBeforeEpochTime()`
  * `uint64 GetNotAfterEpochTime()`
  * `int GetRawX509VersionNumber()`
  * `string ToString()`
  * `string GetFingerprint(pdftron.Crypto.DigestAlgorithm in_digest_algorithm)`
  * `string GetFingerprint()`
  * `int[] GetSerialNumber()`
  * `pdftron.Crypto.X509Extension[] GetExtensions()`
  * `int[] GetData()`

## New APIs - Tools Package SDK

*New* Methods

* `async Task DocumentManager.PerformFullCleanupAsync()`
* `async Task DocumentManager.StartAutoCleanAsync()`
* `async Task DocumentManager.StopAutoCleanAsync()`
* `void ViewerViewModel.Dispose()`
* `void ViewerControl.Dispose()`
* `void AnnotationListViewModel.LoadAnnotationList()`

*New* Properties

* `bool Outline.IsEditEnabled`
* `bool OutlineDialogViewModel.IsOutlineEditingEnabled`
* `bool ViewerViewModel.IsOutlineEditingEnabled`
* `bool ViewerControl.IsOutlineEditingEnabled`
* *New* Delegates
* `delegate void OutlinePartial.DocumentModifiedEventHandler(PDFDoc)`
* *New* Events
* `DocumentModifiedEventHandler OutlinePartial.DocumentModified`
* `static bool UtilityFunction.MoreThanOneFlag<TValue>(TValue)`

*New* Class - pdftron.Tools.Controls.ViewModels.BookmarkNode

* *New* Constructors
  * `BookmarkNode(Bookmark)`
* *New* Properties
  * `bool BookmarkNode.IsExpanded`
  * `bool BookmarkNode.IsInvoked`
  * `bool BookmarkNode.IsEditing`
  * `bool BookmarkNode.IsIndeterminate`
  * `bool BookmarkNode.CollapsedGlyphVisibility`
  * `bool BookmarkNode.ExpandedGlyphVisibility`
  * `bool BookmarkNode.IsViewModelEditing`
  * `bool BookmarkNode.IsNew`
  * `bool BookmarkNode.HasChildren`
  * `bool BookmarkNode.HasCheckedChildren`
  * `bool BookmarkNode.HasUnrealizedChildren`
  * `Nullable<bool> BookmarkNode.ChildrenLoadedFromDoc`
  * `Nullable<bool> BookmarkNode.IsChecked`
  * `Bookmark BookmarkNode.SourceBookmark`
  * `string BookmarkNode.Title`
  * `ObservableCollection<BookmarkNode> Children`
  * `BookmarkNode BookmarkNode.Parent`
* *New* Enums
  * `enum BookmarkNode.ItemRequestUpdates`
* *New* Methods
  * `RelayCommand BookmarkNode.BookmarkNodeButtonClickedCommand`
* *New* Delegates
  * `delegate void BookmarkNode.ItemRequestDelegate(BookmarkNode, ItemRequestUpdates)`
* *New* Events
  * `event BookmarkNode.ItemRequestDelegate BookmarkNode.ItemRequest()`

*New* Class - pdftron.Tools.Controls.ViewModels.OutlineViewModel

* *New* Constructor
  * `OutlineViewModel(PDFViewCtrl)`
* *New* Properties
  * `bool OutlineViewModel.IsEditing`
  * `bool OutlineViewModel.IsEditEnabled`
  * `bool OutlineViewModel.CanReorder`
  * `bool OutlineViewModel.HasBookmarkNodes`
  * `int OutlineViewModel.CheckedAmount`
  * `ObservableCollection<BookmarkNode> DataSource`
  * `BookmarkNode OutlineViewModel.LastInvokedNode`
* *New* Methods
  * `async Task OutlineViewModel.WaitForOutlineToLoadAsync()`
  * `async IAsyncOperation<IList<Bookmark>> OutlineViewModel.GetBookmarkListAsync(Bookmark, PDFDoc)`
  * `async IAsyncOperation<bool> OutlineViewModel.AdjustIsOpen(BookmarkNode)`
  * `async Task OutlineViewModel.CreateTreeAsync()`
  * `async Task OutlineViewModel.ExpandTreeViewNodeAsync(BookmarkNode)`
  * `async void OutlineViewModel.AddOutlineCommandImpl(object)`
  * `void OutlineViewModel.RemoveBookmarkNodes()`
  * `void OutlineViewModel.FinishEditingText()`
  * `void OutlineViewModel.CancelEditingText()`
  * `RelayCommand OutlineViewModel.AddOutlineCommand`
  * `RelayCommand OutlineViewModel.EnterEditingCommand`
  * `RelayCommand OutlineViewModel.ExitEditingCommand`
* *New* Delegates
  * `delegate void OutlineViewModel.DocumentModifiedEventHandler(PDFDoc)`
  * `delegate void FocusOnSelectedItemEventHandler(BookmarkNode);`
* *New* Events
  * `DocumentModifiedEventHandler OutlineViewModel.DocumentModified`
  * `FocusOnSelectedItemEventHandler OutlineViewModel.FocusOnSelectedItemRequested`


---

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