Files
DocumentServer-v-9.2.0/sdkjs/pdf/src/DrawingDocument.js
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

504 lines
22 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2023
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function (window) {
function CDrawingDocument()
{
AscCommon.CDrawingDocument.call(this);
var oThis = this;
this.DrawGuiCanvasTextProps = function(props) {
var bIsChange = false;
if (null == this.GuiLastTextProps)
{
bIsChange = true;
this.GuiLastTextProps = new Asc.asc_CParagraphProperty();
this.GuiLastTextProps.Subscript = props.Subscript;
this.GuiLastTextProps.Superscript = props.Superscript;
this.GuiLastTextProps.SmallCaps = props.SmallCaps;
this.GuiLastTextProps.AllCaps = props.AllCaps;
this.GuiLastTextProps.Strikeout = props.Strikeout;
this.GuiLastTextProps.DStrikeout = props.DStrikeout;
this.GuiLastTextProps.TextSpacing = props.TextSpacing;
this.GuiLastTextProps.Position = props.Position;
}
else
{
if (this.GuiLastTextProps.Subscript != props.Subscript)
{
this.GuiLastTextProps.Subscript = props.Subscript;
bIsChange = true;
}
if (this.GuiLastTextProps.Superscript != props.Superscript)
{
this.GuiLastTextProps.Superscript = props.Superscript;
bIsChange = true;
}
if (this.GuiLastTextProps.SmallCaps != props.SmallCaps)
{
this.GuiLastTextProps.SmallCaps = props.SmallCaps;
bIsChange = true;
}
if (this.GuiLastTextProps.AllCaps != props.AllCaps)
{
this.GuiLastTextProps.AllCaps = props.AllCaps;
bIsChange = true;
}
if (this.GuiLastTextProps.Strikeout != props.Strikeout)
{
this.GuiLastTextProps.Strikeout = props.Strikeout;
bIsChange = true;
}
if (this.GuiLastTextProps.DStrikeout != props.DStrikeout)
{
this.GuiLastTextProps.DStrikeout = props.DStrikeout;
bIsChange = true;
}
if (this.GuiLastTextProps.TextSpacing != props.TextSpacing)
{
this.GuiLastTextProps.TextSpacing = props.TextSpacing;
bIsChange = true;
}
if (this.GuiLastTextProps.Position != props.Position)
{
this.GuiLastTextProps.Position = props.Position;
bIsChange = true;
}
}
if (undefined !== this.GuiLastTextProps.Position && isNaN(this.GuiLastTextProps.Position))
this.GuiLastTextProps.Position = undefined;
if (undefined !== this.GuiLastTextProps.TextSpacing && isNaN(this.GuiLastTextProps.TextSpacing))
this.GuiLastTextProps.TextSpacing = undefined;
if (!bIsChange)
return;
AscFormat.ExecuteNoHistory(function(){
var _oldTurn = editor.isViewMode;
editor.isViewMode = true;
var docContent = new CDocumentContent(this.m_oWordControl.m_oLogicDocument, this.m_oWordControl.m_oDrawingDocument, 0, 0, 1000, 1000, false, false, true);
var par = docContent.Content[0];
par.MoveCursorToStartPos();
par.Set_Pr(new CParaPr());
var _textPr = new CTextPr();
_textPr.FontFamily = {Name : "Arial", Index : -1};
_textPr.FontSize = (AscCommon.AscBrowser.convertToRetinaValue(11 << 1, true) >> 0) * 0.5;
_textPr.RFonts.SetAll("Arial");
_textPr.Strikeout = this.GuiLastTextProps.Strikeout;
if (true === this.GuiLastTextProps.Subscript)
_textPr.VertAlign = AscCommon.vertalign_SubScript;
else if (true === this.GuiLastTextProps.Superscript)
_textPr.VertAlign = AscCommon.vertalign_SuperScript;
else
_textPr.VertAlign = AscCommon.vertalign_Baseline;
_textPr.DStrikeout = this.GuiLastTextProps.DStrikeout;
_textPr.Caps = this.GuiLastTextProps.AllCaps;
_textPr.SmallCaps = this.GuiLastTextProps.SmallCaps;
_textPr.Spacing = this.GuiLastTextProps.TextSpacing;
_textPr.Position = this.GuiLastTextProps.Position;
var parRun = new ParaRun(par);
parRun.Set_Pr(_textPr);
parRun.AddText("Hello World");
par.AddToContent(0, parRun);
docContent.Recalculate_Page(0, true);
var baseLineOffset = par.Lines[0].Y;
var _bounds = par.Get_PageBounds(0);
var ctx = this.GuiCanvasTextProps.getContext('2d');
var _wPx = this.GuiCanvasTextProps.width;
var _hPx = this.GuiCanvasTextProps.height;
var _wMm = _wPx * g_dKoef_pix_to_mm;
var _hMm = _hPx * g_dKoef_pix_to_mm;
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, _wPx, _hPx);
var _pxBoundsW = par.Lines[0].Ranges[0].W * g_dKoef_mm_to_pix;//(_bounds.Right - _bounds.Left) * g_dKoef_mm_to_pix;
var _pxBoundsH = (_bounds.Bottom - _bounds.Top) * g_dKoef_mm_to_pix;
if (this.GuiLastTextProps.Position !== undefined && this.GuiLastTextProps.Position != null && this.GuiLastTextProps.Position != 0)
{
// TODO: нужна высота без учета Position
// _pxBoundsH -= (this.GuiLastTextProps.Position * g_dKoef_mm_to_pix);
}
if (_pxBoundsH < _hPx && _pxBoundsW < _wPx)
{
// рисуем линию
var _lineY = (((_hPx + _pxBoundsH) / 2) >> 0) + 0.5;
var _lineW = (((_wPx - _pxBoundsW) / 4) >> 0);
ctx.strokeStyle = "#000000";
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(0, _lineY);
ctx.lineTo(_lineW, _lineY);
ctx.moveTo(_wPx - _lineW, _lineY);
ctx.lineTo(_wPx, _lineY);
ctx.stroke();
ctx.beginPath();
}
var _yOffset = (((_hPx + _pxBoundsH) / 2) - baseLineOffset * g_dKoef_mm_to_pix) >> 0;
var _xOffset = ((_wPx - _pxBoundsW) / 2) >> 0;
var graphics = new AscCommon.CGraphics();
graphics.init(ctx, _wPx, _hPx, _wMm, _hMm);
graphics.m_oFontManager = AscCommon.g_fontManager;
graphics.m_oCoordTransform.tx = _xOffset;
graphics.m_oCoordTransform.ty = _yOffset;
graphics.transform(1, 0, 0, 1, 0, 0);
var old_marks = this.m_oWordControl.m_oApi.ShowParaMarks;
this.m_oWordControl.m_oApi.ShowParaMarks = false;
par.Draw(0, graphics);
this.m_oWordControl.m_oApi.ShowParaMarks = old_marks;
editor.isViewMode = _oldTurn;
}, this, []);
};
this.DrawImageTextureFillTextArt = function(url) {
if (this.GuiCanvasFillTextureTextArt == null)
{
this.InitGuiCanvasTextArt(this.GuiCanvasFillTextureParentIdTextArt);
}
if (this.GuiCanvasFillTextureTextArt == null || this.GuiCanvasFillTextureCtxTextArt == null || url == this.LastDrawingUrlTextArt)
return;
this.LastDrawingUrlTextArt = url;
var _width = this.GuiCanvasFillTextureTextArt.width;
var _height = this.GuiCanvasFillTextureTextArt.height;
this.GuiCanvasFillTextureCtxTextArt.clearRect(0, 0, _width, _height);
if (null == this.LastDrawingUrlTextArt)
return;
var _img = this.m_oWordControl.m_oApi.ImageLoader.map_image_index[AscCommon.getFullImageSrc2(this.LastDrawingUrlTextArt)];
if (_img != undefined && _img.Image != null && _img.Status != AscFonts.ImageLoadStatus.Loading)
{
var _x = 0;
var _y = 0;
var _w = Math.max(_img.Image.width, 1);
var _h = Math.max(_img.Image.height, 1);
var dAspect1 = _width / _height;
var dAspect2 = _w / _h;
_w = _width;
_h = _height;
if (dAspect1 >= dAspect2)
{
_w = dAspect2 * _height;
_x = (_width - _w) / 2;
}
else
{
_h = _w / dAspect2;
_y = (_height - _h) / 2;
}
this.GuiCanvasFillTextureCtxTextArt.drawImage(_img.Image, _x, _y, _w, _h);
}
else
{
this.GuiCanvasFillTextureCtxTextArt.lineWidth = 1;
this.GuiCanvasFillTextureCtxTextArt.beginPath();
this.GuiCanvasFillTextureCtxTextArt.moveTo(0, 0);
this.GuiCanvasFillTextureCtxTextArt.lineTo(_width, _height);
this.GuiCanvasFillTextureCtxTextArt.moveTo(_width, 0);
this.GuiCanvasFillTextureCtxTextArt.lineTo(0, _height);
this.GuiCanvasFillTextureCtxTextArt.strokeStyle = "#FF0000";
this.GuiCanvasFillTextureCtxTextArt.stroke();
this.GuiCanvasFillTextureCtxTextArt.beginPath();
this.GuiCanvasFillTextureCtxTextArt.moveTo(0, 0);
this.GuiCanvasFillTextureCtxTextArt.lineTo(_width, 0);
this.GuiCanvasFillTextureCtxTextArt.lineTo(_width, _height);
this.GuiCanvasFillTextureCtxTextArt.lineTo(0, _height);
this.GuiCanvasFillTextureCtxTextArt.closePath();
this.GuiCanvasFillTextureCtxTextArt.strokeStyle = "#000000";
this.GuiCanvasFillTextureCtxTextArt.stroke();
this.GuiCanvasFillTextureCtxTextArt.beginPath();
}
};
this.InitGuiCanvasTextArt = function(div_id) {
if (null != this.GuiCanvasFillTextureTextArt)
{
var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentIdTextArt);
if (!_div_elem)
_div_elem.removeChild(this.GuiCanvasFillTextureTextArt);
this.GuiCanvasFillTextureTextArt = null;
this.GuiCanvasFillTextureCtxTextArt = null;
}
this.GuiCanvasFillTextureParentIdTextArt = div_id;
var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentIdTextArt);
if (!_div_elem)
return;
this.GuiCanvasFillTextureTextArt = document.createElement('canvas');
this.GuiCanvasFillTextureTextArt.width = parseInt(_div_elem.style.width);
this.GuiCanvasFillTextureTextArt.height = parseInt(_div_elem.style.height);
this.LastDrawingUrlTextArt = "";
this.GuiCanvasFillTextureCtxTextArt = this.GuiCanvasFillTextureTextArt.getContext('2d');
_div_elem.appendChild(this.GuiCanvasFillTextureTextArt);
};
this.InitGuiCanvasShape = function (div_id) {
if (null != this.GuiCanvasFillTexture)
{
var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentId);
if (_div_elem)
_div_elem.removeChild(this.GuiCanvasFillTexture);
this.GuiCanvasFillTexture = null;
this.GuiCanvasFillTextureCtx = null;
}
this.GuiCanvasFillTextureParentId = div_id;
var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentId);
if (!_div_elem)
return;
this.GuiCanvasFillTexture = document.createElement('canvas');
this.GuiCanvasFillTexture.width = parseInt(_div_elem.style.width);
this.GuiCanvasFillTexture.height = parseInt(_div_elem.style.height);
this.LastDrawingUrl = "";
this.GuiCanvasFillTextureCtx = this.GuiCanvasFillTexture.getContext('2d');
_div_elem.appendChild(this.GuiCanvasFillTexture);
};
this.DrawTarget = function() {
let oDoc = Asc.editor.getPDFDoc();
let oActiveObj = oDoc.GetActiveObject();
let isViewObject = oActiveObj && (oActiveObj.IsAnnot() || oActiveObj.IsForm());
if (oThis.NeedTarget) {
let isActive = true;
let api = oThis.m_oWordControl.m_oApi;
if (!oThis.m_oWordControl.IsFocus)
isActive = false;
else if (oThis.m_oWordControl.m_oApi.isBlurEditor)
isActive = false;
else if (api.isViewMode || (api.isRestrictionView() && !isViewObject))
isActive = false;
if (isActive)
oThis.showTarget(!oThis.isShowTarget());
else
oThis.showTarget(true);
}
};
this.isHideTarget = function() {
let oDoc = Asc.editor.getPDFDoc();
let oActiveObj = oDoc.GetActiveObject();
let isViewObject = oActiveObj && (oActiveObj.IsAnnot() || oActiveObj.IsForm());
let api = this.m_oWordControl.m_oApi;
if (api.isViewMode || (api.isRestrictionView() && !api.isRestrictionForms() && !isViewObject))
return this.isHideTargetBeforeFirstClick;
return false;
};
this.TargetStart = function (bShowHide) {
if (this.m_lTimerTargetId != -1)
clearInterval(this.m_lTimerTargetId);
this.m_lTimerTargetId = setInterval(oThis.DrawTarget, 500);
this.showTarget(bShowHide);
};
this.Collaborative_UpdateTarget = function (_id, _shortId, _x, _y, _size, _page, _transform, is_from_paint) {
this.AutoShapesTrack.SetCurrentPage(_page, true);
let TextMatrix = this.AutoShapesTrack.transformPageMatrix(_transform);
if (is_from_paint !== true) {
this.CollaborativeTargetsUpdateTasks.push([_id, _shortId, _x, _y, _size, _page, _transform]);
return;
}
for (let i = 0; i < this.CollaborativeTargets.length; i++) {
if (_id == this.CollaborativeTargets[i].Id) {
this.CollaborativeTargets[i].CheckPosition(_x, _y, _size, _page, TextMatrix);
return;
}
}
let _target = new CDrawingCollaborativeTarget(this);
_target.Id = _id;
_target.ShortId = _shortId;
_target.CheckPosition(_x, _y, _size, _page, TextMatrix);
this.CollaborativeTargets[this.CollaborativeTargets.length] = _target;
};
this.OnRecalculatePage = function() {};
this.OnEndRecalculate = function() {};
this.ConvertCoordsToAnotherPage = function (x, y, pageCoord, pageNeed) {
return AscPDF.ConvertCoordsToAnotherPage(x, y, pageCoord, pageNeed);
}
this.CheckRasterImageOnScreen = function(src)
{
let redrawPages = [];
let viewer = this.m_oDocumentRenderer;
let thumbnails = viewer.thumbnails;
let thumbStartVisiblePage = thumbnails && thumbnails.getStartVisiblePage();
let thumbEndVisiblePage = thumbnails && thumbnails.getEndVisiblePage();
let startVisiblePage = thumbStartVisiblePage != undefined ? thumbStartVisiblePage : viewer.startVisiblePage;
let endVisiblePage = thumbEndVisiblePage != undefined ? thumbEndVisiblePage : viewer.endVisiblePage;
for (let i = startVisiblePage; i <= endVisiblePage; i++)
{
let imgs = viewer.DrawingObjects.getAllRasterImagesOnPage(i);
for (let j = 0, len = imgs.length; j < len; j++)
{
if (AscCommon.getFullImageSrc2(imgs[j]) === src)
{
redrawPages.push(i);
break;
}
}
}
if (redrawPages.length > 0)
{
viewer.onUpdatePages(redrawPages);
viewer.onRepaintForms(redrawPages);
}
};
// mouse events
this.checkMouseDown_Drawing = function(pos) {
let oWordControl = this.m_oWordControl;
let bIsReturn = false;
if (!this.isButtonsDisabled() && this.placeholders.onPointerDown(pos, this.m_arrPages[pos.Page].drawingPage, this.m_oLogicDocument.GetPageWidthMM(), this.m_oLogicDocument.GetPageHeightMM())) {
bIsReturn = true;
this.m_oWordControl.onMouseUpMainSimple();
}
if (bIsReturn) {
oWordControl.OnUpdateOverlay();
oWordControl.EndUpdateOverlay();
}
return bIsReturn;
};
this.checkMouseMove_Drawing = function(pos) {
let oWordControl = this.m_oWordControl;
let bIsReturn = false;
if (this.InlineTextTrackEnabled) {
if (-1 != oWordControl.m_oTimerScrollSelect) {
clearInterval(oWordControl.m_oTimerScrollSelect);
oWordControl.m_oTimerScrollSelect = -1;
}
this.InlineTextTrack = oWordControl.m_oLogicDocument.Get_NearestPos(pos.Page, pos.X, pos.Y, pos.isNotes);
this.InlineTextTrackPage = pos.Page;
this.InlineTextInNotes = pos.isNotes ? true : false;
bIsReturn = true;
} else {
if (!AscCommon.global_mouseEvent.IsLocked) {
if (!this.isButtonsDisabled() && this.placeholders.onPointerMove(pos, this.m_arrPages[pos.Page].drawingPage, this.m_oLogicDocument.GetPageWidthMM(), this.m_oLogicDocument.GetPageHeightMM())) {
oWordControl.OnUpdateOverlay();
oWordControl.EndUpdateOverlay();
bIsReturn = true;
}
}
}
if (bIsReturn) {
oWordControl.OnUpdateOverlay();
oWordControl.EndUpdateOverlay();
}
return bIsReturn;
};
this.checkMouseUp_Drawing = function(pos) {
let oWordControl = this.m_oWordControl;
let bIsReturn = false;
if (this.InlineTextTrackEnabled) {
this.InlineTextTrack = oWordControl.m_oLogicDocument.Get_NearestPos(pos.Page, pos.X, pos.Y, pos.isNotes);
this.InlineTextTrackPage = pos.Page;
this.InlineTextInNotes = pos.isNotes ? true : false;
this.EndTrackText();
bIsReturn = true;
} else if (!this.isButtonsDisabled() && this.placeholders.onPointerUp(pos, this.m_arrPages[pos.Page].drawingPage, this.m_oLogicDocument.GetPageWidthMM(), this.m_oLogicDocument.GetPageHeightMM()))
bIsReturn = true;
if (bIsReturn) {
oWordControl.OnUpdateOverlay();
oWordControl.EndUpdateOverlay();
}
return bIsReturn;
};
}
CDrawingDocument.prototype.constructor = CDrawingDocument;
window["AscPDF"].CDrawingDocument = CDrawingDocument;
})(window);