UNPKG

@syncfusion/ej2-pdfviewer

Version:
237 lines (236 loc) 10.1 kB
import { isNullOrUndefined, Browser } from '@syncfusion/ej2-base'; import { TaskPriorityLevel } from '../../base/pdfviewer-utlis'; import { AjaxHandler } from '../../index'; import { isOrganizeDialogRendered } from './organize-initialization'; import { setThumbnailImage } from './slider-zoomaction'; import { restorePagesAfterZoom, restorePagesBeforeZoom } from './organize-undoredo'; /** * @private * @returns { void } */ export function createRequestForPreview() { // eslint-disable-next-line var proxy = this; var isIE = !!document.documentMode; if (!isIE) { return new Promise(function (renderPreviewImage, reject) { proxy.requestPreviewCreation(proxy); }); } else { this.requestPreviewCreation(proxy); return null; } } /** * @private * @param { PageOrganizer } proxy - It's describe about page organizer module. * @returns { void } */ export function requestPreviewCreation(proxy) { // Removed the condition to skip multiple request for thumbnail image. var startIndex = this.lastRequestedPageIndex; var endIndex = (startIndex + this.previewLimit) >= this.pdfViewer.pageCount ? this.pdfViewer.pageCount : (startIndex + this.previewLimit); var digitalSignaturePresent = false; for (var i = startIndex; i < endIndex; i++) { if (proxy.pdfViewerBase.digitalSignaturePresent(i)) { digitalSignaturePresent = true; } } var digitalSignatureList = ''; if (digitalSignaturePresent) { digitalSignatureList = proxy.pdfViewerBase.digitalSignaturePages.toString(); } var jsonObject = { startPage: startIndex.toString(), endPage: endIndex.toString(), sizeX: '99.7', sizeY: '141', hashId: proxy.pdfViewerBase.hashId, action: 'RenderThumbnailImages', elementId: proxy.pdfViewer.element.id, uniqueId: proxy.pdfViewerBase.documentId, digitalSignaturePresent: digitalSignaturePresent, digitalSignaturePageList: digitalSignatureList }; if (this.pdfViewerBase.jsonDocumentId) { jsonObject.documentId = this.pdfViewerBase.jsonDocumentId; } if (!this.pdfViewerBase.clientSideRendering) { var imageSize = this.previouslyRequestedImageZoom; jsonObject.imageSize = imageSize; jsonObject.initialLoad = this.isInitialLoading; this.previewRequestHandler = new AjaxHandler(this.pdfViewer); this.previewRequestHandler.url = proxy.pdfViewer.serviceUrl + '/' + proxy.pdfViewer.serverActionSettings.renderThumbnail; this.previewRequestHandler.responseType = 'json'; if (endIndex > 0 && !isNullOrUndefined(proxy.pdfViewerBase.hashId) && !this.isAllImagesReceived) { this.previewRequestHandler.send(jsonObject); } this.previewRequestHandler.onSuccess = function (result) { var data = result.data; var redirect = proxy.pdfViewerBase.checkRedirection(data); if (!redirect) { proxy.updatePreviewCollection(data); } }; this.previewRequestHandler.onFailure = function (result) { proxy.pdfViewer.fireAjaxRequestFailed(result.status, result.statusText, proxy.pdfViewer.serverActionSettings.renderThumbnail); }; this.previewRequestHandler.onError = function (result) { proxy.pdfViewerBase.openNotificationPopup(); proxy.pdfViewer.fireAjaxRequestFailed(result.status, result.statusText, proxy.pdfViewer.serverActionSettings.renderThumbnail); }; } else { var start = 0; var limit = this.pdfViewer.pageCount; var jsonObject_1 = { documentId: proxy.pdfViewerBase.getDocumentId(), hashId: proxy.pdfViewerBase.hashId, elementId: proxy.pdfViewer.element.id, uniqueId: proxy.pdfViewerBase.documentId }; var isTextNeed = proxy.pdfViewer.textSearch ? true : false; var initialLoad = this.isInitialLoading; var imageSize = proxy.getImageZoomValue(true); for (var pageIndex = start; pageIndex < limit; pageIndex++) { /* eslint-disable security/detect-object-injection */ if (!isNullOrUndefined(this.dataDetails[pageIndex] && this.dataDetails[pageIndex].imageSize === imageSize)) { continue; } /* eslint-enable security/detect-object-injection */ this.pdfViewerBase.pdfViewerRunner.addTask({ startIndex: start, endIndex: limit, pageIndex: pageIndex, message: 'renderPreviewTileImage', isTextNeed: isTextNeed, jsonObject: jsonObject_1, isRenderText: isTextNeed, requestType: isTextNeed ? 'pdfTextSearchRequest' : '', imageSize: imageSize, initialLoad: initialLoad }, TaskPriorityLevel.Medium); } } } /** * @private * @param { any } data - It's describe about update the preview collection. * @returns { void } */ export function updatePreviewCollection(data) { if (data) { // eslint-disable-next-line var proxy = this; if (typeof data !== 'object') { try { data = JSON.parse(data); } catch (error) { proxy.pdfViewerBase.onControlError(500, data, proxy.pdfViewer.serverActionSettings.renderThumbnail); data = null; } } if (data && data.uniqueId === proxy.pdfViewerBase.documentId) { proxy.pdfViewer.fireAjaxRequestSuccess(proxy.pdfViewer.serverActionSettings.renderThumbnail, data); this.getData(data, proxy.pdfViewerBase.clientSideRendering); } } } /** * @private * @param { any } event - It's describe about update the preview collection. * @returns { void } */ export function previewOnMessage(event) { if (event.data.message === 'renderPreviewTileImage') { var canvas = document.createElement('canvas'); var _a = event.data, value = _a.value, width = _a.width, height = _a.height, pageIndex = _a.pageIndex, startIndex = _a.startIndex, endIndex = _a.endIndex, imageSize = _a.imageSize; canvas.width = width; canvas.height = height; var canvasContext = canvas.getContext('2d'); var imageData = canvasContext.createImageData(width, height); imageData.data.set(value); canvasContext.putImageData(imageData, 0, 0); var imageUrl = canvas.toDataURL(); this.pdfViewerBase.releaseCanvas(canvas); var data = ({ thumbnailImage: imageUrl, startPage: startIndex, endPage: endIndex, uniqueId: this.pdfViewerBase.documentId, pageIndex: pageIndex, imageSize: imageSize }); this.updatePreviewCollection(data); } } /** * @param {any} data - It describes about the data * @param {boolean} isClientRender - It describes about the isClientRender * @private * @returns {void} */ export function getData(data, isClientRender) { if (!this.dataDetails) { this.dataDetails = []; } if (data.imageSize !== this.previouslyRequestedImageZoom) { return; } if (this.dataDetails.length === this.pdfViewer.pageCount) { return; } if (isClientRender) { this.dataDetails.push({ pageId: data.pageIndex, image: data.thumbnailImage, imageSize: data.imageSize }); } else { var startPage = data.startPage; var endPage = data.endPage; for (var i = startPage; i < endPage; i++) { var thumbnailImage = data.thumbnailImage[parseInt(i.toString(), 10)]; var pageId = i; this.dataDetails.push({ pageId: pageId, image: thumbnailImage, imageSize: data.imageSize }); } } this.dataDetails.sort(function (a, b) { return a.pageId - b.pageId; }); if (this.dataDetails.length === this.pdfViewer.pageCount) { if (!isNullOrUndefined(this.pdfViewerBase.navigationPane)) { this.pdfViewerBase.navigationPane.enableOrganizeButton(true); } if (!isNullOrUndefined(this.pdfViewer.toolbar)) { this.pdfViewer.toolbar.enableToolbarItem(['OrganizePagesTool'], true); } if (this.isInitialLoading && this.pdfViewer.isPageOrganizerOpen) { if (!Browser.isDevice || this.pdfViewer.enableDesktopMode) { this.createOrganizeWindow(); } else { this.createOrganizeWindowForMobile(); } } if (this.isPageZoomChanged) { if (this.isOrganizeWindowOpen || isOrganizeDialogRendered.call(this)) { restorePagesBeforeZoom.call(this); setThumbnailImage.call(this); restorePagesAfterZoom.call(this); } if (this.isOrganizeWindowOpen) { this.showOrganizeLoadingIndicator(false); } this.isPageZoomChanged = false; this.currentImageZoom = this.getImageZoomValue(); if (this.previousImageZoom !== this.currentImageZoom) { this.pdfViewer.firePageOrganizerZoomChanged(this.previousImageZoom, this.currentImageZoom); } } this.isAllImagesReceived = true; this.isInitialLoading = false; this.lastRequestedPageIndex = 0; } else { if (!this.pdfViewerBase.clientSideRendering) { if (!this.isInitialLoading || (Browser.isDevice && !this.pdfViewer.enableDesktopMode) || (this.isInitialLoading && (!this.pdfViewer.enableThumbnail || isNullOrUndefined(this.pdfViewer.thumbnailViewModule)))) { this.lastRequestedPageIndex = parseInt(data.endPage, 10); var isIE = !!document.documentMode; if (!isIE) { Promise.all([this.createRequestForPreview()]); } else { this.createRequestForPreview(); } } } } }