@syncfusion/ej2-pdfviewer
Version:
Essential JS 2 PDF viewer Component
237 lines (236 loc) • 10.1 kB
JavaScript
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();
}
}
}
}
}