--- Added: v2.0.0 Status: Active Last reviewed: 2018-03-07 --- # Viewer component Displays content from an ACS repository. See it live: [Viewer Quickstart](https://embed.plnkr.co/iTuG1lFIXfsP95l6bDW6/) ## Contents - [Basic usage](#basic-usage) - [Properties](#properties) - [Events](#events) - [Keyboard shortcuts](#keyboard-shortcuts) - [Details](#details) - [Integrating with the Document List component](#integrating-with-the-document-list-component) - [Custom file parameters](#custom-file-parameters) - [Supported file formats](#supported-file-formats) - [Content Renditions](#content-renditions) - [Configuring PDF.js library](#configuring-pdfjs-library) - [Custom toolbar](#custom-toolbar) - [Custom toolbar buttons](#custom-toolbar-buttons) - [Custom sidebar](#custom-sidebar) - [Custom thumbnails](#custom-thumbnails) - [Custom "Open With" menu](#custom-open-with-menu) - [Custom "More actions" menu](#custom-more-actions-menu) - [Extending the Viewer](#extending-the-viewer) - [See also](#see-also) ## Basic usage Using with node id: ```html ``` Using with file url: ```html ``` ### Properties | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | urlFile | `string` | `''` | If you want to load an external file that does not come from ACS you can use this URL to specify where to load the file from. | | urlFileViewer | `string` | `null` | Viewer to use with the `urlFile` address (`pdf`, `image`, `media`, `text`). Used when `urlFile` has no filename and extension. | | blobFile | `Blob` | | Loads a Blob File | | fileNodeId | `string` | `null` | Node Id of the file to load. | | sharedLinkId | `string` | `null` | Shared link id (to display shared file). | | overlayMode | `boolean` | `false` | If `true` then show the Viewer as a full page over the current content. Otherwise fit inside the parent div. | | showViewer | `boolean` | `true` | Hide or show the viewer | | showToolbar | `boolean` | `true` | Hide or show the toolbar | | displayName | `string` | | Specifies the name of the file when it is not available from the URL. | | allowGoBack | `boolean` | `true` | Allows `back` navigation | | allowDownload | `boolean` | `true` | Toggles downloading. | | allowPrint | `boolean` | `false` | Toggles printing. | | allowShare | `boolean` | `false` | Toggles sharing. | | allowFullScreen | `boolean` | `true` | Toggles the 'Full Screen' feature. | | allowNavigate | `boolean` | `false` | Toggles before/next navigation. You can use the arrow buttons to navigate between documents in the collection. | | canNavigateBefore | `boolean` | `true` | Toggles the "before" ("<") button. Requires `allowNavigate` to be enabled. | | canNavigateNext | `boolean` | `true` | Toggles the next (">") button. Requires `allowNavigate` to be enabled. | | allowSidebar | `boolean` | `false` | Toggles the sidebar. | | allowThumbnails | `boolean` | `true` | Toggles PDF thumbnails. | | showSidebar | `boolean` | `false` | Toggles sidebar visibility. Requires `allowSidebar` to be set to `true`. | | sidebarPosition | `string` | `'right'` | The position of the sidebar. Can be `left` or `right`. | | sidebarTemplate | `TemplateRef` | `null` | The template for the sidebar. The template context contains the loaded node data. | | thumbnailsTemplate | `TemplateRef` | `null` | The template for the pdf thumbnails. | | mimeType | `string` | | MIME type of the file content (when not determined by the filename extension). | | fileName | `string` | | Content filename. | | downloadUrl | `string` | `null` | URL to download. | | maxRetries | `number` | `5` | Number of times the Viewer will retry fetching content Rendition. There is a delay of at least one second between attempts. | ### Events | Name | Type | Description | | ---- | ---- | ----------- | | goBack | `EventEmitter>` | Emitted when user clicks the 'Back' button. | | download | `EventEmitter>` | Emitted when user clicks the 'Download' button. | | print | `EventEmitter>` | Emitted when user clicks the 'Print' button. | | share | `EventEmitter>` | Emitted when user clicks the 'Share' button. | | showViewerChange | `EventEmitter` | Emitted when the viewer is shown or hidden. | | extensionChange | `EventEmitter` | Emitted when the filename extension changes. | | navigateBefore | `EventEmitter<{}>` | Emitted when user clicks 'Navigate Before' ("<") button. | | navigateNext | `EventEmitter<{}>` | Emitted when user clicks 'Navigate Next' (">") button. | ### Keyboard shortcuts | Name | Description | | ---- | ----------- | | Esc | Close the viewer (overlay mode only). | | Left | Invoke 'Navigate before' action. | | Right | Invoke 'Navigate next' action. | | Ctrl+F | Activate full-screen mode. | ## Details ### Integrating with the Document List component Below is the most simple integration of the Viewer and [Document List](../content-services/document-list.component.md) components within your custom component: ```html ``` The component controller class implementation might look like the following: ```ts export class OverlayViewerComponent { @Input() showViewer: boolean = false; nodeId: string; showPreview(event) { if (event.value.entry.isFile) { this.nodeId = event.value.entry.id; this.showViewer = true; } } } ``` ### Custom file parameters You can provide custom file parameters, for example a value for the `mimeType` or `displayName` when using URL values that have no file names or extensions: ```html ``` ### Supported file formats The Viewer component consists of separate Views that handle particular types of type families based on either a file extension or a mime type: - PDF View - application/pdf - \*.pdf - Image View - image/png - image/jpeg - image/gif - image/bmp - image/svg+xml - \*.png - \*.jpg - \*.jpeg - \*.gif - \*.bpm - \*.svg - Text View - text/plain - text/csv - text/xml - text/html - application/x-javascript - \*.txt - \*.xml - \*.js - \*.html - \*.json - \*.ts - Media View - video/mp4 - video/webm - video/ogg - audio/mpeg - audio/ogg - audio/wav - \*.wav - \*.mp4 - \*.mp3 - \*.webm - \*.ogg ### Content Renditions For those extensions and mime types that cannot be natively displayed in the browser, the Viewer will try to fetch the corresponding rendition using the [renditions service api](https://community.alfresco.com/docs/DOC-5879-rendition-service). For the full list of supported types please refer to: [File types that support preview and thumbnail generation](http://docs.alfresco.com/5.2/references/valid-transformations-preview.html). ### Configuring PDF.js library Configure your webpack-enabled application with the PDF.js library as follows. 1. Install pdfjs-dist ```sh npm install pdfjs-dist ``` 2. Update `vendors.ts` by appending the following code. This will enable the viewer component and compatibility mode for all browsers. It will also configure the web worker for the PDF.js library to render PDF files in the background: ```ts // PDF.js require('pdfjs-dist/web/compatibility.js'); const pdfjsLib = require('pdfjs-dist'); pdfjsLib.PDFJS.workerSrc = './pdf.worker.js'; require('pdfjs-dist/web/pdf_viewer.js'); ``` 3. Update the `plugins` section of the `webpack.common.js` file with the following lines: ```js new CopyWebpackPlugin([ ... { from: 'node_modules/pdfjs-dist/build/pdf.worker.js', to: 'pdf.worker.js' } ]) ``` The Viewer component now should be able to display PDF files. ### Custom toolbar You can replace the standard viewer toolbar with your own custom implementation: ```html

