--- Title: Viewer component Added: v2.0.0 Status: Active Last reviewed: 2019-03-25 --- # [Viewer component](lib/core/src/lib/viewer/components/viewer.component.ts "Defined in viewer.component.ts") Displays content from an ACS repository. See it live: [Viewer Quickstart](https://embed.plnkr.co/iTuG1lFIXfsP95l6bDW6/) ## Contents - [Basic usage](#basic-usage) - [Transclusions](#transclusions) - [Class members](#class-members) - [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) - [Extending the Viewer](#extending-the-viewer) - [Custom layout](#custom-layout) - [Printing](#printing) - [See also](#see-also) ## Basic usage Using with node id: ```html ``` Using with file url: ```html ``` Using with shared link: ```html ``` Note that if you have a URL which contains a shared link ID, you should extract the ID portion and use it with the `sharedLinkId` property rather than using the whole URL with `urlFile`. ### [Transclusions](../../user-guide/transclusion.md) The [Viewer component](viewer.component.md) lets you transclude content for the toolbar (and toolbar buttons), the sidebar, thumbnails, and the "Open with" and "More actions" menus. See the [Custom layout](#custom-layout) section for full details of all available tranclusions. ## Class members ### Properties | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | allowDownload | `boolean` | true | Toggles downloading. | | allowFullScreen | `boolean` | true | Toggles the 'Full Screen' feature. | | allowGoBack | `boolean` | true | Allows `back` navigation | | allowLeftSidebar | `boolean` | false | Allow the left the sidebar. | | allowNavigate | `boolean` | false | Toggles before/next navigation. You can use the arrow buttons to navigate between documents in the collection. | | allowPrint | `boolean` | false | Toggles printing. | | allowRightSidebar | `boolean` | false | Allow the right sidebar. | | allowThumbnails | `boolean` | true | Toggles PDF thumbnails. | | blobFile | [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) | | Loads a [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) File | | canNavigateBefore | `boolean` | true | Toggles the "before" ("<") button. Requires `allowNavigate` to be enabled. | | canNavigateNext | `boolean` | true | Toggles the next (">") button. Requires `allowNavigate` to be enabled. | | displayName | `string` | | Specifies the name of the file when it is not available from the URL. | | fileName | `string` | | Content filename. | | maxRetries | `number` | 30 | Number of times the Viewer will retry fetching content Rendition. There is a delay of at least one second between attempts. | | mimeType | `string` | | MIME type of the file content (when not determined by the filename extension). | | nodeId | `string` | null | Node Id of the file to load. | | overlayMode | `boolean` | false | If `true` then show the Viewer as a full page over the current content. Otherwise fit inside the parent div. | | sharedLinkId | `string` | null | Shared link id (to display shared file). | | showLeftSidebar | `boolean` | false | Toggles left sidebar visibility. Requires `allowLeftSidebar` to be set to `true`. | | showRightSidebar | `boolean` | false | Toggles right sidebar visibility. Requires `allowRightSidebar` to be set to `true`. | | showToolbar | `boolean` | true | Hide or show the toolbar | | showViewer | `boolean` | true | Hide or show the viewer | | sidebarLeftTemplate | [`TemplateRef`](https://angular.io/api/core/TemplateRef)`` | null | The template for the left sidebar. The template context contains the loaded node data. | | sidebarRightTemplate | [`TemplateRef`](https://angular.io/api/core/TemplateRef)`` | null | The template for the right sidebar. The template context contains the loaded node data. | | thumbnailsTemplate | [`TemplateRef`](https://angular.io/api/core/TemplateRef)`` | null | The template for the pdf thumbnails. | | 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. | | versionId | `string` | null | Version Id of the file to load. | ### Events | Name | Type | Description | | ---- | ---- | ----------- | | extensionChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the filename extension changes. | | goBack | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`BaseEvent`](../../../lib/core/events/base.event.ts)`>` | Emitted when user clicks the 'Back' button. | | invalidSharedLink | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the shared link used is not valid. | | navigateBefore | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when user clicks 'Navigate Before' ("<") button. | | navigateNext | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when user clicks 'Navigate Next' (">") button. | | print | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`BaseEvent`](../../../lib/core/events/base.event.ts)`>` | Emitted when user clicks the 'Print' button. | | showViewerChange | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the viewer is shown or hidden. | ## 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/components/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](viewer.component.md) consists of separate Views that handle particular file types or 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](../services/renditions.service.md). 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](viewer.component.md) 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](viewer.component.md) should now be able to display PDF files. ### Extending the Viewer #### Internal extension mechanism The Viewer supports dynamically-loaded viewer preview extensions, to know more about it [Preview Extension component](../../extensions/components/preview-extension.component.md). This #### Code extension mechanism] You can define your own custom handler to handle other file formats that are not yet supported by the [Viewer component](viewer.component.md). 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 ``` ### Custom layout The [Viewer component](viewer.component.md) lets you transclude custom content in several different places as explained in the sections below. #### 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](viewer.component.md) also supports custom sidebar components and layouts. Set the `allowRightSidebar` property to `true` to enable this feature. The custom sidebar can be injected in two different ways. The first way is to use transclusion, which will display all content placed inside the `` element: ```html

My info

``` The second way to customize the sidebar is to use template injection but note that this only works when using the viewer with `nodeId`. ```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) Provide the custom template as in the following example: ```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) #### Custom zoom scaling You can set a default zoom scaling value for pdf viewer by adding the following code in `app.config.json`. Note: For the pdf viewer the value has to be within the range of 25 - 1000. "adf-viewer": { "pdf-viewer-scaling": 150 } In the same way you can set a default zoom scaling value for the image viewer by adding the following code in `app.config.json`. "adf-viewer": { "image-viewer-scaling": 150 } By default the viewer's zoom scaling is set to 100%. ### Printing You can configure the Viewer to let the user print the displayed content. The component will show a "Print" button if the `allowPrint` property is set to true. ```html ... ``` You can also use the `print` event to get notification when the user prints some content. ## See also - [Document List component](../../content-services/components/document-list.component.md) - [Preview Extension component](../../extensions/components/preview-extension.component.md)