PrizmDoc Viewer v13.8 - Updated
Viewer API
API Reference > Viewer API

The Viewer API permits programmatic control over the Viewer.

Most API functionality is exposed by the ViewerControl - the core component of the Viewer. The Viewer UI/chrome builds off of the API members of the ViewerControl.

The Viewer API is required to:

The Viewer API is not required to:

You may want to review Configuring the Viewer for additional information. In addition, see the API Examples, which demonstrate using the API to implement common scenarios.

This topic provides informtion about the following:

API Functionality

The Viewer API exposes the following functionality:

Getting Started

This section provides basic information for getting started using the API.

Access to the API

The API classes are exposed through the global PCCViewer object.

Example

window.PCCViewer;

A ViewerControl is created when instantiating the Viewer with the jQuery plugin, and it is accessible through the viewerControl property of the returned object.

Example

var viewer = $("#mydiv").pccViewer(options);
var viewerControl = viewer.viewerControl;

Viewer Ready

While initialization of the Viewer is being performed, it is unsafe to call some of the ViewerControl methods (these methods will throw an error during initialization). The ViewerReady event signals that initialization has completed, and it is safe to call all ViewerControl methods with valid data.

Example

var viewerControl = $("#mydiv").pccViewer(options).viewerControl;

// Subscribe to the "ViewerReady" event viewerControl.on(PCCViewer.EventType.ViewerReady, function(ev) {
    // It is now safe to call all ViewerControl methods
    viewerControl.setCurrentMouseTool("AccusoftLineAnnotation");

    // It’s also safe to use ECMA5 properties
    // (in supporting browsers).
    var currentPageNumber = viewerControl.pageNumber;

    // This is also a good time to subscribe to other events,
    // if you want to keep all API code in one place.
    viewerControl.on(PCCViewer.EventType.PageDisplayed, ...);
});

Page Count Ready

The ViewerControl will not get the page count of a document from PrizmDoc Server until after the ViewerReady event. Before the page count is returned, the ViewerControl assumes every document has one page.

The PageCountReady event signals when the ViewerControl has the actual page count from the server. Subscribe to this event to know when you can navigate to and interact with other pages in the document.

Example

var viewerControl = $("#mydiv").pccViewer(options).viewerControl;

// Subscribe to the "PageCountReady" event viewerControl.on(PCCViewer.EventType.PageCountReady, function(ev) {
    var pageCount = ev.pageCount;

    // We can now navigate to other pages in the document.
    if (pageCount > 1) {
        // Go to the second page of the document.
        viewerControl.setPageNumber(2);
    }
});

It is safe to call Viewer navigation API members before the page count is available to the ViewerControl, but navigation outside of the known page count (of one) is not possible.

EstimatedPageCountReady Event

Calculating the actual page count of some document formats can take a significant amount of time, and therefore waiting on an actual page count could make the Viewer appear unresponsive to the end user. To address this problem, the PrizmDoc Server may quickly generate an estimated page count.

The EstimatedPageCountEvent signals that the Viewer has an estimated page count and that navigation to other pages is possible.

Example

var viewerControl = $("#mydiv").pccViewer(options).viewerControl;

// Subscribe to the "PageCountReady" event viewerControl.on(PCCViewer.EventType.EstimatedPageCountReady, ...);

Page Numbering

Page numbering in the API starts with 1. This is true for events and methods. The API does not support 0-based page indexes, so be careful when iterating over pages.

Example

// Navigate to the first page of the document. viewerControl.changeToFirstPage();

// An equivalent call would be viewerControl.setPageNumber(1);

Pixels

In the API, the unit of measure for height, width, location, and other sizes is a pixel. To determine the height and width of a page in pixels, use the ViewerControl’s requestPageAttributes method.

Example

// Get attributes of page 1. viewerControl.requestPageAttributes(1).then(function(attributes) {
    var pageWidth = attributes.width;
    var pageHeight = attributes.height;

    // Add a rectangle that is the full width and height of page 1
    viewerControl.addMark(1, "RectangleAnnotation")
        .setRectangle({x:0,
                       y:0,
                       height: pageHeight,
                       width: pageWidth});
});

It is advised to check page attributes before getting or setting the location of a Mark object.

Getters, Setters, and ECMA5 Properties

The API commonly uses getter and setter methods for accessing and modifying data associated with objects. Typically these methods are in pairs, unless the data is read-only.

Example

// read-write viewerControl.getPageNumber();    // get the current page number viewerControl.setPageNumber(1);   // set the current page to 1 
// read-only viewerControl.getPageCount();     // get the page count

The API also offers ECMA5 Accessor properties that correspond to the getter and setters. These accessor properties offer a different style of coding, and they are only available in modern browsers that implement Object.defineProperties.

Example

if (Object.defineProperties) {
    viewerControl.pageNumber;      // get the current page number
    viewerControl.pageNumber = 1;  // set the current page to 1
    viewerControl.pageCount;       // get the page count }

Fluent Style: Method Chaining

The API is designed to support method chaining. Most methods will return the current context (object on which the method was called) in order to promote method chaining. Exceptions to this rule are getter methods and methods that complete asynchronously.

Example

// Method chaining when creating a rectangle annotation viewerControl.addMark(1, "RectangleAnnotation")
    .setRectangle({x: 0, y:0, width: 100, height: 100})
    .setFillColor("#FFFFFF")
    .setOpacity(127)
    .setBorderThickness(6);

// Method chaining when manipulating the page viewerControl
    .rotatePage(90)
    .zoomIn(1.2);

Note that using the ECMA5 accessor properties often discourages method chaining.

Promises

The API implements the Promises/A+ spec in the class PCCViewer.Promise.

Many methods that complete asynchronously return a PCCViewer.Promise object. Use the returned promise object to subscribe callbacks for the completion of the asynchronous event.

Example

// Use the promise to subscribe a callback to requestPageText viewerControl.requestPageText(1).then(function(pageText) {
    alert("Text of page 1 is: " \+ pageText);
});

Two exceptions are ViewerControl#print and ViewerControl#search, which complete asynchronously but do not return a PCCViewer.Promise object. These methods both return objects that represent the requested print and search. Searching and printing have status events and are cancellable, for which they cannot be suitably represented with a promise object.