all files / pdfviewer/base/ pdfviewer-utlis.js

14.09% Statements 21/149
3.85% Branches 4/104
6.25% Functions 2/32
20% Lines 21/105
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152                                                                                                                                                                                                                                                                      
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
define(["require", "exports", "@syncfusion/ej2-base", "@syncfusion/ej2-pdf"], function (require, exports, ej2_base_1, ej2_pdf_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var PdfViewerUtils = (function () {
        function PdfViewerUtils() {
        }
        PdfViewerUtils.isSupportedFont = function (text, font) {
            try {
                if (!ej2_base_1.isNullOrUndefined(text) && !ej2_base_1.isNullOrUndefined(font)) {
                    for (var i = 0; i < text.length; i++) {
                        var ch = text[parseInt(i.toString(), 10)];
                        font._fontInternal._ttfReader._getGlyph(ch);
                        if (!font._fontInternal._ttfReader._isFontPresent) {
                            return font._fontInternal._ttfReader._isFontPresent;
                        }
                    }
                    return true;
                }
            }
            catch (e) {
                return false;
            }
            return false;
        };
        PdfViewerUtils.processFontStream = function (fontStream) {
            return fontStream instanceof Uint8Array ? this.convertByteArrayToBase64(fontStream) : fontStream;
        };
        PdfViewerUtils.fetchCustomFonts = function (customFonts, url) {
            var _this = this;
            var fontCollection = {};
            var fontPromises = customFonts.map(function (font) {
                var fontPath;
                if (font.startsWith('http://') || font.startsWith('https://')) {
                    fontPath = font;
                }
                else {
                    fontPath = url + "/" + font;
                }
                var parts = fontPath.split('/');
                var fileName = parts.pop() || '';
                if (Object.keys(fontCollection).indexOf(fileName) === -1) {
                    return _this.fetchData(fontPath).then(function (fontData) { return __awaiter(_this, void 0, void 0, function () {
                        var fallbackFontPath;
                        return __generator(this, function (_a) {
                            if (fontData) {
                                fontCollection[parts.indexOf('fallbackfonts') !== -1 ?
                                    'fallbackfonts_' + fileName.toLowerCase() : fileName.toLowerCase()] = fontData;
                            }
                            else {
                                fallbackFontPath = url + "/fallbackfonts/" + font;
                                return [2, this.fetchData(fallbackFontPath).then(function (fallbackData) {
                                        if (fallbackData) {
                                            fontCollection['fallbackfonts_' + fileName.toLowerCase()] = fallbackData;
                                        }
                                    })];
                            }
                            return [2];
                        });
                    }); });
                }
                return null;
            });
            return Promise.all(fontPromises).then(function () { return fontCollection; });
        };
        PdfViewerUtils.tryGetFontFromKeys = function (fontCollection, text, fontSize, fontStyle) {
            var keys = Object.keys(fontCollection);
            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
                var key = keys_1[_i];
                var fontStream = this.processFontStream(fontCollection["" + key]);
                var font = new ej2_pdf_1.PdfTrueTypeFont(fontStream, this.convertPixelToPoint(fontSize), fontStyle ? fontStyle : ej2_pdf_1.PdfFontStyle.regular);
                var glyphPresent = this.isSupportedFont(text, font);
                if (glyphPresent) {
                    return font;
                }
                font = null;
                fontStream = null;
            }
            return null;
        };
        PdfViewerUtils.getFontKey = function (fallbackFontCollection, fontFamily) {
            if (fallbackFontCollection["" + fontFamily] || fallbackFontCollection[fontFamily + '.ttf']) {
                return fallbackFontCollection["" + fontFamily] ? fontFamily : fontFamily + '.ttf';
            }
            var font = fontFamily.endsWith('.ttf') ? fontFamily : fontFamily + '.ttf';
            for (var key in fallbackFontCollection) {
                if (key.toLowerCase().endsWith(font.toLowerCase())) {
                    return key;
                }
            }
            return undefined;
        };
        PdfViewerUtils.fetchData = function (filePath) {
            return fetch(filePath)
                .then(function (response) {
                if (!response.ok) {
                    return null;
                }
                return response.arrayBuffer().then(function (buffer) { return new Uint8Array(buffer); });
            })
                .catch(function () { return null; });
        };
        PdfViewerUtils.convertByteArrayToBase64 = function (byteArray) {
            var binaryString = '';
            var byteArrayLength = byteArray.byteLength;
            for (var i = 0; i < byteArrayLength; i++) {
                binaryString += String.fromCharCode(byteArray[parseInt(i.toString(), 10)]);
            }
            return btoa(binaryString);
        };
        PdfViewerUtils.convertPixelToPoint = function (value) {
            return (value * 72 / 96);
        };
        return PdfViewerUtils;
    }());
    exports.PdfViewerUtils = PdfViewerUtils;
});