toolbar

``` Everything you put inside the "adf-viewer-toolbar" tags will be rendered instead of the standard toolbar. ### Custom toolbar buttons If you are happy with the custom toolbar's behaviour but want to add some extra buttons then you can do so as shown in the following example: ```html ``` The result should look like this: ![Custom Toolbar Actions](../docassets/images/viewer-toolbar-actions.png) ### Custom sidebar The Viewer component also supports custom sidebar components and layouts. Set the `allowSidebar` property to `true` to enable this feature. The custom sidebar can be injected in two different ways: - using transclusion - using a template **(only works when using the viewer with fileNodeId)** #### Using transclusion ```html

My info

``` Everything you put inside the "adf-viewer-sidebar" tags will be rendered. #### Using template injection (only works when using the viewer with fileNodeId) ```html ``` ### Custom thumbnails The PDF viewer comes with its own default list of thumbnails but you can replace this by providing a custom template and binding to the context property `viewer` to access the PDFJS.PDFViewer instance. ![PDF thumbnails](../docassets/images/pdf-thumbnails.png) #### Using template injection ```javascript import { Component, Input } from '@angular/core'; @Component({ selector: 'custom-thumbnails', template: '

Custom Thumbnails Component

' }) export class CustomThumbnailsComponent { @Input() pdfViewer: any; ... } ``` ```html ``` ### Custom "Open With" menu You can enable a custom "Open With" menu by providing at least one action inside the `adf-viewer-open-with` tag: ```html ``` ![Open with](../docassets/images/viewer-open-with.png) ### Custom "More actions" menu You can enable a custom "More actions" menu by providing at least one action inside the `adf-viewer-more-actions` tag: ```html ``` ![More actions](../docassets/images/viewer-more-actions.png) ### Extending the Viewer You can define your own custom handle to handle other file formats that are not yet supported by the Viewer component. Below is an example that shows how to use the `adf-viewer-extension` to handle 3D data files: ```html ``` Note: you need to add the `ng2-3d-editor` dependency to your `package.json` file to make the example above work. You can define multiple `adf-viewer-extension` templates if required: ```html ``` ## See also - [Document List component](../content-services/document-list.component.md)