UNPKG

ng2-pdf-viewer

Version:

Angular 5+ component for rendering PDF

650 lines (647 loc) 74.6 kB
import * as i0 from '@angular/core'; import { EventEmitter, Component, ViewChild, Output, Input, NgModule } from '@angular/core'; import { fromEvent, Subject, from } from 'rxjs'; import { takeUntil, debounceTime, filter } from 'rxjs/operators'; import * as PDFJS from 'pdfjs-dist'; import { VerbosityLevel, GlobalWorkerOptions, getDocument } from 'pdfjs-dist'; import * as PDFJSViewer from 'pdfjs-dist/web/pdf_viewer.mjs'; // interface EventBus { // on(eventName: string, listener: Function): void; // off(eventName: string, listener: Function): void; // _listeners: any; // dispatch(eventName: string, data: Object): void; // _on(eventName: any, listener: any, options?: null): void; // _off(eventName: any, listener: any, options?: null): void; // } function createEventBus(pdfJsViewer, destroy$) { const globalEventBus = new pdfJsViewer.EventBus(); attachDOMEventsToEventBus(globalEventBus, destroy$); return globalEventBus; } function attachDOMEventsToEventBus(eventBus, destroy$) { fromEvent(eventBus, 'documentload') .pipe(takeUntil(destroy$)) .subscribe(() => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('documentload', true, true, {}); window.dispatchEvent(event); }); fromEvent(eventBus, 'pagerendered') .pipe(takeUntil(destroy$)) .subscribe(({ pageNumber, cssTransform, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('pagerendered', true, true, { pageNumber, cssTransform, }); source.div.dispatchEvent(event); }); fromEvent(eventBus, 'textlayerrendered') .pipe(takeUntil(destroy$)) .subscribe(({ pageNumber, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('textlayerrendered', true, true, { pageNumber }); source.textLayerDiv?.dispatchEvent(event); }); fromEvent(eventBus, 'pagechanging') .pipe(takeUntil(destroy$)) .subscribe(({ pageNumber, source }) => { const event = document.createEvent('UIEvents'); event.initEvent('pagechanging', true, true); /* tslint:disable:no-string-literal */ event['pageNumber'] = pageNumber; source.container.dispatchEvent(event); }); fromEvent(eventBus, 'pagesinit') .pipe(takeUntil(destroy$)) .subscribe(({ source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('pagesinit', true, true, null); source.container.dispatchEvent(event); }); fromEvent(eventBus, 'pagesloaded') .pipe(takeUntil(destroy$)) .subscribe(({ pagesCount, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('pagesloaded', true, true, { pagesCount }); source.container.dispatchEvent(event); }); fromEvent(eventBus, 'scalechange') .pipe(takeUntil(destroy$)) .subscribe(({ scale, presetValue, source }) => { const event = document.createEvent('UIEvents'); event.initEvent('scalechange', true, true); /* tslint:disable:no-string-literal */ event['scale'] = scale; /* tslint:disable:no-string-literal */ event['presetValue'] = presetValue; source.container.dispatchEvent(event); }); fromEvent(eventBus, 'updateviewarea') .pipe(takeUntil(destroy$)) .subscribe(({ location, source }) => { const event = document.createEvent('UIEvents'); event.initEvent('updateviewarea', true, true); event['location'] = location; source.container.dispatchEvent(event); }); fromEvent(eventBus, 'find') .pipe(takeUntil(destroy$)) .subscribe(({ source, type, query, phraseSearch, caseSensitive, highlightAll, findPrevious, }) => { if (source === window) { return; // event comes from FirefoxCom, no need to replicate } const event = document.createEvent('CustomEvent'); event.initCustomEvent('find' + type, true, true, { query, phraseSearch, caseSensitive, highlightAll, findPrevious, }); window.dispatchEvent(event); }); fromEvent(eventBus, 'attachmentsloaded') .pipe(takeUntil(destroy$)) .subscribe(({ attachmentsCount, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('attachmentsloaded', true, true, { attachmentsCount, }); source.container.dispatchEvent(event); }); fromEvent(eventBus, 'sidebarviewchanged') .pipe(takeUntil(destroy$)) .subscribe(({ view, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('sidebarviewchanged', true, true, { view }); source.outerContainer.dispatchEvent(event); }); fromEvent(eventBus, 'pagemode') .pipe(takeUntil(destroy$)) .subscribe(({ mode, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('pagemode', true, true, { mode }); source.pdfViewer.container.dispatchEvent(event); }); fromEvent(eventBus, 'namedaction') .pipe(takeUntil(destroy$)) .subscribe(({ action, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('namedaction', true, true, { action }); source.pdfViewer.container.dispatchEvent(event); }); fromEvent(eventBus, 'presentationmodechanged') .pipe(takeUntil(destroy$)) .subscribe(({ active, switchInProgress }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('presentationmodechanged', true, true, { active, switchInProgress, }); window.dispatchEvent(event); }); fromEvent(eventBus, 'outlineloaded') .pipe(takeUntil(destroy$)) .subscribe(({ outlineCount, source }) => { const event = document.createEvent('CustomEvent'); event.initCustomEvent('outlineloaded', true, true, { outlineCount }); source.container.dispatchEvent(event); }); } function assign(obj, prop, value) { obj[prop] = value; } function isSSR() { return typeof window === 'undefined'; } /** * Created by vadimdez on 21/06/16. */ if (!isSSR()) { assign(PDFJS, 'verbosity', VerbosityLevel.INFOS); } // @ts-expect-error This does not exist outside of polyfill which this is doing if (typeof Promise.withResolvers === 'undefined' && window) { // @ts-expect-error This does not exist outside of polyfill which this is doing window.Promise.withResolvers = () => { let resolve; let reject; const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); return { promise, resolve, reject }; }; } var RenderTextMode; (function (RenderTextMode) { RenderTextMode[RenderTextMode["DISABLED"] = 0] = "DISABLED"; RenderTextMode[RenderTextMode["ENABLED"] = 1] = "ENABLED"; RenderTextMode[RenderTextMode["ENHANCED"] = 2] = "ENHANCED"; })(RenderTextMode || (RenderTextMode = {})); class PdfViewerComponent { element; ngZone; static CSS_UNITS = 96.0 / 72.0; static BORDER_WIDTH = 9; pdfViewerContainer; eventBus; pdfLinkService; pdfFindController; pdfViewer; isVisible = false; _cMapsUrl = typeof PDFJS !== 'undefined' ? `https://unpkg.com/pdfjs-dist@${PDFJS.version}/cmaps/` : null; _imageResourcesPath = typeof PDFJS !== 'undefined' ? `https://unpkg.com/pdfjs-dist@${PDFJS.version}/web/images/` : undefined; _renderText = true; _renderTextMode = RenderTextMode.ENABLED; _stickToPage = false; _originalSize = true; _pdf; _page = 1; _zoom = 1; _zoomScale = 'page-width'; _rotation = 0; _showAll = true; _canAutoResize = true; _fitToPage = false; _externalLinkTarget = 'blank'; _showBorders = false; lastLoaded; _latestScrolledPage; pageScrollTimeout = null; isInitialized = false; loadingTask; destroy$ = new Subject(); afterLoadComplete = new EventEmitter(); pageRendered = new EventEmitter(); pageInitialized = new EventEmitter(); textLayerRendered = new EventEmitter(); onError = new EventEmitter(); onProgress = new EventEmitter(); pageChange = new EventEmitter(true); src; set cMapsUrl(cMapsUrl) { this._cMapsUrl = cMapsUrl; } set page(_page) { _page = parseInt(_page, 10) || 1; const originalPage = _page; if (this._pdf) { _page = this.getValidPageNumber(_page); } this._page = _page; if (originalPage !== _page) { this.pageChange.emit(_page); } } set renderText(renderText) { this._renderText = renderText; } set renderTextMode(renderTextMode) { this._renderTextMode = renderTextMode; } set originalSize(originalSize) { this._originalSize = originalSize; } set showAll(value) { this._showAll = value; } set stickToPage(value) { this._stickToPage = value; } set zoom(value) { if (value <= 0) { return; } this._zoom = value; } get zoom() { return this._zoom; } set zoomScale(value) { this._zoomScale = value; } get zoomScale() { return this._zoomScale; } set rotation(value) { if (!(typeof value === 'number' && value % 90 === 0)) { console.warn('Invalid pages rotation angle.'); return; } this._rotation = value; } set externalLinkTarget(value) { this._externalLinkTarget = value; } set autoresize(value) { this._canAutoResize = Boolean(value); } set fitToPage(value) { this._fitToPage = Boolean(value); } set showBorders(value) { this._showBorders = Boolean(value); } static getLinkTarget(type) { switch (type) { case 'blank': return PDFJSViewer.LinkTarget.BLANK; case 'none': return PDFJSViewer.LinkTarget.NONE; case 'self': return PDFJSViewer.LinkTarget.SELF; case 'parent': return PDFJSViewer.LinkTarget.PARENT; case 'top': return PDFJSViewer.LinkTarget.TOP; } return null; } constructor(element, ngZone) { this.element = element; this.ngZone = ngZone; if (isSSR()) { return; } let pdfWorkerSrc; const pdfJsVersion = PDFJS.version; const versionSpecificPdfWorkerUrl = window[`pdfWorkerSrc${pdfJsVersion}`]; if (versionSpecificPdfWorkerUrl) { pdfWorkerSrc = versionSpecificPdfWorkerUrl; } else if (window.hasOwnProperty('pdfWorkerSrc') && typeof window.pdfWorkerSrc === 'string' && window.pdfWorkerSrc) { pdfWorkerSrc = window.pdfWorkerSrc; } else { pdfWorkerSrc = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfJsVersion}/legacy/build/pdf.worker.min.mjs`; } assign(GlobalWorkerOptions, 'workerSrc', pdfWorkerSrc); } ngAfterViewChecked() { if (this.isInitialized) { return; } const offset = this.pdfViewerContainer.nativeElement.offsetParent; if (this.isVisible === true && offset == null) { this.isVisible = false; return; } if (this.isVisible === false && offset != null) { this.isVisible = true; setTimeout(() => { this.initialize(); this.ngOnChanges({ src: this.src }); }); } } ngOnInit() { this.initialize(); this.setupResizeListener(); } ngOnDestroy() { this.clear(); this.destroy$.next(); this.loadingTask = null; } ngOnChanges(changes) { if (isSSR() || !this.isVisible) { return; } if ('src' in changes) { this.loadPDF(); } else if (this._pdf) { if ('renderText' in changes || 'showAll' in changes) { this.setupViewer(); this.resetPdfDocument(); } if ('page' in changes) { const { page } = changes; if (page.currentValue === this._latestScrolledPage) { return; } // New form of page changing: The viewer will now jump to the specified page when it is changed. // This behavior is introduced by using the PDFSinglePageViewer this.pdfViewer.scrollPageIntoView({ pageNumber: this._page }); } this.update(); } } updateSize() { from(this._pdf.getPage(this.pdfViewer.currentPageNumber)) .pipe(takeUntil(this.destroy$)) .subscribe({ next: (page) => { const rotation = this._rotation + page.rotate; const viewportWidth = page.getViewport({ scale: this._zoom, rotation }).width * PdfViewerComponent.CSS_UNITS; let scale = this._zoom; let stickToPage = true; // Scale the document when it shouldn't be in original size or doesn't fit into the viewport if (!this._originalSize || (this._fitToPage && viewportWidth > this.pdfViewerContainer.nativeElement.clientWidth)) { const viewPort = page.getViewport({ scale: 1, rotation }); scale = this.getScale(viewPort.width, viewPort.height); stickToPage = !this._stickToPage; } this.pdfViewer.currentScale = scale; if (stickToPage) this.pdfViewer.scrollPageIntoView({ pageNumber: page.pageNumber, ignoreDestinationZoom: true }); } }); } clear() { if (this.loadingTask && !this.loadingTask.destroyed) { this.loadingTask.destroy(); } if (this._pdf) { this._latestScrolledPage = 0; this._pdf.destroy(); this._pdf = undefined; } this.pdfViewer && this.pdfViewer.setDocument(null); this.pdfLinkService && this.pdfLinkService.setDocument(null, null); this.pdfFindController && this.pdfFindController.setDocument(null); } getPDFLinkServiceConfig() { const linkTarget = PdfViewerComponent.getLinkTarget(this._externalLinkTarget); if (linkTarget) { return { externalLinkTarget: linkTarget }; } return {}; } initEventBus() { this.eventBus = createEventBus(PDFJSViewer, this.destroy$); fromEvent(this.eventBus, 'pagerendered') .pipe(takeUntil(this.destroy$)) .subscribe((event) => { this.pageRendered.emit(event); }); fromEvent(this.eventBus, 'pagesinit') .pipe(takeUntil(this.destroy$)) .subscribe((event) => { this.pageInitialized.emit(event); }); fromEvent(this.eventBus, 'pagechanging') .pipe(takeUntil(this.destroy$)) .subscribe(({ pageNumber }) => { if (this.pageScrollTimeout) { clearTimeout(this.pageScrollTimeout); } this.pageScrollTimeout = window.setTimeout(() => { this._latestScrolledPage = pageNumber; this.pageChange.emit(pageNumber); }, 100); }); fromEvent(this.eventBus, 'textlayerrendered') .pipe(takeUntil(this.destroy$)) .subscribe((event) => { this.textLayerRendered.emit(event); }); } initPDFServices() { this.pdfLinkService = new PDFJSViewer.PDFLinkService({ eventBus: this.eventBus, ...this.getPDFLinkServiceConfig() }); this.pdfFindController = new PDFJSViewer.PDFFindController({ eventBus: this.eventBus, linkService: this.pdfLinkService, }); } getPDFOptions() { return { eventBus: this.eventBus, container: this.element.nativeElement.querySelector('div'), removePageBorders: !this._showBorders, linkService: this.pdfLinkService, textLayerMode: this._renderText ? this._renderTextMode : RenderTextMode.DISABLED, findController: this.pdfFindController, l10n: new PDFJSViewer.GenericL10n('en'), imageResourcesPath: this._imageResourcesPath, annotationEditorMode: PDFJS.AnnotationEditorType.DISABLE, }; } setupViewer() { if (this.pdfViewer) { this.pdfViewer.setDocument(null); } assign(PDFJS, 'disableTextLayer', !this._renderText); this.initPDFServices(); if (this._showAll) { this.pdfViewer = new PDFJSViewer.PDFViewer(this.getPDFOptions()); } else { this.pdfViewer = new PDFJSViewer.PDFSinglePageViewer(this.getPDFOptions()); } this.pdfLinkService.setViewer(this.pdfViewer); this.pdfViewer._currentPageNumber = this._page; } getValidPageNumber(page) { if (page < 1) { return 1; } if (page > this._pdf.numPages) { return this._pdf.numPages; } return page; } getDocumentParams() { const srcType = typeof this.src; if (!this._cMapsUrl) { return this.src; } const params = { cMapUrl: this._cMapsUrl, cMapPacked: true, enableXfa: true, }; params.isEvalSupported = false; // http://cve.org/CVERecord?id=CVE-2024-4367 if (srcType === 'string') { params.url = this.src; } else if (srcType === 'object') { if (this.src.byteLength !== undefined) { params.data = this.src; } else { Object.assign(params, this.src); } } return params; } loadPDF() { if (!this.src) { return; } if (this.lastLoaded === this.src) { this.update(); return; } this.clear(); this.setupViewer(); this.loadingTask = getDocument(this.getDocumentParams()); this.loadingTask.onProgress = (progressData) => { this.onProgress.emit(progressData); }; const src = this.src; from(this.loadingTask.promise) .pipe(takeUntil(this.destroy$)) .subscribe({ next: (pdf) => { this._pdf = pdf; this.lastLoaded = src; this.afterLoadComplete.emit(pdf); this.resetPdfDocument(); this.update(); }, error: (error) => { this.lastLoaded = null; this.onError.emit(error); } }); } update() { this.page = this._page; this.render(); } render() { this._page = this.getValidPageNumber(this._page); if (this._rotation !== 0 || this.pdfViewer.pagesRotation !== this._rotation) { // wait until at least the first page is available. this.pdfViewer.firstPagePromise?.then(() => (this.pdfViewer.pagesRotation = this._rotation)); } if (this._stickToPage) { setTimeout(() => { this.pdfViewer.currentPageNumber = this._page; }); } if (!this.pdfViewer._pages?.length) { // the first time we wait until pages init const sub = this.pageInitialized.subscribe(() => { this.updateSize(); sub.unsubscribe(); }); } else { this.updateSize(); } } getScale(viewportWidth, viewportHeight) { const borderSize = this._showBorders ? 2 * PdfViewerComponent.BORDER_WIDTH : 0; const pdfContainerWidth = this.pdfViewerContainer.nativeElement.clientWidth - borderSize; const pdfContainerHeight = this.pdfViewerContainer.nativeElement.clientHeight - borderSize; if (pdfContainerHeight === 0 || viewportHeight === 0 || pdfContainerWidth === 0 || viewportWidth === 0) { return 1; } let ratio = 1; switch (this._zoomScale) { case 'page-fit': ratio = Math.min(pdfContainerHeight / viewportHeight, pdfContainerWidth / viewportWidth); break; case 'page-height': ratio = pdfContainerHeight / viewportHeight; break; case 'page-width': default: ratio = pdfContainerWidth / viewportWidth; break; } return (this._zoom * ratio) / PdfViewerComponent.CSS_UNITS; } resetPdfDocument() { this.pdfLinkService.setDocument(this._pdf, null); this.pdfFindController.setDocument(this._pdf); this.pdfViewer.setDocument(this._pdf); } initialize() { if (isSSR() || !this.isVisible) { return; } this.isInitialized = true; this.initEventBus(); this.setupViewer(); } setupResizeListener() { if (isSSR()) { return; } this.ngZone.runOutsideAngular(() => { fromEvent(window, 'resize') .pipe(debounceTime(100), filter(() => this._canAutoResize && !!this._pdf), takeUntil(this.destroy$)) .subscribe(() => { this.updateSize(); }); }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PdfViewerComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: PdfViewerComponent, selector: "pdf-viewer", inputs: { src: "src", cMapsUrl: ["c-maps-url", "cMapsUrl"], page: "page", renderText: ["render-text", "renderText"], renderTextMode: ["render-text-mode", "renderTextMode"], originalSize: ["original-size", "originalSize"], showAll: ["show-all", "showAll"], stickToPage: ["stick-to-page", "stickToPage"], zoom: "zoom", zoomScale: ["zoom-scale", "zoomScale"], rotation: "rotation", externalLinkTarget: ["external-link-target", "externalLinkTarget"], autoresize: "autoresize", fitToPage: ["fit-to-page", "fitToPage"], showBorders: ["show-borders", "showBorders"] }, outputs: { afterLoadComplete: "after-load-complete", pageRendered: "page-rendered", pageInitialized: "pages-initialized", textLayerRendered: "text-layer-rendered", onError: "error", onProgress: "on-progress", pageChange: "pageChange" }, viewQueries: [{ propertyName: "pdfViewerContainer", first: true, predicate: ["pdfViewerContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: ` <div #pdfViewerContainer class="ng2-pdf-viewer-container"> <div class="pdfViewer"></div> </div> `, isInline: true, styles: [".ng2-pdf-viewer-container{overflow-x:auto;position:absolute;height:100%;width:100%;-webkit-overflow-scrolling:touch}:host{display:block;position:relative}:host ::ng-deep{--pdfViewer-padding-bottom: 0;--page-margin: 1px auto -8px;--page-border: 9px solid transparent;--spreadHorizontalWrapped-margin-LR: -3.5px;--viewer-container-height: 0;--annotation-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");--xfa-unfocused-field-background: var( --annotation-unfocused-field-background );--page-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAA1ElEQVQ4jbWUWw6EIAxFy2NFs/8NzR4UJhpqLsdi5mOmSSMUOfYWqv3S0gMr4XlYH/64gZa/gN3ANYA7KAXALt4ktoQ5MI9YxqaG8bWmsIysMuT6piSQCa4whZThCu8CM4zP9YJaKci9jicPq3NcBWYoPMGUlhG7ivtkB+gVyFY75wXghOvh8t5mto1Mdim6e+MBqH6XsY+YAwjpq3vGF7weTWQptLEDVCZvPTMl5JZZsdh47FHW6qFMyvLYqjcnmdFfY9Xk/KDOlzCusX2mi/ofM7MPkzBcSp4Q1/wAAAAASUVORK5CYII=) 9 9 repeat;--scale-factor: 1;--focus-outline: solid 2px blue;--hover-outline: dashed 2px blue;--freetext-line-height: 1.35;--freetext-padding: 2px;--editorInk-editing-cursor: pointer}@media screen and (forced-colors: active){:host ::ng-deep{--pdfViewer-padding-bottom: 9px;--page-margin: 8px auto -1px;--page-border: 1px solid CanvasText;--page-border-image: none;--spreadHorizontalWrapped-margin-LR: 3.5px}}@media (forced-colors: active){:host ::ng-deep{--focus-outline: solid 3px ButtonText;--hover-outline: dashed 3px ButtonText}}:host ::ng-deep .textLayer{position:absolute;text-align:initial;inset:0;overflow:hidden;opacity:.2;line-height:1;-webkit-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0}:host ::ng-deep .textLayer span,:host ::ng-deep .textLayer br{color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0% 0%}:host ::ng-deep .textLayer span.markedContent{top:0;height:0}:host ::ng-deep .textLayer .highlight{margin:-1px;padding:1px;background-color:#b400aa;border-radius:4px}:host ::ng-deep .textLayer .highlight.appended{position:initial}:host ::ng-deep .textLayer .highlight.begin{border-radius:4px 0 0 4px}:host ::ng-deep .textLayer .highlight.end{border-radius:0 4px 4px 0}:host ::ng-deep .textLayer .highlight.middle{border-radius:0}:host ::ng-deep .textLayer .highlight.selected{background-color:#006400}:host ::ng-deep .textLayer ::selection{background:rgb(0,0,255)}:host ::ng-deep .textLayer br::selection{background:transparent}:host ::ng-deep .textLayer .endOfContent{display:block;position:absolute;inset:100% 0 0;z-index:-1;cursor:default;-webkit-user-select:none;user-select:none}:host ::ng-deep .textLayer .endOfContent.active{top:0}@media (forced-colors: active){:host ::ng-deep .annotationLayer .textWidgetAnnotation input:required,:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea:required,:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select:required,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:required,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input:required{outline:1.5px solid selectedItem}}:host ::ng-deep .annotationLayer{position:absolute;top:0;left:0;pointer-events:none;transform-origin:0 0}:host ::ng-deep .annotationLayer section{position:absolute;text-align:initial;pointer-events:auto;box-sizing:border-box;transform-origin:0 0}:host ::ng-deep .annotationLayer .linkAnnotation>a,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.pushButton>a{position:absolute;font-size:1em;top:0;left:0;width:100%;height:100%}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.pushButton>canvas{width:100%;height:100%}:host ::ng-deep .annotationLayer .linkAnnotation>a:hover,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.pushButton>a:hover{opacity:.2;background:rgb(255,255,0);box-shadow:0 2px 10px #ff0}:host ::ng-deep .annotationLayer .textAnnotation img{position:absolute;cursor:pointer;width:100%;height:100%}:host ::ng-deep .annotationLayer .textWidgetAnnotation input,:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea,:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input{background-image:var(--annotation-unfocused-field-background);border:1px solid transparent;box-sizing:border-box;font:calc(9px * var(--scale-factor)) sans-serif;height:100%;margin:0;vertical-align:top;width:100%}:host ::ng-deep .annotationLayer .textWidgetAnnotation input:required,:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea:required,:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select:required,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:required,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input:required{outline:1.5px solid red}:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select option{padding:0}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input{border-radius:50%}:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea{resize:none}:host ::ng-deep .annotationLayer .textWidgetAnnotation input[disabled],:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea[disabled],:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select[disabled],:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input[disabled],:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input[disabled]{background:none;border:1px solid transparent;cursor:not-allowed}:host ::ng-deep .annotationLayer .textWidgetAnnotation input:hover,:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea:hover,:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select:hover,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:hover,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input:hover{border:1px solid rgb(0,0,0)}:host ::ng-deep .annotationLayer .textWidgetAnnotation input:focus,:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea:focus,:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select:focus{background:none;border:1px solid transparent}:host ::ng-deep .annotationLayer .textWidgetAnnotation input :focus,:host ::ng-deep .annotationLayer .textWidgetAnnotation textarea :focus,:host ::ng-deep .annotationLayer .choiceWidgetAnnotation select :focus,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox :focus,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton :focus{background-image:none;background-color:transparent;outline:auto}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{background-color:CanvasText;content:\"\";display:block;position:absolute}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{height:80%;left:45%;width:1px}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:before{transform:rotate(45deg)}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input:checked:after{transform:rotate(-45deg)}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input:checked:before{border-radius:50%;height:50%;left:30%;top:20%;width:50%}:host ::ng-deep .annotationLayer .textWidgetAnnotation input.comb{font-family:monospace;padding-left:2px;padding-right:0}:host ::ng-deep .annotationLayer .textWidgetAnnotation input.comb:focus{width:103%}:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.checkBox input,:host ::ng-deep .annotationLayer .buttonWidgetAnnotation.radioButton input{-webkit-appearance:none;appearance:none}:host ::ng-deep .annotationLayer .popupTriggerArea{height:100%;width:100%}:host ::ng-deep .annotationLayer .popupWrapper{position:absolute;font-size:calc(9px * var(--scale-factor));width:100%;min-width:calc(180px * var(--scale-factor));pointer-events:none}:host ::ng-deep .annotationLayer .popup{position:absolute;max-width:calc(180px * var(--scale-factor));background-color:#ff9;box-shadow:0 calc(2px * var(--scale-factor)) calc(5px * var(--scale-factor)) #888;border-radius:calc(2px * var(--scale-factor));padding:calc(6px * var(--scale-factor));margin-left:calc(5px * var(--scale-factor));cursor:pointer;font:message-box;white-space:normal;word-wrap:break-word;pointer-events:auto}:host ::ng-deep .annotationLayer .popup>*{font-size:calc(9px * var(--scale-factor))}:host ::ng-deep .annotationLayer .popup h1{display:inline-block}:host ::ng-deep .annotationLayer .popupDate{display:inline-block;margin-left:calc(5px * var(--scale-factor))}:host ::ng-deep .annotationLayer .popupContent{border-top:1px solid rgb(51,51,51);margin-top:calc(2px * var(--scale-factor));padding-top:calc(2px * var(--scale-factor))}:host ::ng-deep .annotationLayer .richText>*{white-space:pre-wrap;font-size:calc(9px * var(--scale-factor))}:host ::ng-deep .annotationLayer .highlightAnnotation,:host ::ng-deep .annotationLayer .underlineAnnotation,:host ::ng-deep .annotationLayer .squigglyAnnotation,:host ::ng-deep .annotationLayer .strikeoutAnnotation,:host ::ng-deep .annotationLayer .freeTextAnnotation,:host ::ng-deep .annotationLayer .lineAnnotation svg line,:host ::ng-deep .annotationLayer .squareAnnotation svg rect,:host ::ng-deep .annotationLayer .circleAnnotation svg ellipse,:host ::ng-deep .annotationLayer .polylineAnnotation svg polyline,:host ::ng-deep .annotationLayer .polygonAnnotation svg polygon,:host ::ng-deep .annotationLayer .caretAnnotation,:host ::ng-deep .annotationLayer .inkAnnotation svg polyline,:host ::ng-deep .annotationLayer .stampAnnotation,:host ::ng-deep .annotationLayer .fileAttachmentAnnotation{cursor:pointer}:host ::ng-deep .annotationLayer section svg{position:absolute;width:100%;height:100%}:host ::ng-deep .annotationLayer .annotationTextContent{position:absolute;width:100%;height:100%;opacity:0;color:transparent;-webkit-user-select:none;user-select:none;pointer-events:none}:host ::ng-deep .annotationLayer .annotationTextContent span{width:100%;display:inline-block}@media (forced-colors: active){:host ::ng-deep .xfaLayer *:required{outline:1.5px solid selectedItem}}:host ::ng-deep .xfaLayer .highlight{margin:-1px;padding:1px;background-color:#efcbed;border-radius:4px}:host ::ng-deep .xfaLayer .highlight.appended{position:initial}:host ::ng-deep .xfaLayer .highlight.begin{border-radius:4px 0 0 4px}:host ::ng-deep .xfaLayer .highlight.end{border-radius:0 4px 4px 0}:host ::ng-deep .xfaLayer .highlight.middle{border-radius:0}:host ::ng-deep .xfaLayer .highlight.selected{background-color:#cbdfcb}:host ::ng-deep .xfaLayer ::selection{background:rgb(0,0,255)}:host ::ng-deep .xfaPage{overflow:hidden;position:relative}:host ::ng-deep .xfaContentarea{position:absolute}:host ::ng-deep .xfaPrintOnly{display:none}:host ::ng-deep .xfaLayer{position:absolute;text-align:initial;top:0;left:0;transform-origin:0 0;line-height:1.2}:host ::ng-deep .xfaLayer *{color:inherit;font:inherit;font-style:inherit;font-weight:inherit;font-kerning:inherit;letter-spacing:-.01px;text-align:inherit;text-decoration:inherit;box-sizing:border-box;background-color:transparent;padding:0;margin:0;pointer-events:auto;line-height:inherit}:host ::ng-deep .xfaLayer *:required{outline:1.5px solid red}:host ::ng-deep .xfaLayer div{pointer-events:none}:host ::ng-deep .xfaLayer svg{pointer-events:none}:host ::ng-deep .xfaLayer svg *{pointer-events:none}:host ::ng-deep .xfaLayer a{color:#00f}:host ::ng-deep .xfaRich li{margin-left:3em}:host ::ng-deep .xfaFont{color:#000;font-weight:400;font-kerning:none;font-size:10px;font-style:normal;letter-spacing:0;text-decoration:none;vertical-align:0}:host ::ng-deep .xfaCaption{overflow:hidden;flex:0 0 auto}:host ::ng-deep .xfaCaptionForCheckButton{overflow:hidden;flex:1 1 auto}:host ::ng-deep .xfaLabel{height:100%;width:100%}:host ::ng-deep .xfaLeft{display:flex;flex-direction:row;align-items:center}:host ::ng-deep .xfaRight{display:flex;flex-direction:row-reverse;align-items:center}:host ::ng-deep .xfaLeft>.xfaCaption,:host ::ng-deep .xfaLeft>.xfaCaptionForCheckButton,:host ::ng-deep .xfaRight>.xfaCaption,:host ::ng-deep .xfaRight>.xfaCaptionForCheckButton{max-height:100%}:host ::ng-deep .xfaTop{display:flex;flex-direction:column;align-items:flex-start}:host ::ng-deep .xfaBottom{display:flex;flex-direction:column-reverse;align-items:flex-start}:host ::ng-deep .xfaTop>.xfaCaption,:host ::ng-deep .xfaTop>.xfaCaptionForCheckButton,:host ::ng-deep .xfaBottom>.xfaCaption,:host ::ng-deep .xfaBottom>.xfaCaptionForCheckButton{width:100%}:host ::ng-deep .xfaBorder{background-color:transparent;position:absolute;pointer-events:none}:host ::ng-deep .xfaWrapped{width:100%;height:100%}:host ::ng-deep .xfaTextfield:focus,:host ::ng-deep .xfaSelect:focus{background-image:none;background-color:transparent;outline:auto;outline-offset:-1px}:host ::ng-deep .xfaCheckbox:focus,:host ::ng-deep .xfaRadio:focus{outline:auto}:host ::ng-deep .xfaTextfield,:host ::ng-deep .xfaSelect{height:100%;width:100%;flex:1 1 auto;border:none;resize:none;background-image:var(--xfa-unfocused-field-background)}:host ::ng-deep .xfaTop>.xfaTextfield,:host ::ng-deep .xfaTop>.xfaSelect,:host ::ng-deep .xfaBottom>.xfaTextfield,:host ::ng-deep .xfaBottom>.xfaSelect{flex:0 1 auto}:host ::ng-deep .xfaButton{cursor:pointer;width:100%;height:100%;border:none;text-align:center}:host ::ng-deep .xfaLink{width:100%;height:100%;position:absolute;top:0;left:0}:host ::ng-deep .xfaCheckbox,:host ::ng-deep .xfaRadio{width:100%;height:100%;flex:0 0 auto;border:none}:host ::ng-deep .xfaRich{white-space:pre-wrap;width:100%;height:100%}:host ::ng-deep .xfaImage{object-position:left top;object-fit:contain;width:100%;height:100%}:host ::ng-deep .xfaLrTb,:host ::ng-deep .xfaRlTb,:host ::ng-deep .xfaTb{display:flex;flex-direction:column;align-items:stretch}:host ::ng-deep .xfaLr{display:flex;flex-direction:row;align-items:stretch}:host ::ng-deep .xfaRl{display:flex;flex-direction:row-reverse;align-items:stretch}:host ::ng-deep .xfaTb>div{justify-content:left}:host ::ng-deep .xfaPosition{position:relative}:host ::ng-deep .xfaArea{position:relative}:host ::ng-deep .xfaValignMiddle{display:flex;align-items:center}:host ::ng-deep .xfaTable{display:flex;flex-direction:column;align-items:stretch}:host ::ng-deep .xfaTable .xfaRow{display:flex;flex-direction:row;align-items:stretch}:host ::ng-deep .xfaTable .xfaRlRow{display:flex;flex-direction:row-reverse;align-items:stretch;flex:1}:host ::ng-deep .xfaTable .xfaRlRow>div{flex:1}:host ::ng-deep .xfaNonInteractive input,:host ::ng-deep .xfaNonInteractive textarea,:host ::ng-deep .xfaDisabled input,:host ::ng-deep .xfaDisabled textarea,:host ::ng-deep .xfaReadOnly input,:host ::ng-deep .xfaReadOnly textarea{background:initial}@media print{:host ::ng-deep .xfaTextfield,:host ::ng-deep .xfaSelect{background:transparent}:host ::ng-deep .xfaSelect{-webkit-appearance:none;appearance:none;text-indent:1px;text-overflow:\"\"}}:host ::ng-deep [data-editor-rotation=\"90\"]{transform:rotate(90deg)}:host ::ng-deep [data-editor-rotation=\"180\"]{transform:rotate(180deg)}:host ::ng-deep [data-editor-rotation=\"270\"]{transform:rotate(270deg)}:host ::ng-deep .annotationEditorLayer{background:transparent;position:absolute;top:0;left:0;font-size:calc(100px * var(--scale-factor));transform-origin:0 0}:host ::ng-deep .annotationEditorLayer .selectedEditor{outline:var(--focus-outline);resize:none}:host ::ng-deep .annotationEditorLayer .freeTextEditor{position:absolute;background:transparent;border-radius:3px;padding:calc(var(--freetext-padding) * var(--scale-factor));resize:none;width:auto;height:auto;z-index:1;transform-origin:0 0;touch-action:none}:host ::ng-deep .annotationEditorLayer .freeTextEditor .internal{background:transparent;border:none;top:0;left:0;overflow:visible;white-space:nowrap;resize:none;font:10px sans-serif;line-height:var(--freetext-line-height)}:host ::ng-deep .annotationEditorLayer .freeTextEditor .overlay{position:absolute;display:none;background:transparent;top:0;left:0;width:100%;height:100%}:host ::ng-deep .annotationEditorLayer .freeTextEditor .overlay.enabled{display:block}:host ::ng-deep .annotationEditorLayer .freeTextEditor .internal:empty:before{content:attr(default-content);color:gray}:host ::ng-deep .annotationEditorLayer .freeTextEditor .internal:focus{outline:none}:host ::ng-deep .annotationEditorLayer .inkEditor.disabled{resize:none}:host ::ng-deep .annotationEditorLayer .inkEditor.disabled.selectedEditor{resize:horizontal}:host ::ng-deep .annotationEditorLayer .freeTextEditor:hover:not(.selectedEditor),:host ::ng-deep .annotationEditorLayer .inkEditor:hover:not(.selectedEditor){outline:var(--hover-outline)}:host ::ng-deep .annotationEditorLayer .inkEditor{position:absolute;background:transparent;border-radius:3px;overflow:auto;width:100%;height:100%;z-index:1;transform-origin:0 0;cursor:auto}:host ::ng-deep .annotationEditorLayer .inkEditor.editing{resize:none;cursor:var(--editorInk-editing-cursor),pointer}:host ::ng-deep .annotationEditorLayer .inkEditor .inkEditorCanvas{position:absolute;top:0;left:0;width:100%;height:100%;touch-action:none}:host ::ng-deep [data-main-rotation=\"90\"]{transform:rotate(90deg) translateY(-100%)}:host ::ng-deep [data-main-rotation=\"180\"]{transform:rotate(180deg) translate(-100%,-100%)}:host ::ng-deep [data-main-rotation=\"270\"]{transform:rotate(270deg) translate(-100%)}:host ::ng-deep .pdfViewer{padding-bottom:var(--pdfViewer-padding-bottom)}:host ::ng-deep .pdfViewer .canvasWrapper{overflow:hidden}:host ::ng-deep .pdfViewer .canvasWrapper canvas{width:100%}:host ::ng-deep .pdfViewer .page{direction:ltr;width:816px;height:1056px;margin:var(--page-margin);position:relative;overflow:visible;border:var(--page-border);border-image:var(--page-border-image);background-clip:content-box;background-color:#fff}:host ::ng-deep .pdfViewer .dummyPage{position:relative;width:0;height:var(--viewer-container-height)}:host ::ng-deep .pdfViewer.removePageBorders .page{margin:0 auto 10px;border:none}:host ::ng-deep .pdfViewer.singlePageView{display:inline-block}:host ::ng-deep .pdfViewer.singlePageView .page{margin:0;border:none}:host ::ng-deep .pdfViewer.scrollHorizontal,:host ::ng-deep .pdfViewer.scrollWrapped,:host ::ng-deep .spread{margin-left:3.5px;margin-right:3.5px;text-align:center}:host ::ng-deep .pdfViewer.scrollHorizontal,:host ::ng-deep .spread{white-space:nowrap}:host ::ng-deep .pdfViewer.removePageBorders,:host ::ng-deep .pdfViewer.scrollHorizontal .spread,:host ::ng-deep .pdfViewer.scrollWrapped .spread{margin-left:0;margin-right:0}:host ::ng-deep .spread .page,:host ::ng-deep .spread .dummyPage,:host ::ng-deep .pdfViewer.scrollHorizontal .page,:host ::ng-deep .pdfViewer.scrollWrapped .page,:host ::ng-deep .pdfViewer.scrollHorizontal .spread,:host ::ng-deep .pdfViewer.scrollWrapped .spread{display:inline-block;vertical-align:middle}:host ::ng-deep .spread .page,:host ::ng-deep .pdfViewer.scrollHorizontal .page,:host ::ng-deep .pdfViewer.scrollWrapped .page{margin-left:var(--spreadHorizontalWrapped-margin-LR);margin-right:var(--spreadHorizontalWrapped-margin-LR)}:host ::ng-deep .pdfViewer.removePageBorders .spread .page,:host ::ng-deep .pdfViewer.removePageBorders.scrollHorizontal .page,:host ::ng-deep .pdfViewer.removePageBorders.scrollWrapped .page{margin-left:5px;margin-right:5px}:host ::ng-deep .pdfViewer .page canvas{margin:0;display:block}:host ::ng-deep .pdfViewer .page canvas[hidden]{display:none}:host ::ng-deep .pdfViewer .page .loadingIcon{position:absolute;display:block;inset:0;background:url(data:image/gif;base64,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) center no-repeat}:host ::ng-deep .pdfViewer .page .loadingIcon.notVisible{background:none}:host ::ng-deep .pdfViewer.enablePermissions .textLayer span{-webkit-user-select:none!important;user-select:none!important;cursor:not-allowed}:host ::ng-deep .pdfPresentationMode .pdfViewer{padding-bottom:0}:host ::ng-deep .pdfPresentationMode .spread{margin:0}:host ::ng-deep .pdfPresentationMode .pdfViewer .page{margin:0 auto;border:2px solid transparent}\n"] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PdfViewerComponent, decorators: [{ type: Component, args: [{ selector: 'pdf-viewer', template: ` <div #pdfViewerContainer class="ng2-pdf-viewer-container"> <div class="pdfViewer"></div> </div> `, styles: [".ng2-pdf-viewer-container{overflow-x:auto;position:absolute;height:100%;width:100%;-webkit-overflow-scrolling:touch}:host{display:block;position:relative}:host ::ng-deep{--pdfViewer-padding-bottom: 0;--page-margin: 1px auto -8px;--page-border: 9px solid transparent;--spreadHorizontalWrapped-margin-LR: -3.5px;--viewer-container-height: 0;--annotation-unfocused-field-background: url(\"data:image/svg+xml;charset=UTF-8,<svg width='1px' height='1px' xmlns='http://www.w3.org/2000/svg'><rect width='100%' height='100%' style='fill:rgba(0, 54, 255, 0.13);'/></svg>\");--xfa-unfocused-field-background: var( --annotation-unfocused-field-background );--page-border-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAA1ElEQVQ4jbWUWw6EIAxFy2NFs/8NzR4UJhpqLsdi5mOmSSMUOfYWqv3S0gMr4XlYH/64gZa/gN3ANYA7KAXALt4ktoQ5MI9YxqaG8bWmsIysMuT6piSQCa4whZThCu8CM4zP9YJaKci9jicPq3NcBWYoPMGUlhG7ivtkB+gVyFY75wXghOvh8t5mto1Mdim6e+MBqH6XsY+YAwjpq3vGF7weTWQptLEDVCZvPTMl5JZZsdh47FHW6qFMyvLYqjcnmdFfY9Xk/KDOlzCusX2mi/ofM7MPkzBcSp4Q1/wAAAAASUVORK5CYII=) 9 9 repeat;--scale-factor: 1;--focus-outline: solid 2px blue;--hover-outline: dashed 2px blue;--freetext-line-height: 1.35;--freetext-padding: 2px;--editorInk-editing-cursor: pointer}@media screen and (forced-colors: active){:host ::ng-deep{--pdfViewer-padding-bottom: 9px;--page-margin: 8px auto -1px;--page-border: 1px solid CanvasText;--page-border-image: none;--spreadHorizontalWrapped-margin-LR: 3.5px}}@media (forced-colors: active){:host ::ng-deep{--focus-outline: solid 3px ButtonText;--hover-outline: dashed 3px ButtonText}}:host ::ng-deep .textLayer{position:absolute;text-align:initial;inset:0;overflow:hidden;opacity:.2;line-height:1;-webkit-text-size-adjust:none;text-size-adjust:none;forced-color-adjust:none;transform-origin:0 0}:host ::ng-deep .textLayer span,:host ::ng-deep .textLayer br{color:transparent;position:absolute;white-space:pre;cursor:text;transform-origin:0% 0%}:host ::ng-deep .textLayer span.markedContent{top:0;height:0}:host ::ng-deep .textLayer .highlight{margin:-1px;padding:1px;background-color:#b400aa;border-radius:4px}:host ::ng-deep .textLayer .highlight.appended{position:initial}:host ::ng-deep .textLayer .highlight.begin{border-radius:4px 0 0 4px}:host ::ng-deep .textLayer .highlight.end{border-radius:0 4px 4px 0}:host ::ng-deep .textL