Files
DocumentServer-v-9.2.0/sdkjs/pdf/build/api.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

290 lines
8.4 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* 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
*
*/
(function(){
function setCanvasSize(element, width, height, is_correction)
{
if (element.width === width && element.height === height)
return;
if (true !== is_correction)
{
element.width = width;
element.height = height;
return;
}
var data = element.getContext("2d").getImageData(0, 0, element.width, element.height);
element.width = width;
element.height = height;
element.getContext("2d").putImageData(data, 0, 0);
};
AscCommon.calculateCanvasSize = function(element, is_correction, is_wait_correction)
{
if (true !== is_correction && undefined !== element.correctionTimeout)
{
clearTimeout(element.correctionTimeout);
element.correctionTimeout = undefined;
}
var scale = AscCommon.AscBrowser.retinaPixelRatio;
if (Math.abs(scale - (scale >> 0)) < 0.001)
{
setCanvasSize(element,
scale * parseInt(element.style.width),
scale * parseInt(element.style.height),
is_correction);
return;
}
var rect = element.getBoundingClientRect();
var isCorrectRect = (rect.width === 0 && rect.height === 0) ? false : true;
if (is_wait_correction || !isCorrectRect)
{
var isNoVisibleElement = false;
if (element.style.display === "none")
isNoVisibleElement = true;
else if (element.parentNode && element.parentNode.style.display === "none")
isNoVisibleElement = true;
if (!isNoVisibleElement)
{
element.correctionTimeout = setTimeout(function (){
AscCommon.calculateCanvasSize(element, true);
}, 100);
}
if (!isCorrectRect)
{
var style_width = parseInt(element.style.width);
var style_height = parseInt(element.style.height);
rect = {
x: 0, left: 0,
y: 0, top: 0,
width: style_width, right: style_width,
height: style_height, bottom: style_height
};
}
}
setCanvasSize(element,
Math.round(scale * rect.right) - Math.round(scale * rect.left),
Math.round(scale * rect.bottom) - Math.round(scale * rect.top),
is_correction);
};
function loadScript(url, onSuccess, onError)
{
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.onload = onSuccess;
script.onerror = onError;
document.head.appendChild(script);
}
var documentScriptUrl = document.currentScript ? document.currentScript.src : "";
function CViewer(parent, options)
{
this.isLoadAllFonts = (AscFonts.g_font_files.length > 1) ? true : false;
this.allFontsUrl = "";
this.fontsErrorCounter = 0;
this.fontsErrorMax = 3;
this.options = options;
this.api = this.checkOptions();
this.viewer = new AscCommon.CViewer(parent, this.api);
}
CViewer.prototype.isInitFonts = false;
CViewer.prototype["open"] = function(data)
{
if (!this.isLoadAllFonts && this.allFontsUrl !== "")
{
this.data = data;
this.checkFonts();
return;
}
this.initFonts();
this.viewer.open(data);
};
CViewer.prototype["createThumbnails"] = function(parent)
{
var oThumbnails = new AscCommon.ThumbnailsControl(parent)
this.viewer.setThumbnailsControl(oThumbnails);
return oThumbnails;
};
CViewer.prototype["registerEvent"] = function(name, callback)
{
this.viewer.registerEvent(name, callback);
};
CViewer.prototype["resize"] = function()
{
this.viewer.resize();
};
CViewer.prototype["navigate"] = function(node)
{
return this.viewer.navigate(node);
};
CViewer.prototype["getEngine"] = function()
{
return this.viewer;
};
// private
CViewer.prototype.initFonts = function()
{
if (!this.isInitFonts)
{
this.isInitFonts = true;
AscFonts.checkAllFonts();
AscFonts.g_fontApplication.Init();
AscCommon.g_font_loader.fontFiles = AscFonts.g_font_files;
AscCommon.g_font_loader.fontInfos = AscFonts.g_font_infos;
AscCommon.g_font_loader.map_font_index = AscFonts.g_map_font_index;
}
};
CViewer.prototype.checkFonts = function()
{
var onSuccess = function() {
this.isLoadAllFonts = true;
this.open(this.data);
delete this.data;
};
var onError = function() {
this.fontsErrorCounter++;
if (this.fontsErrorCounter === this.fontsErrorMax)
{
console.error("cannot load AllFonts.js");
return;
}
this.checkFonts();
};
loadScript(this.allFontsUrl, onSuccess.bind(this), onError.bind(this));
};
CViewer.prototype.checkOptions = function()
{
if (this.options)
{
var sAllFontsUrl = "";
var sModuleUrl = "";
var sFontsPath = "";
if (this.options["sdkjsPath"])
{
sAllFontsUrl = this.options["sdkjsPath"] + "/common/AllFonts.js";
sModuleUrl = this.options["sdkjsPath"] + "/pdf/src/engine/";
sFontsPath = this.options["sdkjsPath"] + "/../fonts/"
}
if (this.options["enginePath"])
sModuleUrl = this.options["enginePath"];
if (this.options["fontsPath"])
sFontsPath = this.options["fontsPath"];
if (documentScriptUrl !== "")
{
var scriptDirectory = documentScriptUrl;
scriptDirectory = scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/") + 1);
if (sAllFontsUrl === "")
sAllFontsUrl = scriptDirectory + "../../../common/AllFonts.js";
if (sModuleUrl === "")
sModuleUrl = scriptDirectory;
if (sFontsPath === "")
sFontsPath = scriptDirectory + "../../../../fonts/";
}
this.allFontsUrl = sAllFontsUrl;
if (sModuleUrl !== "")
window["AscViewer"]["baseEngineUrl"] = sModuleUrl;
if (sFontsPath !== "")
AscCommon.g_font_loader.fontFilesPath = sFontsPath;
if (this.options["theme"])
AscCommon.updateGlobalSkin(this.options["theme"]);
}
return {
isMobileVersion : false,
isSeparateModule : true,
baseFontsPath : (this.options && this.options["fontsPath"]) ? this.options["fontsPath"] : undefined,
getPageBackgroundColor : function() {
// TODO: get color from theme
if (this.isDarkMode)
return { R: 0x3A, G : 0x3A, B : 0x3A };
return { R: 0xFF, G : 0xFF, B : 0xFF };
},
WordControl : {
NoneRepaintPages : false
},
sendEvent : function() {
}
};
};
CViewer.prototype["setZoomMode"] = function(value) { this.viewer && this.viewer.setZoomMode(value); };
CViewer.prototype["getZoom"] = function() { return this.viewer ? (this.viewer.zoom * 100) : 100; };
CViewer.prototype["setZoom"] = function(value) { this.viewer && this.viewer.setZoom(value / 100); };
CViewer.prototype["setTargetType"] = function(value) { this.viewer && this.viewer.setTargetType(value); };
CViewer.prototype["rotatePage"] = function(page, angle, ismultiply) { this.viewer && this.viewer.setRotatePage(page, angle, ismultiply); };
CViewer.prototype["close"] = function() { this.viewer && this.viewer.close(); };
window["AscViewer"] = window["AscViewer"] || {};
window["AscViewer"]["CViewer"] = CViewer;
window["AscViewer"]["checkApplicationScale"] = function()
{
var zoomValue = AscCommon.checkDeviceScale();
AscCommon.AscBrowser.retinaPixelRatio = zoomValue.applicationPixelRatio;
AscCommon.AscBrowser.zoom = zoomValue.zoom;
AscCommon.correctApplicationScale(zoomValue);
};
})();