@syncfusion/ej2-pdfviewer
Version:
Essential JS 2 PDF viewer Component
814 lines (813 loc) • 48.1 kB
JavaScript
import { splitArrayCollection, processPathData, getPathString } from '@syncfusion/ej2-drawings';
import { Browser, isNullOrUndefined } from '@syncfusion/ej2-base';
var InkAnnotation = /** @class */ (function () {
function InkAnnotation(pdfViewer, pdfViewerBase) {
this.newObject = [];
/**
* @private
*/
this.outputString = '';
/**
* @private
*/
this.inkAnnotationindex = [];
/**
* @private
*/
this.isAddAnnotationProgramatically = false;
/**
* @private
*/
this.currentPageNumber = '';
/**
* @private
*/
this.inkAnnotationInitialZoom = 1;
/**
* @private
*/
this.inkPathDataCollection = [];
this.pdfViewer = pdfViewer;
this.pdfViewerBase = pdfViewerBase;
}
/**
* @private
* @returns {void}
*/
InkAnnotation.prototype.drawInk = function () {
this.pdfViewerBase.disableTextSelectionMode();
this.pdfViewer.tool = 'Ink';
};
InkAnnotation.prototype.drawInkAnnotation = function (pageNumber) {
if (this.pdfViewerBase.isToolbarInkClicked) {
this.pdfViewerBase.isInkAdded = true;
this.pdfViewer.annotationModule.isFormFieldShape = false;
var pageIndex = !isNaN(pageNumber) ? pageNumber : this.pdfViewerBase.currentPageNumber - 1;
if ((this.outputString && this.outputString !== '') || this.inkPathDataCollection.length > 0) {
var currentAnnot = this.addInk(pageIndex);
this.pdfViewer.renderDrawing(undefined, pageIndex);
this.pdfViewer.clearSelection(pageIndex);
this.pdfViewer.select([currentAnnot.id], currentAnnot.annotationSelectorSettings);
if (this.pdfViewer.toolbar && this.pdfViewer.toolbar.annotationToolbarModule) {
this.pdfViewer.toolbar.annotationToolbarModule.enableSignaturePropertiesTools(true);
}
if (Browser.isDevice && !this.pdfViewer.enableDesktopMode &&
this.pdfViewer.enableToolbar && this.pdfViewer.enableAnnotationToolbar) {
this.pdfViewer.toolbarModule.annotationToolbarModule.createPropertyTools('Ink');
}
}
else {
this.outputString = '';
this.newObject = [];
this.pdfViewerBase.isToolbarInkClicked = false;
this.pdfViewer.tool = '';
this.inkPathDataCollection = [];
}
this.pdfViewerBase.isInkAdded = false;
}
};
/**
* @private
* @returns {any} - any
*/
InkAnnotation.prototype.updateInkDataWithZoom = function () {
var updatedPathData = '';
if (this.outputString !== '') {
this.inkPathDataCollection.push({ pathData: this.outputString, zoomFactor: this.inkAnnotationInitialZoom });
}
if (this.inkPathDataCollection.length > 0) {
//for loop to get the path data from the collection with path zoom factor
for (var i = 0; i < this.inkPathDataCollection.length; i++) {
updatedPathData += this.updatePathDataWithZoom(this.inkPathDataCollection[parseInt(i.toString(), 10)].pathData, this.inkPathDataCollection[parseInt(i.toString(), 10)].zoomFactor);
}
}
else {
updatedPathData += this.updatePathDataWithZoom(this.outputString, this.inkAnnotationInitialZoom);
}
return updatedPathData;
};
InkAnnotation.prototype.updatePathDataWithZoom = function (pathData, pathZoomFactor) {
var pathString = '';
var zoom = this.pdfViewerBase.getZoomFactor();
var collectionData = processPathData(pathData);
var csData = splitArrayCollection(collectionData);
for (var j = 0; j < csData.length; j++) {
var pathValue = csData[parseInt(j.toString(), 10)];
pathString += pathValue.command + pathValue.x * (zoom / pathZoomFactor) + ',' + pathValue.y * (zoom / pathZoomFactor) + ' ';
}
return pathString;
};
/**
* @private
* @returns {void}
*/
InkAnnotation.prototype.storePathData = function () {
this.convertToPath(this.newObject);
this.newObject = [];
};
/**
* @param {any} position - It describes about the position of the annotation
* @param {number} pageIndex - It describes about the page index value
* @private
* @returns {void}
*/
InkAnnotation.prototype.drawInkInCanvas = function (position, pageIndex) {
if (this.currentPageNumber !== '' && parseInt(this.currentPageNumber, 10) !== pageIndex) {
this.drawInkAnnotation(parseInt(this.currentPageNumber, 10));
this.pdfViewerBase.isToolbarInkClicked = true;
this.pdfViewer.tool = 'Ink';
}
var zoom = this.pdfViewerBase.getZoomFactor();
this.inkAnnotationInitialZoom = zoom;
var ratio = this.pdfViewerBase.getWindowDevicePixelRatio();
var canvas = this.pdfViewerBase.getAnnotationCanvas('_annotationCanvas_', pageIndex);
var context = canvas.getContext('2d');
var thickness = this.pdfViewer.inkAnnotationSettings.thickness ? this.pdfViewer.inkAnnotationSettings.thickness : 1;
var opacity = this.pdfViewer.inkAnnotationSettings.opacity ? this.pdfViewer.inkAnnotationSettings.opacity : 1;
var strokeColor = this.pdfViewer.inkAnnotationSettings.strokeColor ? this.pdfViewer.inkAnnotationSettings.strokeColor : '#ff0000';
if (!Browser.isDevice || (Browser.isDevice && zoom <= 0.7)) {
context.setTransform(ratio, 0, 0, ratio, 0, 0);
}
context.beginPath();
context.lineJoin = 'round';
context.lineCap = 'round';
context.moveTo(position.prevPosition.x, position.prevPosition.y);
context.lineTo(position.currentPosition.x, position.currentPosition.y);
context.lineWidth = thickness * zoom > 1 ? thickness * zoom : thickness;
context.strokeStyle = strokeColor;
context.globalAlpha = opacity;
// After the addition of a TextMarkup annotation, a LineDash value was introduced. To eliminate it, the value was cleared.
context.setLineDash([]);
context.stroke();
// context.lineWidth = 2;
context.arc(position.prevPosition.x, position.prevPosition.y, 2 / 2, 0, Math.PI * 2, true);
context.closePath();
this.pdfViewerBase.prevPosition = position.currentPosition;
this.newObject.push(position.currentPosition.x, position.currentPosition.y);
this.currentPageNumber = pageIndex.toString();
};
InkAnnotation.prototype.convertToPath = function (newObject) {
this.movePath(newObject[0], newObject[1]);
this.linePath(newObject[0], newObject[1]);
for (var n = 2; n < newObject.length; n = n + 2) {
this.linePath(newObject[parseInt(n.toString(), 10)], newObject[n + 1]);
}
};
InkAnnotation.prototype.linePath = function (x, y) {
if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {
this.outputString += 'L' + x + ',' + y + ' ';
}
};
InkAnnotation.prototype.movePath = function (x, y) {
if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {
this.outputString += 'M' + x + ',' + y + ' ';
}
};
/**
* @param {number} pageNumber - It describes about the page number
* @private
* @returns {any} - any
*/
InkAnnotation.prototype.addInk = function (pageNumber) {
this.outputString = this.updateInkDataWithZoom();
var currentBounds = this.calculateInkSize(this.outputString);
var annot;
if (this.pdfViewerBase.isToolbarInkClicked) {
var annotationName = this.pdfViewer.annotation.createGUID();
var modifiedDate = this.pdfViewer.annotation.stickyNotesAnnotationModule.getDateAndTime();
var pageIndex = !isNaN(pageNumber) ? pageNumber : this.pdfViewerBase.currentPageNumber - 1;
var thickness = this.pdfViewer.inkAnnotationSettings.thickness ? this.pdfViewer.inkAnnotationSettings.thickness : 1;
var opacity = this.pdfViewer.inkAnnotationSettings.opacity ? this.pdfViewer.inkAnnotationSettings.opacity : 1;
var strokeColor = this.pdfViewer.inkAnnotationSettings.strokeColor ? this.pdfViewer.inkAnnotationSettings.strokeColor : '#ff0000';
var isLock = this.pdfViewer.inkAnnotationSettings.isLock ?
this.pdfViewer.inkAnnotationSettings.isLock : this.pdfViewer.annotationSettings.isLock;
var author = (this.pdfViewer.annotationSettings.author !== 'Guest') ? this.pdfViewer.annotationSettings.author : this.pdfViewer.inkAnnotationSettings.author ? this.pdfViewer.inkAnnotationSettings.author : 'Guest';
var subject = (this.pdfViewer.annotationSettings.subject !== '' && !isNullOrUndefined(this.pdfViewer.annotationSettings.subject)) ? this.pdfViewer.annotationSettings.subject : this.pdfViewer.inkAnnotationSettings.subject ? this.pdfViewer.inkAnnotationSettings.subject : 'Ink';
var customData = !isNullOrUndefined(this.pdfViewer.annotationSettings.customData) ?
this.pdfViewer.annotationSettings.customData : this.pdfViewer.inkAnnotationSettings.customData ?
this.pdfViewer.inkAnnotationSettings.customData : null;
var isPrint = this.pdfViewer.inkAnnotationSettings.isPrint;
var allowedInteractions = this.pdfViewer.inkAnnotationSettings.allowedInteractions ?
this.pdfViewer.inkAnnotationSettings.allowedInteractions : this.pdfViewer.annotationSettings.allowedInteractions;
var annotationSettings = this.pdfViewer.annotationSettings ? this.pdfViewer.annotationSettings :
this.pdfViewer.annotationModule.updateAnnotationSettings(this.pdfViewer.inkAnnotationSettings);
annot = {
id: 'ink' + this.pdfViewerBase.inkCount, bounds: { x: currentBounds.x, y: currentBounds.y, width: currentBounds.width, height: currentBounds.height }, pageIndex: pageIndex, data: this.outputString, customData: customData,
shapeAnnotationType: 'Ink', opacity: opacity, strokeColor: strokeColor, thickness: thickness, annotName: annotationName, comments: [],
author: author, subject: subject, notes: '',
review: { state: '', stateModel: '', modifiedDate: modifiedDate, author: author },
annotationSelectorSettings: this.getSelector('Ink', ''), modifiedDate: modifiedDate, annotationSettings: annotationSettings,
isPrint: isPrint, allowedInteractions: allowedInteractions, isCommentLock: false, isLocked: isLock
};
var annotObject = {
id: 'ink' + this.pdfViewerBase.inkCount, bounds: { x: currentBounds.x, y: currentBounds.y, width: currentBounds.width, height: currentBounds.height }, pageIndex: pageIndex, data: this.outputString, customData: customData,
shapeAnnotationType: 'Ink', opacity: opacity, strokeColor: strokeColor, thickness: thickness, annotName: annotationName, comments: [],
author: author, subject: subject, notes: '',
review: { state: '', stateModel: '', modifiedDate: modifiedDate, author: author },
annotationSelectorSettings: this.getSelector('Ink', ''), modifiedDate: modifiedDate, annotationSettings: annotationSettings,
isPrint: isPrint, allowedInteractions: allowedInteractions, isCommentLock: false, isLocked: isLock
};
var annotation = this.pdfViewer.add(annot);
var bounds = { left: annot.bounds.x, top: annot.bounds.y, width: annot.bounds.width, height: annot.bounds.height };
var settings = {
opacity: annot.opacity, strokeColor: annot.strokeColor, thickness: annot.thickness, modifiedDate: annot.modifiedDate,
width: annot.bounds.width, height: annot.bounds.height, data: this.outputString
};
this.pdfViewerBase.inkCount++;
var commentsDivid = this.pdfViewer.annotation.stickyNotesAnnotationModule.addComments('ink', (annot.pageIndex + 1), annot.shapeAnnotationType);
if (commentsDivid) {
document.getElementById(commentsDivid).id = annotationName;
}
annot.annotName = annotationName;
this.pdfViewer.annotation.addAction(pageIndex, null, annotation, 'Addition', '', annotation, annotation);
this.pdfViewer.annotationModule.storeAnnotations(pageIndex, annotObject, '_annotations_ink');
this.pdfViewer.fireAnnotationAdd(annot.pageIndex, annot.annotName, 'Ink', bounds, settings);
if (this.pdfViewerBase.isInkAdded) {
this.outputString = '';
this.newObject = [];
this.inkPathDataCollection = [];
}
this.pdfViewerBase.isToolbarInkClicked = false;
this.pdfViewer.tool = '';
}
return annot;
};
/**
* @private
* @returns {void}
*/
InkAnnotation.prototype.setAnnotationMode = function () {
if (this.pdfViewerBase.isToolbarInkClicked) {
this.drawInkAnnotation();
}
else {
this.pdfViewerBase.isToolbarInkClicked = true;
this.drawInk();
}
};
InkAnnotation.prototype.saveInkSignature = function () {
var storeObject = this.pdfViewer.annotationsCollection.get(this.pdfViewerBase.documentId + '_annotations_ink');
var annotations = [];
for (var j = 0; j < this.pdfViewerBase.pageCount; j++) {
annotations[parseInt(j.toString(), 10)] = [];
}
if (storeObject && !this.pdfViewer.annotationSettings.skipDownload) {
var annotationCollection = JSON.parse(JSON.stringify(storeObject));
for (var i = 0; i < annotationCollection.length; i++) {
var newArray = [];
var pageAnnotationObject = annotationCollection[parseInt(i.toString(), 10)];
if (pageAnnotationObject) {
for (var z = 0; pageAnnotationObject.annotations.length > z; z++) {
this.pdfViewer.annotationModule.updateModifiedDate(pageAnnotationObject.annotations[parseInt(z.toString(), 10)]);
var strokeColorString = pageAnnotationObject.annotations[parseInt(z.toString(), 10)].strokeColor;
pageAnnotationObject.annotations[parseInt(z.toString(), 10)].strokeColor =
JSON.stringify(this.pdfViewerBase.signatureModule.getRgbCode(strokeColorString));
pageAnnotationObject.annotations[parseInt(z.toString(), 10)].bounds =
JSON.stringify(this.pdfViewer.annotation.
getInkBounds(pageAnnotationObject.annotations[parseInt(z.toString(), 10)].bounds, pageAnnotationObject.pageIndex));
var collectionData = processPathData(pageAnnotationObject.annotations[parseInt(z.toString(), 10)].data);
var csData = splitArrayCollection(collectionData);
pageAnnotationObject.annotations[parseInt(z.toString(), 10)].data = JSON.stringify(csData);
}
newArray = pageAnnotationObject.annotations;
}
annotations[pageAnnotationObject.pageIndex] = newArray;
}
annotationCollection = null;
}
return JSON.stringify(annotations);
};
/**
* @param {number} pageNumber - It describes about the page number value
* @param {any} annotationBase - It describes about the annotation base
* @private
* @returns {void}
*/
InkAnnotation.prototype.addInCollection = function (pageNumber, annotationBase) {
if (annotationBase) {
var pageAnnotations = this.getAnnotations(pageNumber, null);
if (pageAnnotations) {
pageAnnotations.push(annotationBase);
}
this.manageInkAnnotations(pageAnnotations, pageNumber);
}
};
/**
* @private
* @param {string} data - data
* @returns {any} - points
*/
InkAnnotation.prototype.calculateInkSize = function (data) {
var minimumX = -1;
var minimumY = -1;
var maximumX = -1;
var maximumY = -1;
var collectionData = processPathData(data);
var zoomvalue = this.pdfViewerBase.getZoomFactor();
for (var k = 0; k < collectionData.length; k++) {
var val = collectionData[parseInt(k.toString(), 10)];
if (minimumX === -1) {
minimumX = (val['x']);
maximumX = (val['x']);
minimumY = (val['y']);
maximumY = (val['y']);
}
else {
var point1 = (val['x']);
var point2 = (val['y']);
if (minimumX >= point1) {
minimumX = point1;
}
if (minimumY >= point2) {
minimumY = point2;
}
if (maximumX <= point1) {
maximumX = point1;
}
if (maximumY <= point2) {
maximumY = point2;
}
}
}
var newdifferenceX = maximumX - minimumX;
var newdifferenceY = maximumY - minimumY;
return { x: (minimumX / zoomvalue), y: (minimumY / zoomvalue),
width: (newdifferenceX / zoomvalue), height: (newdifferenceY / zoomvalue) };
};
/**
* @param {any} annotationCollection - It describes about the annotation collection
* @param {number} pageIndex - page index value
* @param {boolean} isImport - It ensures whether the isImport is true or not
* @param {boolean} isAnnotOrderAction - It ensures whether the isAnnotOrderAction is true or not
* @param {boolean} isLastAnnot - It ensures whether the isLastAnnot is true or not
* @private
* @returns {void}
*/
InkAnnotation.prototype.renderExistingInkSignature = function (annotationCollection, pageIndex, isImport, isAnnotOrderAction, isLastAnnot) {
var annot;
var isinkAnnotationAdded = false;
if (!isImport) {
for (var p = 0; p < this.inkAnnotationindex.length; p++) {
if (this.inkAnnotationindex[parseInt(p.toString(), 10)] === pageIndex) {
isinkAnnotationAdded = true;
break;
}
}
}
if (annotationCollection && (!isinkAnnotationAdded || isAnnotOrderAction)) {
if (annotationCollection.length > 0 && this.inkAnnotationindex.indexOf(pageIndex) === -1) {
this.inkAnnotationindex.push(pageIndex);
}
for (var n = 0; n < annotationCollection.length; n++) {
var currentAnnotation = annotationCollection[parseInt(n.toString(), 10)];
if (currentAnnotation) {
var data = currentAnnotation.PathData;
if (isImport && data) {
if (typeof (data) === 'object' && data.length > 1) {
data = getPathString(data);
}
else {
if (!(currentAnnotation.IsPathData || (data.split('command').length <= 1))) {
data = getPathString(JSON.parse(data));
}
}
}
this.outputString = data;
var calculateInkPosition = this.calculateInkSize(this.outputString);
this.outputString = '';
var rectDiff = 0;
var rectDifference = 1;
var bounds = currentAnnotation.Bounds;
if (calculateInkPosition) {
if (calculateInkPosition.height < 1) {
rectDiff = bounds.Height ? bounds.Height : bounds.height;
rectDifference = bounds.Height ? bounds.Height : bounds.height;
}
else if (calculateInkPosition.width < 1) {
rectDiff = bounds.Width ? bounds.Width : bounds.width;
rectDifference = bounds.Width ? bounds.Width : bounds.width;
}
}
var currentLeft = !isNullOrUndefined(bounds.X) ? bounds.X + (rectDiff / 2) : bounds.x + (rectDiff / 2);
var currentTop = !isNullOrUndefined(bounds.Y) ? bounds.Y + (rectDiff / 2) : bounds.y + (rectDiff / 2);
var currentWidth = bounds.Width ? bounds.Width - (rectDifference - 1) : bounds.width - (rectDifference - 1);
var currentHeight = bounds.Height ? bounds.Height - (rectDifference - 1) :
bounds.height - (rectDifference - 1);
var isLock = currentAnnotation.AnnotationSettings ? currentAnnotation.AnnotationSettings.isLock : false;
var selectorSettings = currentAnnotation.AnnotationSelectorSettings ? typeof (currentAnnotation.AnnotationSelectorSettings) === 'string' ? JSON.parse(currentAnnotation.AnnotationSelectorSettings) : currentAnnotation.AnnotationSelectorSettings : this.getSelector(currentAnnotation, 'Ink');
var customData = this.pdfViewer.annotation.getCustomData(currentAnnotation);
var isPrint = true;
if (currentAnnotation.AnnotationSettings) {
isPrint = currentAnnotation.AnnotationSettings.isPrint;
}
else {
isPrint = this.pdfViewer.inkAnnotationSettings.isPrint;
}
isPrint = !isNullOrUndefined(currentAnnotation.IsPrint) ? currentAnnotation.IsPrint : true;
if (currentAnnotation.IsLocked) {
isLock = currentAnnotation.IsLocked;
}
if (currentAnnotation.Subject === 'Highlight' && currentAnnotation.Opacity === 1) {
currentAnnotation.Opacity = currentAnnotation.Opacity / 2;
}
currentAnnotation.allowedInteractions = currentAnnotation.AllowedInteractions ?
currentAnnotation.AllowedInteractions : this.pdfViewer.annotationModule.
updateAnnotationAllowedInteractions(currentAnnotation);
currentAnnotation.AnnotationSettings = currentAnnotation.AnnotationSettings ?
currentAnnotation.AnnotationSettings : this.pdfViewer.annotationModule.updateAnnotationSettings(currentAnnotation);
currentAnnotation.State = currentAnnotation.State ? currentAnnotation.State : '';
currentAnnotation.StateModel = currentAnnotation.StateModel ? currentAnnotation.StateModel : '';
annot = {
id: 'ink' + this.pdfViewerBase.inkCount, bounds: { x: currentLeft, y: currentTop, width: currentWidth, height: currentHeight }, pageIndex: pageIndex, data: data,
shapeAnnotationType: 'Ink', opacity: currentAnnotation.Opacity, strokeColor: currentAnnotation.StrokeColor, thickness: currentAnnotation.Thickness, annotName: currentAnnotation.AnnotName,
comments: this.pdfViewer.annotationModule.
getAnnotationComments(currentAnnotation.Comments, currentAnnotation, currentAnnotation.Author),
author: currentAnnotation.Author, allowedInteractions: currentAnnotation.allowedInteractions,
subject: currentAnnotation.Subject, modifiedDate: currentAnnotation.ModifiedDate,
review: { state: currentAnnotation.State, stateModel: currentAnnotation.StateModel,
modifiedDate: currentAnnotation.ModifiedDate, author: currentAnnotation.Author }, notes: currentAnnotation.Note, annotationSettings: currentAnnotation.AnnotationSettings,
annotationSelectorSettings: selectorSettings, customData: customData, isPrint: isPrint,
isCommentLock: currentAnnotation.IsCommentLock
};
var annotObject = {
id: 'ink' + this.pdfViewerBase.inkCount, bounds: { x: currentLeft, y: currentTop, width: currentWidth, height: currentHeight }, pageIndex: pageIndex, data: data,
shapeAnnotationType: 'Ink', opacity: currentAnnotation.Opacity, strokeColor: currentAnnotation.StrokeColor, thickness: currentAnnotation.Thickness, annotName: currentAnnotation.AnnotName,
comments: this.pdfViewer.annotationModule.
getAnnotationComments(currentAnnotation.Comments, currentAnnotation, currentAnnotation.Author),
author: currentAnnotation.Author, allowedInteractions: currentAnnotation.allowedInteractions,
subject: currentAnnotation.Subject, modifiedDate: currentAnnotation.ModifiedDate,
review: { state: currentAnnotation.State, stateModel: currentAnnotation.StateModel,
modifiedDate: currentAnnotation.ModifiedDate, author: currentAnnotation.Author }, notes: currentAnnotation.Note, annotationSettings: currentAnnotation.AnnotationSettings,
annotationSelectorSettings: selectorSettings, customData: customData, isPrint: isPrint,
isCommentLock: currentAnnotation.IsCommentLock
};
this.pdfViewer.add(annot);
var canvasPageIndex = currentAnnotation.pageIndex ? currentAnnotation.pageIndex : currentAnnotation.PageNumber;
var canvass = this.pdfViewerBase.getAnnotationCanvas('_annotationCanvas_', canvasPageIndex);
var isNeedToRender = ((isImport && isLastAnnot) || isNullOrUndefined(isImport) ||
!isImport) ? true : false;
if (isNeedToRender) {
this.pdfViewer.renderDrawing(canvass, annot.pageIndex);
}
this.pdfViewer.annotationModule.storeAnnotations(annot.pageIndex, annotObject, '_annotations_ink');
if (this.isAddAnnotationProgramatically) {
var settings = {
opacity: annot.opacity, strokeColor: annot.strokeColor, thickness: annot.thickness,
modifiedDate: annot.modifiedDate,
width: annot.bounds.width, height: annot.bounds.height, data: this.outputString
};
this.pdfViewer.fireAnnotationAdd(annot.pageIndex, annot.annotName, 'Ink', bounds, settings);
}
this.pdfViewerBase.currentSignatureAnnot = null;
this.pdfViewerBase.signatureCount++;
this.pdfViewerBase.inkCount++;
if (this.pdfViewerBase.navigationPane && this.pdfViewerBase.navigationPane.annotationMenuObj &&
this.pdfViewer.isSignatureEditable) {
this.pdfViewerBase.navigationPane.annotationMenuObj.enableItems([this.pdfViewer.localeObj.getConstant('Export Annotations')], true);
this.pdfViewerBase.navigationPane.annotationMenuObj.enableItems([this.pdfViewer.localeObj.getConstant('Export XFDF')], true);
}
}
}
}
};
// To save the imported annotations while downloading or exporting for the page above 10 without a scroll (EJ2-63924)
/**
* @param {any} annotation - This is annotation
* @param {number} pageNumber - This is page number
* @private
* @returns {void}
*/
InkAnnotation.prototype.saveImportedInkAnnotation = function (annotation, pageNumber) {
var annotationObject = null;
var currentBounds = annotation.Bounds;
var bounds = { x: currentBounds.X, y: currentBounds.Y, width: currentBounds.Width, height: currentBounds.Height };
var allowedInteractions = this.pdfViewer.annotationModule.updateAnnotationAllowedInteractions(annotation);
var customData = this.pdfViewer.annotation.getCustomData(annotation);
var comments = this.pdfViewer.annotationModule.getAnnotationComments(annotation.Comments, annotation, annotation.Author);
var review = { state: annotation.State, stateModel: annotation.StateModel,
modifiedDate: annotation.ModifiedDate, author: annotation.Author };
var annotationSettings = annotation.AnnotationSettings ? annotation.AnnotationSettings :
this.pdfViewer.annotationModule.updateAnnotationSettings(annotation);
var annotationSelectorSettings = this.getSettings(annotation);
var data = annotation.PathData;
if (typeof (data) === 'object' && data.length > 1) {
data = getPathString(data);
}
else {
if (!annotation.IsPathData && data.split('command').length > 1) {
data = getPathString(JSON.parse(data));
}
}
annotationObject = {
allowedInteractions: allowedInteractions, annotName: annotation.AnnotName,
annotationSelectorSettings: annotationSelectorSettings,
annotationSettings: annotationSettings, author: annotation.Author, bounds: bounds,
customData: customData, comments: comments, data: data,
id: 'Ink', isCommentLock: annotation.IsCommentLock, isLocked: annotation.IsLocked, isPrint: annotation.IsPrint, modifiedDate: annotation.ModifiedDate,
note: annotation.Note, opacity: annotation.Opacity, pageIndex: pageNumber, review: review,
shapeAnnotationType: annotation.AnnotationType,
strokeColor: annotation.StrokeColor, subject: annotation.Subject, thickness: annotation.Thickness
};
this.pdfViewer.annotationModule.storeAnnotations(pageNumber, annotationObject, '_annotations_ink');
};
// To get the annotation selector settings
InkAnnotation.prototype.getSettings = function (annotation) {
var selector = this.pdfViewer.annotationSelectorSettings;
if (annotation.AnnotationSelectorSettings) {
selector = annotation.AnnotationSelectorSettings;
}
else {
selector = this.getSelector(annotation.ShapeAnnotationType, annotation.Subject);
}
return selector;
};
/**
* @param {number} pageNumber - It describes about the page number value
* @param {any} annotations - It describes about the annotations
* @private
* @returns {void}
*/
InkAnnotation.prototype.storeInkSignatureData = function (pageNumber, annotations) {
this.pdfViewer.annotation.addAction(annotations.pageIndex, null, annotations, 'Addition', '', annotations, annotations);
var annotation = null;
var left = annotations.bounds.left ? annotations.bounds.left : annotations.bounds.x;
var top = annotations.bounds.top ? annotations.bounds.top : annotations.bounds.y;
if (annotations.wrapper && annotations.wrapper.bounds) {
left = annotations.wrapper.bounds.left;
top = annotations.wrapper.bounds.top;
}
annotation = {
id: annotations.id, bounds: { x: left, y: top, width: annotations.bounds.width, height: annotations.bounds.height },
shapeAnnotationType: 'Ink', opacity: annotations.opacity, thickness: annotations.thickness, strokeColor: annotations.strokeColor, pageIndex: annotations.pageIndex, data: annotations.data,
annotName: annotations.annotName,
comments: annotations.comments, author: annotations.author, subject: annotations.subject,
modifiedDate: annotations.modifiedDate,
review: { state: '', stateModel: '', modifiedDate: annotations.modifiedDate, author: annotations.author }, notes: annotations.notes,
annotationSelectorSettings: this.getSelector(annotations, 'Ink'), isCommentLock: annotations.isCommentLock
};
var storeObject = this.pdfViewer.annotationsCollection.get(this.pdfViewerBase.documentId + '_annotations_ink');
var index = 0;
if (!storeObject) {
var shapeAnnotation = { pageIndex: pageNumber, annotations: [] };
shapeAnnotation.annotations.push(annotation);
index = shapeAnnotation.annotations.indexOf(annotation);
var annotationCollection = [];
annotationCollection.push(shapeAnnotation);
this.pdfViewer.annotationsCollection.set(this.pdfViewerBase.documentId + '_annotations_ink', annotationCollection);
}
else {
this.pdfViewer.annotationsCollection.delete(this.pdfViewerBase.documentId + '_annotations_ink');
var pageIndex = this.pdfViewer.annotationModule.getPageCollection(storeObject, pageNumber);
if (pageIndex != null && storeObject[parseInt(pageIndex.toString(), 10)]) {
storeObject[parseInt(pageIndex.toString(), 10)].annotations.push(annotation);
index = storeObject[parseInt(pageIndex.toString(), 10)].annotations.indexOf(annotation);
}
else {
var markupAnnotation = { pageIndex: pageNumber, annotations: [] };
markupAnnotation.annotations.push(annotation);
index = markupAnnotation.annotations.indexOf(annotation);
storeObject.push(markupAnnotation);
}
this.pdfViewer.annotationsCollection.set(this.pdfViewerBase.documentId + '_annotations_ink', storeObject);
}
};
InkAnnotation.prototype.getSelector = function (type, subject) {
var selector = this.pdfViewer.annotationSelectorSettings;
if ((type === 'Ink' || subject === 'Ink') && this.pdfViewer.inkAnnotationSettings.annotationSelectorSettings) {
selector = this.pdfViewer.inkAnnotationSettings.annotationSelectorSettings;
this.pdfViewerBase.updateSelectorSettings(selector);
}
return selector;
};
InkAnnotation.prototype.getAnnotations = function (pageIndex, shapeAnnotations) {
var annotationCollection;
var storeObject = this.pdfViewer.annotationsCollection.get(this.pdfViewerBase.documentId + '_annotations_ink');
if (storeObject) {
var index = this.pdfViewer.annotationModule.getPageCollection(storeObject, pageIndex);
if (index != null && storeObject[parseInt(index.toString(), 10)]) {
annotationCollection = storeObject[parseInt(index.toString(), 10)].annotations;
}
else {
annotationCollection = shapeAnnotations;
}
}
else {
annotationCollection = shapeAnnotations;
}
return annotationCollection;
};
/**
* @param {string} property - It describes about the property
* @param {number} pageNumber - It describes about the page number
* @param {any} annotationBase - It is about the annotation base
* @private
* @returns {any} - any
*/
InkAnnotation.prototype.modifySignatureInkCollection = function (property, pageNumber, annotationBase) {
if (!isNullOrUndefined(annotationBase.formFieldAnnotationType) && annotationBase.formFieldAnnotationType !== '') {
this.pdfViewer.annotationModule.isFormFieldShape = true;
}
else {
this.pdfViewer.annotationModule.isFormFieldShape = false;
}
this.pdfViewerBase.updateDocumentEditedProperty(true);
var currentAnnotObject = null;
var pageAnnotations = this.getAnnotations(pageNumber, null);
if (pageAnnotations != null && annotationBase) {
for (var i = 0; i < pageAnnotations.length; i++) {
if (annotationBase.id === pageAnnotations[parseInt(i.toString(), 10)].id) {
if (property === 'bounds') {
this.pdfViewerBase.isBounds =
this.pdfViewerBase.boundsCalculation(pageAnnotations[parseInt(i.toString(), 10)].bounds, annotationBase.wrapper.bounds);
if (this.pdfViewerBase.isBounds) {
pageAnnotations[parseInt(i.toString(), 10)].bounds = {
x: annotationBase.wrapper.bounds.left,
y: annotationBase.wrapper.bounds.top, width: annotationBase.bounds.width,
height: annotationBase.bounds.height
};
}
}
else if (property === 'stroke') {
pageAnnotations[parseInt(i.toString(), 10)].strokeColor = annotationBase.wrapper.children[0].style.strokeColor;
}
else if (property === 'opacity') {
pageAnnotations[parseInt(i.toString(), 10)].opacity = annotationBase.wrapper.children[0].style.opacity;
}
else if (property === 'thickness') {
pageAnnotations[parseInt(i.toString(), 10)].thickness = annotationBase.wrapper.children[0].style.strokeWidth;
}
else if (property === 'notes') {
pageAnnotations[parseInt(i.toString(), 10)].notes = annotationBase.notes;
}
else if (property === 'delete') {
currentAnnotObject = pageAnnotations.splice(i, 1)[0];
break;
}
if (this.pdfViewerBase.isBounds) {
pageAnnotations[parseInt(i.toString(), 10)].modifiedDate =
this.pdfViewer.annotation.stickyNotesAnnotationModule.getDateAndTime();
}
this.pdfViewer.annotationModule.storeAnnotationCollections(pageAnnotations[parseInt(i.toString(), 10)], pageNumber);
}
}
this.manageInkAnnotations(pageAnnotations, pageNumber);
}
return currentAnnotObject;
};
InkAnnotation.prototype.manageInkAnnotations = function (pageAnnotations, pageNumber) {
var storeObject = this.pdfViewer.annotationsCollection.get(this.pdfViewerBase.documentId + '_annotations_ink');
if (storeObject) {
this.pdfViewer.annotationsCollection.delete(this.pdfViewerBase.documentId + '_annotations_ink');
var index = this.pdfViewer.annotationModule.getPageCollection(storeObject, pageNumber);
if (index != null && storeObject[parseInt(index.toString(), 10)]) {
storeObject[parseInt(index.toString(), 10)].annotations = pageAnnotations;
}
this.pdfViewer.annotationsCollection.set(this.pdfViewerBase.documentId + '_annotations_ink', storeObject);
}
};
/**
* @private
* @returns {void}
*/
InkAnnotation.prototype.destroy = function () {
this.newObject = null;
this.outputString = null;
this.mouseX = null;
this.mouseY = null;
this.inkAnnotationindex = null;
this.isAddAnnotationProgramatically = null;
this.currentPageNumber = null;
this.inkAnnotationInitialZoom = null;
this.inkPathDataCollection = null;
};
/**
* @param {any} currentAnnotation - It describes about the current annotation
* @param {number} pageIndex - It describes about the page index value
* @param {boolean} isImport - It ensures whether the isImport is true or not
* @private
* @returns {any} - any
*/
InkAnnotation.prototype.updateInkCollections = function (currentAnnotation, pageIndex, isImport) {
var annot;
if (currentAnnotation) {
var bounds = currentAnnotation.Bounds;
var currentLeft = (bounds.X);
var currentTop = (bounds.Y);
var currentWidth = (bounds.Width);
var currentHeight = (bounds.Height);
var customData = currentAnnotation.customData;
var isPrint = currentAnnotation.isPrint;
currentAnnotation.AllowedInteractions = currentAnnotation.AllowedInteractions ?
currentAnnotation.AllowedInteractions : this.pdfViewer.annotationModule.
updateAnnotationAllowedInteractions(currentAnnotation);
currentAnnotation.AnnotationSettings = currentAnnotation.AnnotationSettings ?
currentAnnotation.AnnotationSettings : this.pdfViewer.inkAnnotationSettings ?
this.pdfViewer.inkAnnotationSettings : this.pdfViewer.annotationSettings;
if (currentAnnotation.IsLocked) {
currentAnnotation.AnnotationSettings.isLock = currentAnnotation.IsLocked;
}
var data = currentAnnotation.PathData;
if (isImport) {
data = getPathString(JSON.parse(currentAnnotation.PathData));
}
annot = {
id: 'ink' + this.pdfViewerBase.signatureCount, bounds: { x: currentLeft, y: currentTop, width: currentWidth, height: currentHeight }, pageIndex: pageIndex, data: data,
shapeAnnotationType: 'Ink', opacity: currentAnnotation.Opacity, strokeColor: currentAnnotation.StrokeColor, thickness: currentAnnotation.Thickness, annotationId: currentAnnotation.AnnotName,
customData: customData, comments: this.pdfViewer.annotationModule.
getAnnotationComments(currentAnnotation.Comments, currentAnnotation, currentAnnotation.Author),
author: currentAnnotation.Author, allowedInteractions: currentAnnotation.AllowedInteractions,
subject: currentAnnotation.Subject, modifiedDate: currentAnnotation.ModifiedDate,
review: { state: '', stateModel: '', modifiedDate: currentAnnotation.ModifiedDate, author: currentAnnotation.Author }, notes: currentAnnotation.Note, isPrint: isPrint, isCommentLock: currentAnnotation.IsCommentLock, annotationSettings: currentAnnotation.AnnotationSettings, isLocked: currentAnnotation.AnnotationSettings.isLock
};
return annot;
}
};
/**
* This method used to add annotations with using program.
*
* @param {InkAnnotationSettings} annotationObject - It describes type of annotation object
* @param {IPoint} offset - It describes about the annotation bounds or location
* @param {number} pageNumber - It describes about the annotation page number
* @returns {object} - onject
* @private
*/
InkAnnotation.prototype.updateAddAnnotationDetails = function (annotationObject, offset, pageNumber) {
//Creating new object if annotationObject is null
if (!annotationObject) {
annotationObject = { offset: { x: 10, y: 10 }, pageNumber: 0, width: undefined, height: undefined };
offset = annotationObject.offset;
}
else if (!annotationObject.offset) {
offset = { x: 10, y: 10 };
}
else {
offset = annotationObject.offset;
}
//Creating the CurrentDate and Annotation name
var currentDateString = this.pdfViewer.annotation.stickyNotesAnnotationModule.getDateAndTime();
var annotationName = this.pdfViewer.annotation.createGUID();
//Creating annotation settings
var annotationSelectorSettings = this.pdfViewer.inkAnnotationSettings.annotationSelectorSettings;
this.pdfViewerBase.updateSelectorSettings(annotationSelectorSettings);
var annotationSettings = this.pdfViewer.annotationModule.updateSettings(this.pdfViewer.inkAnnotationSettings);
annotationObject.author = annotationObject.author ? annotationObject.author : this.pdfViewer.annotationModule.updateAnnotationAuthor('ink', annotationSettings.AnnotationType);
var allowedInteractions = this.pdfViewer.inkAnnotationSettings.allowedInteractions ?
this.pdfViewer.inkAnnotationSettings.allowedInteractions : this.pdfViewer.annotationSettings.allowedInteractions;
annotationSettings.isLock = annotationObject.isLock ? annotationObject.isLock : annotationSettings.isLock;
annotationObject.width = annotationObject.width ? annotationObject.width : 150;
annotationObject.height = annotationObject.height ? annotationObject.height : 60;
var pathData = annotationObject.path ? annotationObject.path : '';
if (!isNullOrUndefined(pathData)) {
// Check whether the given path of the ink annotation is starts with Move path or Line path.
if (pathData[0] === 'M' || pathData[0] === 'L') {
var collectionData = processPathData(pathData);
var csData = splitArrayCollection(collectionData);
pathData = JSON.stringify(csData);
}
else {
pathData = getPathString(JSON.parse(pathData));
}
}
annotationObject.path = pathData;
//Creating Annotation objects with it's proper properties
var signatureInkAnnotation = [];
var ink = {
AllowedInteractions: annotationObject.allowedInteractions ? annotationObject.allowedInteractions : allowedInteractions,
AnnotName: annotationName,
AnnotType: 'ink',
AnnotationFlags: null,
AnnotationSelectorSettings: annotationObject.annotationSelectorSettings ?
annotationObject.annotationSelectorSettings : annotationSelectorSettings,
AnnotationSettings: annotationSettings,
AnnotationType: 'Ink',
Author: annotationObject.author ? annotationObject.author : 'Guest',
Bounds: { X: offset.x, Y: offset.y, Width: annotationObject.width, Height: annotationObject.height,
Left: offset.x, Top: offset.y, Location: { X: offset.x, Y: offset.y },
Size: { Height: annotationObject.height, IsEmpty: false, Width: annotationObject.width } },
Comments: null,
CreatedDate: currentDateString,
CustomData: annotationObject.customData ? annotationObject.customData : null,
ExistingCustomData: null,
IsCommentLock: false,
IsLock: annotationObject.isLock ? annotationObject.isLock : false,
IsPrint: !isNullOrUndefined(annotationObject.isPrint) ? annotationObject.isPrint : true,
ModifiedDate: '',
Note: '',
Opacity: annotationObject.opacity ? annotationObject.opacity : 1,
PathData: annotationObject.path,
PageNumber: pageNumber,
State: '',
StateModel: '',
StrokeColor: annotationObject.strokeColor ? annotationObject.strokeColor : 'rgba(255,0,0,1)',
SubType: null,
Subject: annotationObject.subject ? annotationObject.subject : 'Ink',
Type: null,
Thickness: annotationObject.thickness ? annotationObject.thickness : 1
};
//Adding the annotation object to an array and return it
signatureInkAnnotation[0] = ink;
return { signatureInkAnnotation: signatureInkAnnotation };
};
return InkAnnotation;
}());
export { InkAnnotation };