Below, please find the release notes for VirtualViewer v5.8.0 and associated minor releases. For questions, please contact us at questions@snowbound.com or by phone at (617) 607-2010.

v5.8.0 - October 29, 2021

General availability release.

Known Issues

  • Audio documents on small mobile devices may have playback issues due to hidden audio controls.

New features

License changes

VirtualViewer licensing has changed significantly in the 5.8.0 release, and action is required to remain up to date. The license file has been changed from SnowboundLicense.jar to slicense.json. The license JSON may be provided to VirtualViewer as a file or environment variable. See documentation for more information.

Additionally, the required iText licenses have been removed from the Snowbound license file and embedded into Snow.jar. DWG support libraries are now provided by the rastermaster-dwg package.

Many hyperlinks in PDF documents are now usable in VirtualViewer. Clicking the area of a valid hyperlink in a PDF document will display a popover containing a followable link.

Links leading to external URLs are supported, as are links that lead to specific pages within the same PDF document. Currently VirtualViewer does not interpret URL-like text as a clickable URL: while a URL included in the text of a PDF document may be rendered to look like a link, it will not be interactable unless there is a URL included in its metadata.

Full thumbnail panel

A completely new viewing mode allows users to open a document as a grid of thumbnails in the main document pane. A new button, at the far right of the top toolbar, toggles this mode on and off when a document is open.

The fullscreen thumbnail view lays out each page of the document as a thumbnail, in a grid. The thumbnail size may be toggled to show a set of small thumbnails–the size of the thumbnail images in the right-hand thumbnail panel–or a set of larger thumbnails. Two buttons on the top toolbar allow users to switch between the two sizes.

Double-clicking a thumbnail in this view, or pressing enter while the thumbnail is selected, will set the current page. The view will switch back to the normal document layout.

While many toolbar actions are disabled in fullscreen thumbnail view, most file options–such as saving, uploading, exporting, and emailing–are enabled. Zooming, rotating, cropping, and annotations are disabled in the fullscreen thumbnail view.

Page manipulations such as page selection, reordering via copy and paste, dragging and dropping, and new document creation are allowed in the fullscreen thumbnail view. Users may select multiple pages, open the context menu, and drag page selections. These functions are the same as in the normal thumbnail sidebar.

Configuration

Configuration items that apply to thumbnails, such as the config.js items doNotLoadPageThumbs and displayThumbFooters, will affect the fullscreen thumbnails as well.

In WEB-INF/web.xml,the init-param thumbnailDPI allows an administrator to adjust the resolution of the thumbnails. This will adjust the resolution of all thumbnails. Increasing the resolution will make thumbnail images sharper, but must be tuned carefully to remain performant. Since even the larger thumbnail images are small, the recommended DPI is low–the pages will generally not be readable in thumbnail form, so VirtualViewer prefers to prioritize performance over thumbnail detail. Users should use the fullscreen thumbnail view as a way to preview pages and perform page manipulation, and switch to the main document layout to read text or inspect details.

Annotation tracking with unique ID and timestamps

New callback

  • annotationSelection will fire when an annotation is selected by a user click. The following parameters will be provided to the callback in the argument object:
    • documentId {string} The ID of the current document, whose annotation has been selected.
    • annotationLayerId {string} The ID of the layer whose annotation has been selected.
    • annotationId {string} The ID of the selected annotation. Unless set in the content handler or by Javascript API, this value will be a default string.

New API

  • virtualViewer.setCurrentAnnotationId(annotationId) sets the ID of the currently selected annotation. If the annotationId parameter is null, a generated ID will be assigned to the currently selected annotation. If called within the annotationCreation, annotationChanged, or annotationSelection callbacks, the API will operate on the subject of the callback.
    • annotationId {string} The annotation ID to set. If this parameter is null, a generated ID will be used.

Modified callbacks

  • annotationCreation will fire when an annotation is created by a user. The following parameters will be provided to the callback in the argument object:
    • documentId {string} The ID of the current document, whose annotation has been created.
    • annotationLayerId {string} The ID of the layer that contains the created annotation.
    • annotationId {string} The ID of the created annotation. Unless set in the content handler or by Javascript API, this value will be a default string.
    • type {string} The type of the annotation that has been created.
    • createDate {string} A timestamp recording the annotation’s creation time.
  • annotationDeletion will fire when an annotation is deleted by a user. The following parameters will be provided to the callback in the argument object:
    • documentId {string} The ID of the current document, whose annotation has been deleted.
    • annotationLayerId {string} The ID of the layer whose annotation has been deleted.
    • type {string} The type of the annotation that has been deleted.
    • annotationId {string} The ID of the deleted annotation. Unless set in the content handler or by Javascript API, this value will be a default string.
  • annotationChanged will fire when an annotation is modified by a user. The following parameters will be provided to the callback in the argument object:
    • documentId {string} The ID of the current document, whose annotation has been changed.
    • annotationLayerId {string} The ID of the layer whose annotation has been changed.
    • type {string} The type of the annotation that has been changed.
    • annotationId {string} The ID of the changed annotation. Unless set in the content handler or by Javascript API, this value will be a default string.
    • modifyDate {string} A timestamp recording when the annotation was changed.

Note that the callbacks may overlap, with similar callbacks firing on the same event. For example, a user moving an annotation by a few pixels will fire the annotationSelection and annotationChanged callbacks in short succession.

Security improvements

Security flaws revealed by a Veracode static scan have been mitigated or addressed in new development. All vulnerabilities were categorized as medium severity or less by Veracode.

The appearance of some VirtualViewer log messages has changed. Potentially dangerous client data, such as the document ID, are sanitized in log messages. To improve machine-readability and usefulness of server logs, common data about the current will be logged in a key-value format in the log message.

The appearance of some error messages on the client will be changed as well, to prevent application structure information from displaying on the client.

Small features

  • When a page is rotated, its thumbnail will immediately appear rotated as well, instead of appearing rotated only on save.
  • A new configuration item, leftSideThumbPanel, has been added to config.js. When leftSideThumbPanel is set to true, the thumbnail sidebar will appear on the left side of the screen–directly to the right of the annotation toolbar. By default, the thumbnail sidebar will remain on the right side of the viewer.
  • A new configuration item, disableRecentlyViewedCookie, has been added to config.js file. When true, VirtualViewer will not load or save the newRecentlyViewedList cookie. This configuration item should not be used when config.js:multipleDocMode is set to vvDefines.multipleDocModes.viewedDocuments.

Bug Fixes

  • DWG now functions in license-less mode (Introduced in v5.7.0)
  • When you rotate a page by any means, it should appear rotated in its thumbnail as well. This used to only happen on save, but it will now occur dynamically and on the new Large Thumbnail Panel feature.
  • Users may scroll through a document using the arrow keys on the keyboard.