Some test text!

DRM support

DRM support for document viewing

WebViewer with Full API supports the viewing of password protected PDF files but this is different from XOD AES encryption. In the PDF case, a dialog box will appear, prompting the user for the password.

When deploying a custom server , WebViewer can convert a wide range of document formats to XOD (a web optimized XPS file format).

XOD documents can be encrypted at conversion time and WebViewer can view these documents when supplied with the password. These XOD documents are encrypted with 128 bit AES (Advanced Encryption Standard), a specification from the National Institute of Standards and Technology (NIST), and is used by governments and businesses worldwide.

This enables you to implement certain forms of DRM which can be useful if you want users to only be able to view documents inside the viewer and not simply download the files to view any time outside of it.

  • For example a web magazine viewer would likely not want users to simply download the magazines and send them to their friends. Note that the files may be able to be downloaded but they would be unviewable since they would be encrypted.

  • Another option would be that the server doesn't store the password, the user just has to enter it in the viewer before they can view the document, effectively password protecting the document.

Encrypt a document during XOD conversion

To encrypt a XOD document on conversion, you just need to pass in a password to encrypt the document with. You can call the ToXod method with XodOutputOptions. You can specify the password in the XodOutputOptions by calling SetEncryptPassword.

Decrypt a document on client-side

On the client-side, you will have to make some modifications to decrypt an encrypted XOD file. When using WebViewer you include an encryption property on the options object of WebViewer:

  initialDoc: 'test.xod',
  encryption: {
    p: 'pass',
    type: 'aes',
    error: msg => { alert(msg); }
}, viewerElement);

If you want to load a second password protected document you'll pass the encryption options to loadDocument: zzz

  .then(instance => {
    const { Encryption } = instance.Core;

    instance.UI.loadDocument('newdoc.xod', {
      decrypt: Encryption.decrypt,
      decryptOptions: {
        p: 'newpass',
        type: 'aes',
        error: msg => { alert(msg); }

Get the answers you need: Support

PDFTron live tech update & run-through: Jan 20th at 11 am PT