Prioritizing the current needs of developers is something we pride ourselves on. We also pride ourselves on anticipating their future needs. This is why the latest version of our UWP SDK 9.1.0 includes two new additions that give users more control over their documents.

The first highly requested functionality comes in the form of PDF outline editing via bookmarks. A new Outline Editing Mode lets your UWP users rapidly assemble or modify bookmark outlines in PDFs, and design expandable tree-like structures of sections and subsections. They just add, remove, or reorganize their bookmarks visually within the new outline interface.

The second new feature anticipates future needs of electronic document signing with the addition of Digital Signature Verification.

You can check out the full list of improvements in the 9.0.1 changelog .

Now let’s explore the two big additions of 9.1.0.

Outline Redesign and Editing Mode Feature

Our latest release includes a new user interface for a PDF document’s outline. The new UI presents the outline as a tree structure with expandable BookmarkNodes. Nodes represent the embedded bookmarks within a PDF document and each node can have child nodes. This structure enhances the UX by improving the visual representation of the hierarchical structure of bookmarks. It also retains the bookmark’s hierarchical information when parent nodes are expanded to show their child nodes.

Along with a new outline UI, we introduce a new Outline Editing Mode. This lets your users add, remove, rename, and reorganize these BookmarkNodes within each outline.

For outline reorganization, each BookmarkNode can be moved anywhere within the outline (as long as no items are currently selected for deletion).

Outline Reorganization

For bookmark deletion, individual items can be removed using the quick edit button. Keep in mind that a bookmark’s children will also be deleted using this method.

The ability to selectively delete groups of items has also been added. If a parent node is selected for deletion, then all of its children are selected as well. Each parent node has an indeterminate check mark that is automatically applied if that parent has at least one child that is not selected. This allows the user to quickly delete all child nodes while keeping the parent node intact.

Outline Deletion

Enhancing Digital Signature with Verification and Long-Term Validation (LTV)

To ensure a more secure transaction on critical business and to add a layer of trust, PDFTron’s UWP SDK now supports Digital Signature Verification and Long-Term Validation.

Digital Signature Verification

The verification of digital signatures on a document can occur by either verifying specific digital signature fields or the entire document.

PDFDoc doc = new PDFDoc("myDoc.pdf");
VerificationOptions opts = new VerificationOptions(VerificationOptionsSecurityLevel.e_compatibility_and_archiving);

// Add trust root to the store of trusted certificates contained in VerificationOptions.

var trustedFlags = (ulong)VerificationOptionsCertificateTrustFlag.e_default_trust
                    | (ulong)VerificationOptionsCertificateTrustFlag.e_certification_trust;

opts.AddTrustedCertificate("pdftron.cer", trustedFlags);

SignaturesVerificationStatus verifResult = doc.VerifySignedDigitalSignatures(opts);

Verifying each digital signature field in a document:

for (DigitalSignatureFieldIterator digsig_fitr = doc.GetDigitalSignatureFieldIterator(); digsig_fitr.HasNext(); digsig_fitr.Next())
{
    DigitalSignatureField curr = digsig_fitr.Current();
    VerificationResult result = curr.Verify(opts);

    if (result.GetVerificationStatus() == true)
    {
        // Signature verified !
    }
}

Long-Term Validation

With LTV, it’s possible to enable signature validation on a document at the exact time it was signed or at any time in the future. This way, the trusted root certificate will be embedded in the PDF document which also enables validating the signatures offline.

PDFDoc doc = new PDFDoc("myDoc.pdf");
DigitalSignatureField doctimestamp_signature_field = doc.CreateDigitalSignatureField();

TimestampingConfiguration tst_config = new TimestampingConfiguration("http://timestamp.sectigo.com");
VerificationOptions opts = new VerificationOptions(VerificationOptionsSecurityLevel.e_compatibility_and_archiving);

opts.AddTrustedCertificate("SHA-2 Root USERTrust RSA CA Sectigo timestamping.crt");
opts.EnableOnlineCRLRevocationChecking(true);

doctimestamp_signature_field.TimestampOnNextSave(tst_config, opts);
await doc.SaveAsync("myDoc_timestamped.pdf", pdftron.SDF.SDFDocSaveOptions.e_incremental);

// Add LTV information for timestamp signature to document and enable it to be verified offline
VerificationResult timestamp_verification_result = doctimestamp_signature_field.Verify(opts);
doctimestamp_signature_field.EnableLTVOfflineVerification(timestamp_verification_result);

More additions:

  • Added cut annotation support
  • Ability to copy internal text from annotations directly without the need of opening it
  • Expanded support to keyboard shortcuts
  • General UX enhancements

Wrap Up

That’s it for 9.1.0! As always, we’re looking forward to making future improvements and additions to our UWP SDK, and we welcome any customer feedback. So, if you have a question or suggestion, don’t hesitate to contact us.