{"version":3,"sources":["kendo.pdf.js"],"names":["f","define","$","normalizeText","text","String","replace","REPLACE_REGEX","SPACE","objectKey","object","key","parts","push","sort","join","hashKey","str","i","hash","length","charCodeAt","zeroSize","width","height","baseline","measureText","style","measureBox","TextMetrics","current","measure","LRUCache","DEFAULT_OPTIONS","defaultMeasureBox","window","kendo","util","Class","extend","init","size","this","_size","_length","_map","put","value","map","entry","_head","_tail","newer","older","get","baselineMarkerSize","document","createElement","cssText","options","_cache","styleKey","cacheKey","cachedResult","baselineMarker","textStr","box","_baselineMarker","cloneNode","textContent","appendChild","body","offsetWidth","offsetHeight","offsetTop","parentNode","removeChild","marker","deepExtend","jQuery","amd","a1","a2","a3","pdf","supportsDeflate","pako","deflate","data","BinaryStream","eof","offset","readByte","writeByte","b","ensure","readShort","writeShort","w","readShort_","writeShort_","readLong","writeLong","readLong_","writeLong_","readFixed","writeFixed","Math","round","readFixed_","writeFixed_","read","len","times","readString","fromCharCode","apply","writeString","n","reader","ret","Array","write","slice","stream","HAS_TYPED_ARRAYS","Uint8Array","tmp","max","set","buffer","bytes","start","x","pos","skip","nbytes","toString","Error","saveExcursion","writeBase64","base64","atob","BASE64","decode","encode","ucs2decode","string","extra","output","counter","ucs2encode","array","atobUint8Array","idx","result","createUint8Array","base64ToUint8Array","hasOwnProperty$1","obj","Object","prototype","hasOwnProperty","call","sortedKeys","keys","a","parseFloat","Directory","tables","raw","scalerType","tableCount","searchRange","entrySelector","rangeShift","tag","checksum","deftable","methods","Ctor","file","def","definition","rawData","parse","nextSubsetTag","subsetTag","Subfont","font","subset","unicodes","ogid2ngid","0","ngid2ogid","ncid2ogid","next","firstChar","nextGid","psName","TTFFont","name","numFonts","self","contents","encodeUnit","codeUnit","encodeUTF16BE","input","c","lead","trail","makeOutput","out","num","arguments$1","arguments","undefined","PDFValue","beforeRender","render","isArray","renderArray","isDate","renderDate","isNaN","toFixed","indexOf","test","PDFDictionary","indentLevel","writeData","withIndent","indent","NL","pad","wrapObject","id","renderValue","renderFull","_offset","getPaperOptions","getOption","paperSize","margin","PAPER_SIZE","a4","toLowerCase","unitsToPoints","min","left","top","right","bottom","PDFDocument","defval","catalog","pageTree","nameTree","info","objcount","objects","attach","pages","FONTS","IMAGES","GRAD_COL_FUNCTIONS","GRAD_OPC_FUNCTIONS","GRAD_COL","GRAD_OPC","PDFCatalog","PDFPageTree","JavaScript","Names","PDFString","S","_","JS","props","setPages","Producer","Title","Author","Subject","Keywords","Creator","CreationDate","Date","addPage","content","page","paperOptions","contentWidth","contentHeight","PDFStream","Contents","Parent","MediaBox","PDFPage","_content","transform","translate","rect","clip","xrefOffset","zeropad","Size","Root","Info","loadBinary","url","cont","error","console","log","m","req","browser","msie","exec","substr","XMLHttpRequest","open","responseType","onload","status","response","VBArray","responseBody","toArray","onerror","send","loadFont","FONT_CACHE","clearImageCache","IMAGE_CACHE","loadImage","_load","img","src","complete","_onload","_onerror","_trycanvas","canvas","ctx","imgdata","hasAlpha","rgb","alpha","rawbytes","getContext","drawImage","getImageData","ex","bloburl","URL","revokeObjectURL","keepPNG","PDFRawImage","toDataURL","jpegQuality","PDFJpegImage","blob","type","FileReader","readAsArrayBuffer","xhr","Image","crossOrigin","createObjectURL","manyLoader","loadOne","urls","callback","ch","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","mm2pt","mm","cm2pt","cm","in2pt","inch","in","defclass","proto","Base","PDFName_cache","PDFName","colorSpace","bitsPerComponent","soi","ff","SOF_CODES","Type","Subtype","Width","Height","BitsPerComponent","Filter","ColorSpace","Decode","asStream","_resourceName","RESOURCE_COUNTER","mask","SMask","makeHash","cacheColorGradientFunction","r1","g1","b1","r2","g2","b2","func","FunctionType","Domain","Range","N","C0","C1","cacheOpacityGradientFunction","makeGradientFunctions","stops","assemble","funcs","Functions","Bounds","offsets","Encode","prev","cur","prevColor","curColor","opacities","colors","color","r","g","pop","cacheColorGradient","isRadial","coords","shading","concat","forEach","ShadingType","Coords","Function","Extend","cacheOpacityGradient","opacity","AIS","CA","ca","G","FormType","BBox","Group","CS","I","Resources","ExtGState","a0","Shading","s0","cacheGradient","gradient","y","end","userSpace","unquote","parseFontDef","fontdef","fontSize","rx","parseInt","italic","variant","bold","lineHeight","fontFamily","split","getFontURL","mkFamily","FONT_MAPPINGS","fontAlias","alias","defineFont","mmul","c1","d1","e1","f1","c2","d2","e2","f2","isIdentityMatrix","group","doIt","drawPage","addMargin","origin","optimize","bbox","root","getSize","getOrigin","drawing","kendoGeometry","Matrix","append","landscape","drawElement","count","producer","title","author","subject","keywords","creator","autoPrint","multiPage","children","fonts","images","imgDPI","traverse","element","dispatch","ceil","Text","loadFonts","loadImages","toBlob","Blob","saveAs$1","filename","proxy","supportBrowser","safari","saveAs","dataURI","fileName","dataURL","proxyURL","handlers","handler","nodeType","_pdfDebug","comment","save","setOpacity","setStrokeOptions","setFillOptions","matrix","d","e","setClipping","Path","drawPath","MultiPath","drawMultiPath","Circle","drawCircle","Arc","drawArc","drawText","drawGroup","Rect","drawRect","restore","dashType","lineCap","lineJoin","stroke","parseColor$1","setStrokeColor","setStrokeOpacity","setLineWidth","setDashPattern","DASH_PATTERNS","setLineCap","LINE_CAP","setLineJoin","LINE_JOIN","fill","Gradient","setFillColor","setFillOpacity","_drawPath","shouldDraw","thing","maybeGradient","tl","clipStroke","RadialGradient","center","radius","elements","stop","unshift","rawBBox","topLeft","maybeFillStroke","fillStroke","nop","maybeDrawRect","path","isRect","segments","closed","controlIn","anchor","seg","prevOut","controlOut","bezier","lineTo","moveTo","close","paths","geometry","circle","points","curvePoints","mode","_position","TEXT_RENDERING_MODE$1","fillAndStroke","beginText","setFont","setTextRenderingMode","showText","_pdfRect","endText","_pdfLink","addLink","sz","parseColor","toRGB","change","newShape","changed","visible","shape","optArray","el","opt","withClipping","saveclipbox","clipbox","savematrix","multiplyCopy","intersect","inClipbox","currentBox","union","unit","exportPDF","promise","createPromise","_ignoreMargin","resolve","exportPDFToBlob","support","kendoPdf","HeadTable","LocaTable","HheaTable","MaxpTable","HmtxTable","GlyfTable","NameTable","PostTable","CmapTable","OS2Table","BOM","PDFHexString","PDFStandardFont","PDFFont","PDFToUnicodeCmap","TEXT_RENDERING_MODE","version","keyStr","enc1","enc2","enc3","enc4","chr1","chr2","chr3","charAt","readTable","table","directoryLength","headOffset","tableData","sum","adjustment","this$1","maxpow2","pow","floor","LN2","revision","checkSumAdjustment","magicNumber","flags","unitsPerEm","created","modified","xMin","yMin","xMax","yMax","macStyle","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","format","head","offsetOf","lengthOf","needsLongFormat","ascent","descent","lineGap","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numOfLongHorMetrics","ids","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","glyphIds","dir","hhea","lsbCount","metrics","advance","lsb","maxp","leftSideBearings","forGlyph","SimpleGlyph","CompoundGlyph","idOffsets","MORE_COMPONENTS","ARG_1_AND_2_ARE_WORDS","WE_HAVE_A_TWO_BY_TWO","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_SCALE","compound","old2new","cache","glyphFor","loca","numberOfContours","glyph","glyphs","oldIds","NameEntry","platformID","platformSpecificID","languageID","nameID","stringOffset","nameRecords","strings","rec","postscriptEntry","postscriptName","strTable","list","j","strCount","POSTSCRIPT_GLYPHS","numberOfGlyphs","limit","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","code","index","mapping","indexes","post","CmapEntry","codeMap","segCount","endCode","startCode","idDelta","idRangeOffset","glyphId","ngroups","endCharCode","glyphCode","language","renderCharmap","new_gid","charcode","gid","delta","segCountX2","deltas","rangeOffsets","startGlyph","codes","startCodes","endCodes","last","diff","averageCharWidth","weightClass","widthClass","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","familyClass","panose","charRange","vendorID","selection","firstCharIndex","lastCharIndex","winAscent","winDescent","codePageRange","xHeight","capHeight","defaultChar","breakChar","maxContext","use","old_gid","reduce","cmap","encodeText","glyphsFor","glyf","new_gid_ids","old_gid_ids","lastChar","hmtx","OS/2","os2","directory","cidToGidMap","cid","scale","widthOfGlyph","makeSubset","a5","a6","a7","a8","a9","a10","b0","b3","b4","b5","b6","b7","b8","b9","b10","c0","c3","c4","c5","c6","c7","c8","c9","c10","executive","folio","legal","letter","tabloid","Times-Roman","Times-Bold","Times-Italic","Times-BoldItalic","Helvetica","Helvetica-Bold","Helvetica-Oblique","Helvetica-BoldOblique","Courier","Courier-Bold","Courier-Oblique","Courier-BoldOblique","Symbol","ZapfDingbats","getFont","getImage","getOpacityGS","forStroke","gs","_opacityGSCache","dict","utf16be","txt","escape","empty","compress","Length","pagesObj","Pages","Kids","Count","pageObj","BaseFont","Encoding","_pdf","_font","_sub","stemV","isSerif","isScript","getTextWidth","descendant","unimap","unimapStream","sub","fontStream","Length1","descriptor","FontName","FontBBox","Flags","StemV","ItalicAngle","Ascent","Descent","CapHeight","XHeight","FontFile2","charWidths","loop","chunk","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","FirstChar","LastChar","DW","W","CIDToGIDMap","_makeCidToGidMap","DescendantFonts","ToUnicode","unicode","_rcount","_textMode","_fontResources","_gsResources","_xResources","_patResources","_shResources","_opacity","_matrix","_annotations","_fontSize","_contextStack","ProcSet","Font","XObject","Pattern","Annots","_out","dx","dy","sx","sy","rotate","angle","cos","sin","_requireTextMode","_requireFont","setTextLeading","requestedWidth","outputWidth","showTextNL","uri","ll","_toPage","ur","Border","A","URI","sname","oname","dashArray","dashPhase","setMitterLimit","mitterLimit","_context","x1","y1","x2","y2","x3","y3","bezier1","bezier2","h","ellipse","ry","_X","v","_Y","k","closeStroke","line","val","p","serif","serif|bold","serif|italic","serif|bold|italic","sans-serif","sans-serif|bold","sans-serif|italic","sans-serif|bold|italic","monospace","monospace|bold","monospace|italic","monospace|bold|italic","zapfdingbats","zapfdingbats|bold","zapfdingbats|italic","zapfdingbats|bold|italic","invisible","fillAndClip","strokeAndClip","fillStrokeClip","dash","dashDot","dot","longDash","longDashDot","longDashDotDot","solid","butt","square","miter","bevel","Document","PDFMixin","events","saveAsPDF","_drawPDF","_drawPDFShadow","allPages","progress","Deferred","args","trigger","then","done","forceProxy","proxyTarget","fail","err","reject","drawDOM","wrapper","pageNumber","totalPages","notify","settings","drawOptions","shadow","defer","css","overflow","before","clone","setTimeout","always","remove"],"mappings":"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","file":"kendo.pdf.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('util/text-metrics', ['kendo.core'], f);\n}(function () {\n (function ($) {\n window.kendo.util = window.kendo.util || {};\n var LRUCache = kendo.Class.extend({\n init: function (size) {\n this._size = size;\n this._length = 0;\n this._map = {};\n },\n put: function (key, value) {\n var map = this._map;\n var entry = {\n key: key,\n value: value\n };\n map[key] = entry;\n if (!this._head) {\n this._head = this._tail = entry;\n } else {\n this._tail.newer = entry;\n entry.older = this._tail;\n this._tail = entry;\n }\n if (this._length >= this._size) {\n map[this._head.key] = null;\n this._head = this._head.newer;\n this._head.older = null;\n } else {\n this._length++;\n }\n },\n get: function (key) {\n var entry = this._map[key];\n if (entry) {\n if (entry === this._head && entry !== this._tail) {\n this._head = entry.newer;\n this._head.older = null;\n }\n if (entry !== this._tail) {\n if (entry.older) {\n entry.older.newer = entry.newer;\n entry.newer.older = entry.older;\n }\n entry.older = this._tail;\n entry.newer = null;\n this._tail.newer = entry;\n this._tail = entry;\n }\n return entry.value;\n }\n }\n });\n var REPLACE_REGEX = /\\r?\\n|\\r|\\t/g;\n var SPACE = ' ';\n function normalizeText(text) {\n return String(text).replace(REPLACE_REGEX, SPACE);\n }\n function objectKey(object) {\n var parts = [];\n for (var key in object) {\n parts.push(key + object[key]);\n }\n return parts.sort().join('');\n }\n function hashKey(str) {\n var hash = 2166136261;\n for (var i = 0; i < str.length; ++i) {\n hash += (hash << 1) + (hash << 4) + (hash << 7) + (hash << 8) + (hash << 24);\n hash ^= str.charCodeAt(i);\n }\n return hash >>> 0;\n }\n function zeroSize() {\n return {\n width: 0,\n height: 0,\n baseline: 0\n };\n }\n var DEFAULT_OPTIONS = { baselineMarkerSize: 1 };\n var defaultMeasureBox;\n if (typeof document !== 'undefined') {\n defaultMeasureBox = document.createElement('div');\n defaultMeasureBox.style.cssText = 'position: absolute !important; top: -4000px !important; width: auto !important; height: auto !important;' + 'padding: 0 !important; margin: 0 !important; border: 0 !important;' + 'line-height: normal !important; visibility: hidden !important; white-space: pre!important;';\n }\n var TextMetrics = kendo.Class.extend({\n init: function (options) {\n this._cache = new LRUCache(1000);\n this.options = $.extend({}, DEFAULT_OPTIONS, options);\n },\n measure: function (text, style, options) {\n if (options === void 0) {\n options = {};\n }\n if (!text) {\n return zeroSize();\n }\n var styleKey = objectKey(style);\n var cacheKey = hashKey(text + styleKey);\n var cachedResult = this._cache.get(cacheKey);\n if (cachedResult) {\n return cachedResult;\n }\n var size = zeroSize();\n var measureBox = options.box || defaultMeasureBox;\n var baselineMarker = this._baselineMarker().cloneNode(false);\n for (var key in style) {\n var value = style[key];\n if (typeof value !== 'undefined') {\n measureBox.style[key] = value;\n }\n }\n var textStr = options.normalizeText !== false ? normalizeText(text) : String(text);\n measureBox.textContent = textStr;\n measureBox.appendChild(baselineMarker);\n document.body.appendChild(measureBox);\n if (textStr.length) {\n size.width = measureBox.offsetWidth - this.options.baselineMarkerSize;\n size.height = measureBox.offsetHeight;\n size.baseline = baselineMarker.offsetTop + this.options.baselineMarkerSize;\n }\n if (size.width > 0 && size.height > 0) {\n this._cache.put(cacheKey, size);\n }\n measureBox.parentNode.removeChild(measureBox);\n return size;\n },\n _baselineMarker: function () {\n var marker = document.createElement('div');\n marker.style.cssText = 'display: inline-block; vertical-align: baseline;width: ' + this.options.baselineMarkerSize + 'px; height: ' + this.options.baselineMarkerSize + 'px;overflow: hidden;';\n return marker;\n }\n });\n TextMetrics.current = new TextMetrics();\n function measureText(text, style, measureBox) {\n return TextMetrics.current.measure(text, style, measureBox);\n }\n kendo.deepExtend(kendo.util, {\n LRUCache: LRUCache,\n TextMetrics: TextMetrics,\n measureText: measureText,\n objectKey: objectKey,\n hashKey: hashKey,\n normalizeText: normalizeText\n });\n }(window.kendo.jQuery));\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdf/pako', ['kendo.core'], f);\n}(function () {\n (function () {\n kendo.pdf = kendo.pdf || {};\n kendo.pdf.supportsDeflate = function () {\n return window.pako && typeof window.pako.deflate == 'function';\n };\n kendo.pdf.deflate = function (data) {\n return window.pako.deflate(data);\n };\n }());\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdf/core', [\n 'pdf/pako',\n 'kendo.core',\n 'kendo.color',\n 'kendo.drawing'\n ], f);\n}(function () {\n (function (kendo) {\n window.kendo.pdf = window.kendo.pdf || {};\n var support = kendo.support;\n var supportBrowser = support.browser;\n var kendoPdf = kendo.pdf;\n var drawing = kendo.drawing;\n var util = drawing.util;\n var kendoGeometry = kendo.geometry;\n var HAS_TYPED_ARRAYS = typeof Uint8Array !== 'undefined' && kendo.support.browser && (!kendo.support.browser.msie || kendo.support.browser.version > 9);\n var BASE64 = function () {\n var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n return {\n decode: function (str) {\n var input = str.replace(/[^A-Za-z0-9\\+\\/\\=]/g, ''), i = 0, n = input.length, output = [];\n while (i < n) {\n var enc1 = keyStr.indexOf(input.charAt(i++));\n var enc2 = keyStr.indexOf(input.charAt(i++));\n var enc3 = keyStr.indexOf(input.charAt(i++));\n var enc4 = keyStr.indexOf(input.charAt(i++));\n var chr1 = enc1 << 2 | enc2 >>> 4;\n var chr2 = (enc2 & 15) << 4 | enc3 >>> 2;\n var chr3 = (enc3 & 3) << 6 | enc4;\n output.push(chr1);\n if (enc3 != 64) {\n output.push(chr2);\n }\n if (enc4 != 64) {\n output.push(chr3);\n }\n }\n return output;\n },\n encode: function (bytes) {\n var i = 0, n = bytes.length;\n var output = '';\n while (i < n) {\n var chr1 = bytes[i++];\n var chr2 = bytes[i++];\n var chr3 = bytes[i++];\n var enc1 = chr1 >>> 2;\n var enc2 = (chr1 & 3) << 4 | chr2 >>> 4;\n var enc3 = (chr2 & 15) << 2 | chr3 >>> 6;\n var enc4 = chr3 & 63;\n if (i - n == 2) {\n enc3 = enc4 = 64;\n } else if (i - n == 1) {\n enc4 = 64;\n }\n output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n }\n return output;\n }\n };\n }();\n function BinaryStream(data) {\n var offset = 0, length = 0;\n if (data == null) {\n data = HAS_TYPED_ARRAYS ? new Uint8Array(256) : [];\n } else {\n length = data.length;\n }\n var ensure = HAS_TYPED_ARRAYS ? function (len) {\n if (len >= data.length) {\n var tmp = new Uint8Array(Math.max(len + 256, data.length * 2));\n tmp.set(data, 0);\n data = tmp;\n }\n } : function () {\n };\n var get = HAS_TYPED_ARRAYS ? function () {\n return new Uint8Array(data.buffer, 0, length);\n } : function () {\n return data;\n };\n var write = HAS_TYPED_ARRAYS ? function (bytes) {\n if (typeof bytes == 'string') {\n return writeString(bytes);\n }\n var len = bytes.length;\n ensure(offset + len);\n data.set(bytes, offset);\n offset += len;\n if (offset > length) {\n length = offset;\n }\n } : function (bytes) {\n if (typeof bytes == 'string') {\n return writeString(bytes);\n }\n for (var i = 0; i < bytes.length; ++i) {\n writeByte(bytes[i]);\n }\n };\n var slice = HAS_TYPED_ARRAYS ? function (start, length) {\n if (data.buffer.slice) {\n return new Uint8Array(data.buffer.slice(start, start + length));\n } else {\n var x = new Uint8Array(length);\n x.set(new Uint8Array(data.buffer, start, length));\n return x;\n }\n } : function (start, length) {\n return data.slice(start, start + length);\n };\n function eof() {\n return offset >= length;\n }\n function readByte() {\n return offset < length ? data[offset++] : 0;\n }\n function writeByte(b) {\n ensure(offset);\n data[offset++] = b & 255;\n if (offset > length) {\n length = offset;\n }\n }\n function readShort() {\n return readByte() << 8 | readByte();\n }\n function writeShort(w) {\n writeByte(w >> 8);\n writeByte(w);\n }\n function readShort_() {\n var w = readShort();\n return w >= 32768 ? w - 65536 : w;\n }\n function writeShort_(w) {\n writeShort(w < 0 ? w + 65536 : w);\n }\n function readLong() {\n return readShort() * 65536 + readShort();\n }\n function writeLong(w) {\n writeShort(w >>> 16 & 65535);\n writeShort(w & 65535);\n }\n function readLong_() {\n var w = readLong();\n return w >= 2147483648 ? w - 4294967296 : w;\n }\n function writeLong_(w) {\n writeLong(w < 0 ? w + 4294967296 : w);\n }\n function readFixed() {\n return readLong() / 65536;\n }\n function writeFixed(f) {\n writeLong(Math.round(f * 65536));\n }\n function readFixed_() {\n return readLong_() / 65536;\n }\n function writeFixed_(f) {\n writeLong_(Math.round(f * 65536));\n }\n function read(len) {\n return times(len, readByte);\n }\n function readString(len) {\n return String.fromCharCode.apply(String, read(len));\n }\n function writeString(str) {\n for (var i = 0; i < str.length; ++i) {\n writeByte(str.charCodeAt(i));\n }\n }\n function times(n, reader) {\n for (var ret = new Array(n), i = 0; i < n; ++i) {\n ret[i] = reader();\n }\n return ret;\n }\n var stream = {\n eof: eof,\n readByte: readByte,\n writeByte: writeByte,\n readShort: readShort,\n writeShort: writeShort,\n readLong: readLong,\n writeLong: writeLong,\n readFixed: readFixed,\n writeFixed: writeFixed,\n readShort_: readShort_,\n writeShort_: writeShort_,\n readLong_: readLong_,\n writeLong_: writeLong_,\n readFixed_: readFixed_,\n writeFixed_: writeFixed_,\n read: read,\n write: write,\n readString: readString,\n writeString: writeString,\n times: times,\n get: get,\n slice: slice,\n offset: function (pos) {\n if (pos != null) {\n offset = pos;\n return stream;\n }\n return offset;\n },\n skip: function (nbytes) {\n offset += nbytes;\n },\n toString: function () {\n throw new Error('FIX CALLER. BinaryStream is no longer convertible to string!');\n },\n length: function () {\n return length;\n },\n saveExcursion: function (f) {\n var pos = offset;\n try {\n return f();\n } finally {\n offset = pos;\n }\n },\n writeBase64: function (base64) {\n if (window.atob) {\n writeString(window.atob(base64));\n } else {\n write(BASE64.decode(base64));\n }\n },\n base64: function () {\n return BASE64.encode(get());\n }\n };\n return stream;\n }\n function ucs2decode(string) {\n var output = [], counter = 0, length = string.length, value, extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 55296 && value <= 56319 && counter < length) {\n extra = string.charCodeAt(counter++);\n if ((extra & 64512) == 56320) {\n output.push(((value & 1023) << 10) + (extra & 1023) + 65536);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n }\n function ucs2encode(array) {\n return array.map(function (value) {\n var output = '';\n if (value > 65535) {\n value -= 65536;\n output += String.fromCharCode(value >>> 10 & 1023 | 55296);\n value = 56320 | value & 1023;\n }\n output += String.fromCharCode(value);\n return output;\n }).join('');\n }\n function atobUint8Array(base64) {\n var data = window.atob(base64);\n var result = new Uint8Array(data.length);\n for (var idx = 0; idx < data.length; idx++) {\n result[idx] = data.charCodeAt(idx);\n }\n return result;\n }\n function createUint8Array(data) {\n var result = new Uint8Array(data.length);\n for (var idx = 0; idx < data.length; idx++) {\n result[idx] = data[idx];\n }\n return result;\n }\n function base64ToUint8Array(base64) {\n if (window.atob) {\n return atobUint8Array(base64);\n }\n return createUint8Array(BASE64.decode(base64));\n }\n function hasOwnProperty$1(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n function sortedKeys(obj) {\n return Object.keys(obj).sort(function (a, b) {\n return a - b;\n }).map(parseFloat);\n }\n function Directory(data) {\n this.raw = data;\n this.scalerType = data.readLong();\n this.tableCount = data.readShort();\n this.searchRange = data.readShort();\n this.entrySelector = data.readShort();\n this.rangeShift = data.readShort();\n var tables = this.tables = {};\n for (var i = 0; i < this.tableCount; ++i) {\n var entry = {\n tag: data.readString(4),\n checksum: data.readLong(),\n offset: data.readLong(),\n length: data.readLong()\n };\n tables[entry.tag] = entry;\n }\n }\n Directory.prototype = {\n readTable: function (name, Ctor) {\n var def = this.tables[name];\n if (!def) {\n throw new Error('Table ' + name + ' not found in directory');\n }\n return this[name] = def.table = new Ctor(this, def);\n },\n render: function (tables) {\n var this$1 = this;\n var tableCount = Object.keys(tables).length;\n var maxpow2 = Math.pow(2, Math.floor(Math.log(tableCount) / Math.LN2));\n var searchRange = maxpow2 * 16;\n var entrySelector = Math.floor(Math.log(maxpow2) / Math.LN2);\n var rangeShift = tableCount * 16 - searchRange;\n var out = BinaryStream();\n out.writeLong(this.scalerType);\n out.writeShort(tableCount);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n var directoryLength = tableCount * 16;\n var offset = out.offset() + directoryLength;\n var headOffset = null;\n var tableData = BinaryStream();\n for (var tag in tables) {\n if (hasOwnProperty$1(tables, tag)) {\n var table = tables[tag];\n out.writeString(tag);\n out.writeLong(this$1.checksum(table));\n out.writeLong(offset);\n out.writeLong(table.length);\n tableData.write(table);\n if (tag == 'head') {\n headOffset = offset;\n }\n offset += table.length;\n while (offset % 4) {\n tableData.writeByte(0);\n offset++;\n }\n }\n }\n out.write(tableData.get());\n var sum = this.checksum(out.get());\n var adjustment = 2981146554 - sum;\n out.offset(headOffset + 8);\n out.writeLong(adjustment);\n return out.get();\n },\n checksum: function (data) {\n data = BinaryStream(data);\n var sum = 0;\n while (!data.eof()) {\n sum += data.readLong();\n }\n return sum & 4294967295;\n }\n };\n function deftable(methods) {\n function Ctor(file, def) {\n this.definition = def;\n this.length = def.length;\n this.offset = def.offset;\n this.file = file;\n this.rawData = file.raw;\n this.parse(file.raw);\n }\n Ctor.prototype.raw = function () {\n return this.rawData.slice(this.offset, this.length);\n };\n for (var i in methods) {\n if (hasOwnProperty$1(methods, i)) {\n Ctor[i] = Ctor.prototype[i] = methods[i];\n }\n }\n return Ctor;\n }\n var HeadTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.revision = data.readLong();\n this.checkSumAdjustment = data.readLong();\n this.magicNumber = data.readLong();\n this.flags = data.readShort();\n this.unitsPerEm = data.readShort();\n this.created = data.read(8);\n this.modified = data.read(8);\n this.xMin = data.readShort_();\n this.yMin = data.readShort_();\n this.xMax = data.readShort_();\n this.yMax = data.readShort_();\n this.macStyle = data.readShort();\n this.lowestRecPPEM = data.readShort();\n this.fontDirectionHint = data.readShort_();\n this.indexToLocFormat = data.readShort_();\n this.glyphDataFormat = data.readShort_();\n },\n render: function (indexToLocFormat) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeLong(this.revision);\n out.writeLong(0);\n out.writeLong(this.magicNumber);\n out.writeShort(this.flags);\n out.writeShort(this.unitsPerEm);\n out.write(this.created);\n out.write(this.modified);\n out.writeShort_(this.xMin);\n out.writeShort_(this.yMin);\n out.writeShort_(this.xMax);\n out.writeShort_(this.yMax);\n out.writeShort(this.macStyle);\n out.writeShort(this.lowestRecPPEM);\n out.writeShort_(this.fontDirectionHint);\n out.writeShort_(indexToLocFormat);\n out.writeShort_(this.glyphDataFormat);\n return out.get();\n }\n });\n var LocaTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n var format = this.file.head.indexToLocFormat;\n if (format === 0) {\n this.offsets = data.times(this.length / 2, function () {\n return 2 * data.readShort();\n });\n } else {\n this.offsets = data.times(this.length / 4, data.readLong);\n }\n },\n offsetOf: function (id) {\n return this.offsets[id];\n },\n lengthOf: function (id) {\n return this.offsets[id + 1] - this.offsets[id];\n },\n render: function (offsets) {\n var out = BinaryStream();\n var needsLongFormat = offsets[offsets.length - 1] > 65535;\n for (var i = 0; i < offsets.length; ++i) {\n if (needsLongFormat) {\n out.writeLong(offsets[i]);\n } else {\n out.writeShort(offsets[i] / 2);\n }\n }\n return {\n format: needsLongFormat ? 1 : 0,\n table: out.get()\n };\n }\n });\n var HheaTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.advanceWidthMax = data.readShort();\n this.minLeftSideBearing = data.readShort_();\n this.minRightSideBearing = data.readShort_();\n this.xMaxExtent = data.readShort_();\n this.caretSlopeRise = data.readShort_();\n this.caretSlopeRun = data.readShort_();\n this.caretOffset = data.readShort_();\n data.skip(4 * 2);\n this.metricDataFormat = data.readShort_();\n this.numOfLongHorMetrics = data.readShort();\n },\n render: function (ids) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort_(this.ascent);\n out.writeShort_(this.descent);\n out.writeShort_(this.lineGap);\n out.writeShort(this.advanceWidthMax);\n out.writeShort_(this.minLeftSideBearing);\n out.writeShort_(this.minRightSideBearing);\n out.writeShort_(this.xMaxExtent);\n out.writeShort_(this.caretSlopeRise);\n out.writeShort_(this.caretSlopeRun);\n out.writeShort_(this.caretOffset);\n out.write([\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0\n ]);\n out.writeShort_(this.metricDataFormat);\n out.writeShort(ids.length);\n return out.get();\n }\n });\n var MaxpTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readLong();\n this.numGlyphs = data.readShort();\n this.maxPoints = data.readShort();\n this.maxContours = data.readShort();\n this.maxComponentPoints = data.readShort();\n this.maxComponentContours = data.readShort();\n this.maxZones = data.readShort();\n this.maxTwilightPoints = data.readShort();\n this.maxStorage = data.readShort();\n this.maxFunctionDefs = data.readShort();\n this.maxInstructionDefs = data.readShort();\n this.maxStackElements = data.readShort();\n this.maxSizeOfInstructions = data.readShort();\n this.maxComponentElements = data.readShort();\n this.maxComponentDepth = data.readShort();\n },\n render: function (glyphIds) {\n var out = BinaryStream();\n out.writeLong(this.version);\n out.writeShort(glyphIds.length);\n out.writeShort(this.maxPoints);\n out.writeShort(this.maxContours);\n out.writeShort(this.maxComponentPoints);\n out.writeShort(this.maxComponentContours);\n out.writeShort(this.maxZones);\n out.writeShort(this.maxTwilightPoints);\n out.writeShort(this.maxStorage);\n out.writeShort(this.maxFunctionDefs);\n out.writeShort(this.maxInstructionDefs);\n out.writeShort(this.maxStackElements);\n out.writeShort(this.maxSizeOfInstructions);\n out.writeShort(this.maxComponentElements);\n out.writeShort(this.maxComponentDepth);\n return out.get();\n }\n });\n var HmtxTable = deftable({\n parse: function (data) {\n data.offset(this.offset);\n var dir = this.file, hhea = dir.hhea;\n this.metrics = data.times(hhea.numOfLongHorMetrics, function () {\n return {\n advance: data.readShort(),\n lsb: data.readShort_()\n };\n });\n var lsbCount = dir.maxp.numGlyphs - dir.hhea.numOfLongHorMetrics;\n this.leftSideBearings = data.times(lsbCount, data.readShort_);\n },\n forGlyph: function (id) {\n var metrics = this.metrics;\n var n = metrics.length;\n if (id < n) {\n return metrics[id];\n }\n return {\n advance: metrics[n - 1].advance,\n lsb: this.leftSideBearings[id - n]\n };\n },\n render: function (glyphIds) {\n var this$1 = this;\n var out = BinaryStream();\n for (var i = 0; i < glyphIds.length; ++i) {\n var m = this$1.forGlyph(glyphIds[i]);\n out.writeShort(m.advance);\n out.writeShort_(m.lsb);\n }\n return out.get();\n }\n });\n var GlyfTable = function () {\n function SimpleGlyph(raw) {\n this.raw = raw;\n }\n SimpleGlyph.prototype = {\n compound: false,\n render: function () {\n return this.raw.get();\n }\n };\n var ARG_1_AND_2_ARE_WORDS = 1;\n var WE_HAVE_A_SCALE = 8;\n var MORE_COMPONENTS = 32;\n var WE_HAVE_AN_X_AND_Y_SCALE = 64;\n var WE_HAVE_A_TWO_BY_TWO = 128;\n function CompoundGlyph(data) {\n this.raw = data;\n var ids = this.glyphIds = [];\n var offsets = this.idOffsets = [];\n while (true) {\n var flags = data.readShort();\n offsets.push(data.offset());\n ids.push(data.readShort());\n if (!(flags & MORE_COMPONENTS)) {\n break;\n }\n data.skip(flags & ARG_1_AND_2_ARE_WORDS ? 4 : 2);\n if (flags & WE_HAVE_A_TWO_BY_TWO) {\n data.skip(8);\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n data.skip(4);\n } else if (flags & WE_HAVE_A_SCALE) {\n data.skip(2);\n }\n }\n }\n CompoundGlyph.prototype = {\n compound: true,\n render: function (old2new) {\n var this$1 = this;\n var out = BinaryStream(this.raw.get());\n for (var i = 0; i < this.glyphIds.length; ++i) {\n var id = this$1.glyphIds[i];\n out.offset(this$1.idOffsets[i]);\n out.writeShort(old2new[id]);\n }\n return out.get();\n }\n };\n return deftable({\n parse: function () {\n this.cache = {};\n },\n glyphFor: function (id) {\n var cache = this.cache;\n if (hasOwnProperty$1(cache, id)) {\n return cache[id];\n }\n var loca = this.file.loca;\n var length = loca.lengthOf(id);\n if (length === 0) {\n return cache[id] = null;\n }\n var data = this.rawData;\n var offset = this.offset + loca.offsetOf(id);\n var raw = BinaryStream(data.slice(offset, length));\n var numberOfContours = raw.readShort_();\n var xMin = raw.readShort_();\n var yMin = raw.readShort_();\n var xMax = raw.readShort_();\n var yMax = raw.readShort_();\n var glyph = cache[id] = numberOfContours == -1 ? new CompoundGlyph(raw) : new SimpleGlyph(raw);\n glyph.numberOfContours = numberOfContours;\n glyph.xMin = xMin;\n glyph.yMin = yMin;\n glyph.xMax = xMax;\n glyph.yMax = yMax;\n return glyph;\n },\n render: function (glyphs, oldIds, old2new) {\n var out = BinaryStream(), offsets = [];\n for (var i = 0; i < oldIds.length; ++i) {\n var id = oldIds[i];\n var glyph = glyphs[id];\n offsets.push(out.offset());\n if (glyph) {\n out.write(glyph.render(old2new));\n }\n }\n offsets.push(out.offset());\n return {\n table: out.get(),\n offsets: offsets\n };\n }\n });\n }();\n var NameTable = function () {\n function NameEntry(text, entry) {\n this.text = text;\n this.length = text.length;\n this.platformID = entry.platformID;\n this.platformSpecificID = entry.platformSpecificID;\n this.languageID = entry.languageID;\n this.nameID = entry.nameID;\n }\n return deftable({\n parse: function (data) {\n data.offset(this.offset);\n data.readShort();\n var count = data.readShort();\n var stringOffset = this.offset + data.readShort();\n var nameRecords = data.times(count, function () {\n return {\n platformID: data.readShort(),\n platformSpecificID: data.readShort(),\n languageID: data.readShort(),\n nameID: data.readShort(),\n length: data.readShort(),\n offset: data.readShort() + stringOffset\n };\n });\n var strings = this.strings = {};\n for (var i = 0; i < nameRecords.length; ++i) {\n var rec = nameRecords[i];\n data.offset(rec.offset);\n var text = data.readString(rec.length);\n if (!strings[rec.nameID]) {\n strings[rec.nameID] = [];\n }\n strings[rec.nameID].push(new NameEntry(text, rec));\n }\n this.postscriptEntry = strings[6][0];\n this.postscriptName = this.postscriptEntry.text.replace(/[^\\x20-\\x7F]/g, '');\n },\n render: function (psName) {\n var this$1 = this;\n var strings = this.strings;\n var strCount = 0;\n for (var i in strings) {\n if (hasOwnProperty$1(strings, i)) {\n strCount += strings[i].length;\n }\n }\n var out = BinaryStream();\n var strTable = BinaryStream();\n out.writeShort(0);\n out.writeShort(strCount);\n out.writeShort(6 + 12 * strCount);\n for (i in strings) {\n if (hasOwnProperty$1(strings, i)) {\n var list = i == 6 ? [new NameEntry(psName, this$1.postscriptEntry)] : strings[i];\n for (var j = 0; j < list.length; ++j) {\n var str = list[j];\n out.writeShort(str.platformID);\n out.writeShort(str.platformSpecificID);\n out.writeShort(str.languageID);\n out.writeShort(str.nameID);\n out.writeShort(str.length);\n out.writeShort(strTable.offset());\n strTable.writeString(str.text);\n }\n }\n }\n out.write(strTable.get());\n return out.get();\n }\n });\n }();\n var PostTable = function () {\n var POSTSCRIPT_GLYPHS = '.notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent ampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash zero one two three four five six seven eight nine colon semicolon less equal greater question at A B C D E F G H I J K L M N O P Q R S T U V W X Y Z bracketleft backslash bracketright asciicircum underscore grave a b c d e f g h i j k l m n o p q r s t u v w x y z braceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis Udieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave ecircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve ocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent sterling section bullet paragraph germandbls registered copyright trademark acute dieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu partialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash questiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft guillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash quotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis fraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered quotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis Egrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute Ucircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla hungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth eth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior onehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla Cacute cacute Ccaron ccaron dcroat'.split(/\\s+/g);\n return deftable({\n parse: function (data) {\n var this$1 = this;\n data.offset(this.offset);\n this.format = data.readLong();\n this.italicAngle = data.readFixed_();\n this.underlinePosition = data.readShort_();\n this.underlineThickness = data.readShort_();\n this.isFixedPitch = data.readLong();\n this.minMemType42 = data.readLong();\n this.maxMemType42 = data.readLong();\n this.minMemType1 = data.readLong();\n this.maxMemType1 = data.readLong();\n var numberOfGlyphs;\n switch (this.format) {\n case 65536:\n case 196608:\n break;\n case 131072:\n numberOfGlyphs = data.readShort();\n this.glyphNameIndex = data.times(numberOfGlyphs, data.readShort);\n this.names = [];\n var limit = this.offset + this.length;\n while (data.offset() < limit) {\n this$1.names.push(data.readString(data.readByte()));\n }\n break;\n case 151552:\n numberOfGlyphs = data.readShort();\n this.offsets = data.read(numberOfGlyphs);\n break;\n case 262144:\n this.map = data.times(this.file.maxp.numGlyphs, data.readShort);\n break;\n }\n },\n glyphFor: function (code) {\n switch (this.format) {\n case 65536:\n return POSTSCRIPT_GLYPHS[code] || '.notdef';\n case 131072:\n var index = this.glyphNameIndex[code];\n if (index < POSTSCRIPT_GLYPHS.length) {\n return POSTSCRIPT_GLYPHS[index];\n }\n return this.names[index - POSTSCRIPT_GLYPHS.length] || '.notdef';\n case 151552:\n case 196608:\n return '.notdef';\n case 262144:\n return this.map[code] || 65535;\n }\n },\n render: function (mapping) {\n var this$1 = this;\n if (this.format == 196608) {\n return this.raw();\n }\n var out = BinaryStream(this.rawData.slice(this.offset, 32));\n out.writeLong(131072);\n out.offset(32);\n var indexes = [];\n var strings = [];\n for (var i = 0; i < mapping.length; ++i) {\n var id = mapping[i];\n var post = this$1.glyphFor(id);\n var index = POSTSCRIPT_GLYPHS.indexOf(post);\n if (index >= 0) {\n indexes.push(index);\n } else {\n indexes.push(POSTSCRIPT_GLYPHS.length + strings.length);\n strings.push(post);\n }\n }\n out.writeShort(mapping.length);\n for (i = 0; i < indexes.length; ++i) {\n out.writeShort(indexes[i]);\n }\n for (i = 0; i < strings.length; ++i) {\n out.writeByte(strings[i].length);\n out.writeString(strings[i]);\n }\n return out.get();\n }\n });\n }();\n var CmapTable = function () {\n function CmapEntry(data, offset, codeMap) {\n var self = this;\n self.platformID = data.readShort();\n self.platformSpecificID = data.readShort();\n self.offset = offset + data.readLong();\n data.saveExcursion(function () {\n var code;\n data.offset(self.offset);\n self.format = data.readShort();\n switch (self.format) {\n case 0:\n self.length = data.readShort();\n self.language = data.readShort();\n for (var i = 0; i < 256; ++i) {\n codeMap[i] = data.readByte();\n }\n break;\n case 4:\n self.length = data.readShort();\n self.language = data.readShort();\n var segCount = data.readShort() / 2;\n data.skip(6);\n var endCode = data.times(segCount, data.readShort);\n data.skip(2);\n var startCode = data.times(segCount, data.readShort);\n var idDelta = data.times(segCount, data.readShort_);\n var idRangeOffset = data.times(segCount, data.readShort);\n var count = (self.length + self.offset - data.offset()) / 2;\n var glyphIds = data.times(count, data.readShort);\n for (i = 0; i < segCount; ++i) {\n var start = startCode[i], end = endCode[i];\n for (code = start; code <= end; ++code) {\n var glyphId;\n if (idRangeOffset[i] === 0) {\n glyphId = code + idDelta[i];\n } else {\n var index = idRangeOffset[i] / 2 - (segCount - i) + (code - start);\n glyphId = glyphIds[index] || 0;\n if (glyphId !== 0) {\n glyphId += idDelta[i];\n }\n }\n codeMap[code] = glyphId & 65535;\n }\n }\n break;\n case 6:\n self.length = data.readShort();\n self.language = data.readShort();\n code = data.readShort();\n var length = data.readShort();\n while (length-- > 0) {\n codeMap[code++] = data.readShort();\n }\n break;\n case 12:\n data.readShort();\n self.length = data.readLong();\n self.language = data.readLong();\n var ngroups = data.readLong();\n while (ngroups-- > 0) {\n code = data.readLong();\n var endCharCode = data.readLong();\n var glyphCode = data.readLong();\n while (code <= endCharCode) {\n codeMap[code++] = glyphCode++;\n }\n }\n break;\n default:\n if (window.console) {\n window.console.error('Unhandled CMAP format: ' + self.format);\n }\n }\n });\n }\n function renderCharmap(ncid2ogid, ogid2ngid) {\n var codes = sortedKeys(ncid2ogid);\n var startCodes = [];\n var endCodes = [];\n var last = null;\n var diff = null;\n function new_gid(charcode) {\n return ogid2ngid[ncid2ogid[charcode]];\n }\n for (var i = 0; i < codes.length; ++i) {\n var code = codes[i];\n var gid = new_gid(code);\n var delta = gid - code;\n if (last == null || delta !== diff) {\n if (last) {\n endCodes.push(last);\n }\n startCodes.push(code);\n diff = delta;\n }\n last = code;\n }\n if (last) {\n endCodes.push(last);\n }\n endCodes.push(65535);\n startCodes.push(65535);\n var segCount = startCodes.length;\n var segCountX2 = segCount * 2;\n var searchRange = 2 * Math.pow(2, Math.floor(Math.log(segCount) / Math.LN2));\n var entrySelector = Math.log(searchRange / 2) / Math.LN2;\n var rangeShift = segCountX2 - searchRange;\n var deltas = [];\n var rangeOffsets = [];\n var glyphIds = [];\n for (i = 0; i < segCount; ++i) {\n var startCode = startCodes[i];\n var endCode = endCodes[i];\n if (startCode == 65535) {\n deltas.push(0);\n rangeOffsets.push(0);\n break;\n }\n var startGlyph = new_gid(startCode);\n if (startCode - startGlyph >= 32768) {\n deltas.push(0);\n rangeOffsets.push(2 * (glyphIds.length + segCount - i));\n for (var j = startCode; j <= endCode; ++j) {\n glyphIds.push(new_gid(j));\n }\n } else {\n deltas.push(startGlyph - startCode);\n rangeOffsets.push(0);\n }\n }\n var out = BinaryStream();\n out.writeShort(3);\n out.writeShort(1);\n out.writeLong(12);\n out.writeShort(4);\n out.writeShort(16 + segCount * 8 + glyphIds.length * 2);\n out.writeShort(0);\n out.writeShort(segCountX2);\n out.writeShort(searchRange);\n out.writeShort(entrySelector);\n out.writeShort(rangeShift);\n endCodes.forEach(out.writeShort);\n out.writeShort(0);\n startCodes.forEach(out.writeShort);\n deltas.forEach(out.writeShort_);\n rangeOffsets.forEach(out.writeShort);\n glyphIds.forEach(out.writeShort);\n return out.get();\n }\n return deftable({\n parse: function (data) {\n var self = this;\n var offset = self.offset;\n data.offset(offset);\n self.codeMap = {};\n self.version = data.readShort();\n var tableCount = data.readShort();\n self.tables = data.times(tableCount, function () {\n return new CmapEntry(data, offset, self.codeMap);\n });\n },\n render: function (ncid2ogid, ogid2ngid) {\n var out = BinaryStream();\n out.writeShort(0);\n out.writeShort(1);\n out.write(renderCharmap(ncid2ogid, ogid2ngid));\n return out.get();\n }\n });\n }();\n var OS2Table = deftable({\n parse: function (data) {\n data.offset(this.offset);\n this.version = data.readShort();\n this.averageCharWidth = data.readShort_();\n this.weightClass = data.readShort();\n this.widthClass = data.readShort();\n this.type = data.readShort();\n this.ySubscriptXSize = data.readShort_();\n this.ySubscriptYSize = data.readShort_();\n this.ySubscriptXOffset = data.readShort_();\n this.ySubscriptYOffset = data.readShort_();\n this.ySuperscriptXSize = data.readShort_();\n this.ySuperscriptYSize = data.readShort_();\n this.ySuperscriptXOffset = data.readShort_();\n this.ySuperscriptYOffset = data.readShort_();\n this.yStrikeoutSize = data.readShort_();\n this.yStrikeoutPosition = data.readShort_();\n this.familyClass = data.readShort_();\n this.panose = data.times(10, data.readByte);\n this.charRange = data.times(4, data.readLong);\n this.vendorID = data.readString(4);\n this.selection = data.readShort();\n this.firstCharIndex = data.readShort();\n this.lastCharIndex = data.readShort();\n if (this.version > 0) {\n this.ascent = data.readShort_();\n this.descent = data.readShort_();\n this.lineGap = data.readShort_();\n this.winAscent = data.readShort();\n this.winDescent = data.readShort();\n this.codePageRange = data.times(2, data.readLong);\n if (this.version > 1) {\n this.xHeight = data.readShort();\n this.capHeight = data.readShort();\n this.defaultChar = data.readShort();\n this.breakChar = data.readShort();\n this.maxContext = data.readShort();\n }\n }\n },\n render: function () {\n return this.raw();\n }\n });\n var subsetTag = 100000;\n function nextSubsetTag() {\n var ret = '', n = String(subsetTag);\n for (var i = 0; i < n.length; ++i) {\n ret += String.fromCharCode(n.charCodeAt(i) - 48 + 65);\n }\n ++subsetTag;\n return ret;\n }\n function Subfont(font) {\n this.font = font;\n this.subset = {};\n this.unicodes = {};\n this.ogid2ngid = { 0: 0 };\n this.ngid2ogid = { 0: 0 };\n this.ncid2ogid = {};\n this.next = this.firstChar = 1;\n this.nextGid = 1;\n this.psName = nextSubsetTag() + '+' + this.font.psName;\n }\n Subfont.prototype = {\n use: function (ch) {\n var self = this;\n if (typeof ch == 'string') {\n return ucs2decode(ch).reduce(function (ret, code) {\n return ret + String.fromCharCode(self.use(code));\n }, '');\n }\n var code = self.unicodes[ch];\n if (!code) {\n code = self.next++;\n self.subset[code] = ch;\n self.unicodes[ch] = code;\n var old_gid = self.font.cmap.codeMap[ch];\n if (old_gid) {\n self.ncid2ogid[code] = old_gid;\n if (self.ogid2ngid[old_gid] == null) {\n var new_gid = self.nextGid++;\n self.ogid2ngid[old_gid] = new_gid;\n self.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n return code;\n },\n encodeText: function (text) {\n return this.use(text);\n },\n glyphIds: function () {\n return sortedKeys(this.ogid2ngid);\n },\n glyphsFor: function (glyphIds, result) {\n var this$1 = this;\n if (!result) {\n result = {};\n }\n for (var i = 0; i < glyphIds.length; ++i) {\n var id = glyphIds[i];\n if (!result[id]) {\n var glyph = result[id] = this$1.font.glyf.glyphFor(id);\n if (glyph && glyph.compound) {\n this$1.glyphsFor(glyph.glyphIds, result);\n }\n }\n }\n return result;\n },\n render: function () {\n var this$1 = this;\n var glyphs = this.glyphsFor(this.glyphIds());\n for (var old_gid in glyphs) {\n if (hasOwnProperty$1(glyphs, old_gid)) {\n old_gid = parseInt(old_gid, 10);\n if (this$1.ogid2ngid[old_gid] == null) {\n var new_gid = this$1.nextGid++;\n this$1.ogid2ngid[old_gid] = new_gid;\n this$1.ngid2ogid[new_gid] = old_gid;\n }\n }\n }\n var new_gid_ids = sortedKeys(this.ngid2ogid);\n var old_gid_ids = new_gid_ids.map(function (id) {\n return this.ngid2ogid[id];\n }, this);\n var font = this.font;\n var glyf = font.glyf.render(glyphs, old_gid_ids, this.ogid2ngid);\n var loca = font.loca.render(glyf.offsets);\n this.lastChar = this.next - 1;\n var tables = {\n 'cmap': CmapTable.render(this.ncid2ogid, this.ogid2ngid),\n 'glyf': glyf.table,\n 'loca': loca.table,\n 'hmtx': font.hmtx.render(old_gid_ids),\n 'hhea': font.hhea.render(old_gid_ids),\n 'maxp': font.maxp.render(old_gid_ids),\n 'post': font.post.render(old_gid_ids),\n 'name': font.name.render(this.psName),\n 'head': font.head.render(loca.format),\n 'OS/2': font.os2.render()\n };\n return this.font.directory.render(tables);\n },\n cidToGidMap: function () {\n var this$1 = this;\n var out = BinaryStream(), len = 0;\n for (var cid = this.firstChar; cid < this.next; ++cid) {\n while (len < cid) {\n out.writeShort(0);\n len++;\n }\n var old_gid = this$1.ncid2ogid[cid];\n if (old_gid) {\n var new_gid = this$1.ogid2ngid[old_gid];\n out.writeShort(new_gid);\n } else {\n out.writeShort(0);\n }\n len++;\n }\n return out.get();\n }\n };\n function TTFFont(rawData, name) {\n var self = this;\n var data = self.contents = BinaryStream(rawData);\n if (data.readString(4) == 'ttcf') {\n var offset;\n var parse = function () {\n data.offset(offset);\n self.parse();\n };\n if (!name) {\n throw new Error('Must specify a name for TTC files');\n }\n data.readLong();\n var numFonts = data.readLong();\n for (var i = 0; i < numFonts; ++i) {\n offset = data.readLong();\n data.saveExcursion(parse);\n if (self.psName == name) {\n return;\n }\n }\n throw new Error('Font ' + name + ' not found in collection');\n } else {\n data.offset(0);\n self.parse();\n }\n }\n TTFFont.prototype = {\n parse: function () {\n var dir = this.directory = new Directory(this.contents);\n this.head = dir.readTable('head', HeadTable);\n this.loca = dir.readTable('loca', LocaTable);\n this.hhea = dir.readTable('hhea', HheaTable);\n this.maxp = dir.readTable('maxp', MaxpTable);\n this.hmtx = dir.readTable('hmtx', HmtxTable);\n this.glyf = dir.readTable('glyf', GlyfTable);\n this.name = dir.readTable('name', NameTable);\n this.post = dir.readTable('post', PostTable);\n this.cmap = dir.readTable('cmap', CmapTable);\n this.os2 = dir.readTable('OS/2', OS2Table);\n this.psName = this.name.postscriptName;\n this.ascent = this.os2.ascent || this.hhea.ascent;\n this.descent = this.os2.descent || this.hhea.descent;\n this.lineGap = this.os2.lineGap || this.hhea.lineGap;\n this.scale = 1000 / this.head.unitsPerEm;\n },\n widthOfGlyph: function (glyph) {\n return this.hmtx.forGlyph(glyph).advance * this.scale;\n },\n makeSubset: function () {\n return new Subfont(this);\n }\n };\n var fromCharCode = String.fromCharCode;\n var BOM = 'þÿ';\n function encodeUnit(codeUnit) {\n return fromCharCode(codeUnit >> 8) + fromCharCode(codeUnit & 255);\n }\n function encodeUTF16BE(input) {\n var output = '';\n for (var i = 0; i < input.length; i++) {\n var c = input.charCodeAt(i);\n if (c < 65535) {\n output += encodeUnit(c);\n } else {\n var lead = (c - 65536 >> 10) + 55296;\n var trail = (c - 65536 & 1023) + 56320;\n output += encodeUnit(lead);\n output += encodeUnit(trail);\n }\n }\n return output;\n }\n var browser = kendo.support.browser;\n var NL = '\\n';\n var RESOURCE_COUNTER = 0;\n var PAPER_SIZE = {\n a0: [\n 2383.94,\n 3370.39\n ],\n a1: [\n 1683.78,\n 2383.94\n ],\n a2: [\n 1190.55,\n 1683.78\n ],\n a3: [\n 841.89,\n 1190.55\n ],\n a4: [\n 595.28,\n 841.89\n ],\n a5: [\n 419.53,\n 595.28\n ],\n a6: [\n 297.64,\n 419.53\n ],\n a7: [\n 209.76,\n 297.64\n ],\n a8: [\n 147.4,\n 209.76\n ],\n a9: [\n 104.88,\n 147.4\n ],\n a10: [\n 73.7,\n 104.88\n ],\n b0: [\n 2834.65,\n 4008.19\n ],\n b1: [\n 2004.09,\n 2834.65\n ],\n b2: [\n 1417.32,\n 2004.09\n ],\n b3: [\n 1000.63,\n 1417.32\n ],\n b4: [\n 708.66,\n 1000.63\n ],\n b5: [\n 498.9,\n 708.66\n ],\n b6: [\n 354.33,\n 498.9\n ],\n b7: [\n 249.45,\n 354.33\n ],\n b8: [\n 175.75,\n 249.45\n ],\n b9: [\n 124.72,\n 175.75\n ],\n b10: [\n 87.87,\n 124.72\n ],\n c0: [\n 2599.37,\n 3676.54\n ],\n c1: [\n 1836.85,\n 2599.37\n ],\n c2: [\n 1298.27,\n 1836.85\n ],\n c3: [\n 918.43,\n 1298.27\n ],\n c4: [\n 649.13,\n 918.43\n ],\n c5: [\n 459.21,\n 649.13\n ],\n c6: [\n 323.15,\n 459.21\n ],\n c7: [\n 229.61,\n 323.15\n ],\n c8: [\n 161.57,\n 229.61\n ],\n c9: [\n 113.39,\n 161.57\n ],\n c10: [\n 79.37,\n 113.39\n ],\n executive: [\n 521.86,\n 756\n ],\n folio: [\n 612,\n 936\n ],\n legal: [\n 612,\n 1008\n ],\n letter: [\n 612,\n 792\n ],\n tabloid: [\n 792,\n 1224\n ]\n };\n function makeOutput() {\n var indentLevel = 0, output = BinaryStream();\n function out() {\n var arguments$1 = arguments;\n for (var i = 0; i < arguments.length; ++i) {\n var x = arguments$1[i];\n if (x === undefined) {\n throw new Error('Cannot output undefined to PDF');\n } else if (x instanceof PDFValue) {\n x.beforeRender(out);\n x.render(out);\n } else if (isArray(x)) {\n renderArray(x, out);\n } else if (isDate(x)) {\n renderDate(x, out);\n } else if (typeof x == 'number') {\n if (isNaN(x)) {\n throw new Error('Cannot output NaN to PDF');\n }\n var num = x.toFixed(7);\n if (num.indexOf('.') >= 0) {\n num = num.replace(/\\.?0+$/, '');\n }\n if (num == '-0') {\n num = '0';\n }\n output.writeString(num);\n } else if (/string|boolean/.test(typeof x)) {\n output.writeString(String(x));\n } else if (typeof x.get == 'function') {\n output.write(x.get());\n } else if (typeof x == 'object') {\n if (!x) {\n output.writeString('null');\n } else {\n out(new PDFDictionary(x));\n }\n }\n }\n }\n out.writeData = function (data) {\n output.write(data);\n };\n out.withIndent = function (f) {\n ++indentLevel;\n f(out);\n --indentLevel;\n };\n out.indent = function () {\n out(NL, pad('', indentLevel * 2, ' '));\n out.apply(null, arguments);\n };\n out.offset = function () {\n return output.offset();\n };\n out.toString = function () {\n throw new Error('FIX CALLER');\n };\n out.get = function () {\n return output.get();\n };\n out.stream = function () {\n return output;\n };\n return out;\n }\n function wrapObject(value, id) {\n var beforeRender = value.beforeRender;\n var renderValue = value.render;\n value.beforeRender = function () {\n };\n value.render = function (out) {\n out(id, ' 0 R');\n };\n value.renderFull = function (out) {\n value._offset = out.offset();\n out(id, ' 0 obj ');\n beforeRender.call(value, out);\n renderValue.call(value, out);\n out(' endobj');\n };\n }\n function getPaperOptions(getOption) {\n if (typeof getOption != 'function') {\n var options = getOption;\n getOption = function (key, def) {\n return key in options ? options[key] : def;\n };\n }\n var paperSize = getOption('paperSize', PAPER_SIZE.a4);\n if (!paperSize) {\n return {};\n }\n if (typeof paperSize == 'string') {\n paperSize = PAPER_SIZE[paperSize.toLowerCase()];\n if (paperSize == null) {\n throw new Error('Unknown paper size');\n }\n }\n paperSize[0] = unitsToPoints(paperSize[0]);\n paperSize[1] = unitsToPoints(paperSize[1]);\n if (getOption('landscape', false)) {\n paperSize = [\n Math.max(paperSize[0], paperSize[1]),\n Math.min(paperSize[0], paperSize[1])\n ];\n }\n var margin = getOption('margin');\n if (margin) {\n if (typeof margin == 'string' || typeof margin == 'number') {\n margin = unitsToPoints(margin, 0);\n margin = {\n left: margin,\n top: margin,\n right: margin,\n bottom: margin\n };\n } else {\n margin = {\n left: unitsToPoints(margin.left, 0),\n top: unitsToPoints(margin.top, 0),\n right: unitsToPoints(margin.right, 0),\n bottom: unitsToPoints(margin.bottom, 0)\n };\n }\n if (getOption('addMargin')) {\n paperSize[0] += margin.left + margin.right;\n paperSize[1] += margin.top + margin.bottom;\n }\n }\n return {\n paperSize: paperSize,\n margin: margin\n };\n }\n function PDFDocument(options) {\n var self = this;\n var out = makeOutput();\n var objcount = 0;\n var objects = [];\n function getOption(name, defval) {\n return options && options[name] != null ? options[name] : defval;\n }\n self.getOption = getOption;\n self.attach = function (value) {\n if (objects.indexOf(value) < 0) {\n wrapObject(value, ++objcount);\n objects.push(value);\n }\n return value;\n };\n self.pages = [];\n self.FONTS = {};\n self.IMAGES = {};\n self.GRAD_COL_FUNCTIONS = {};\n self.GRAD_OPC_FUNCTIONS = {};\n self.GRAD_COL = {};\n self.GRAD_OPC = {};\n var catalog = self.attach(new PDFCatalog());\n var pageTree = self.attach(new PDFPageTree());\n if (getOption('autoPrint')) {\n var nameTree = {};\n nameTree.JavaScript = new PDFDictionary({\n Names: [\n new PDFString('JS'),\n self.attach(new PDFDictionary({\n S: _('JavaScript'),\n JS: new PDFString('print(true);')\n }))\n ]\n });\n catalog.props.Names = new PDFDictionary(nameTree);\n }\n catalog.setPages(pageTree);\n var info = self.attach(new PDFDictionary({\n Producer: new PDFString(getOption('producer', 'Kendo UI PDF Generator'), true),\n Title: new PDFString(getOption('title', ''), true),\n Author: new PDFString(getOption('author', ''), true),\n Subject: new PDFString(getOption('subject', ''), true),\n Keywords: new PDFString(getOption('keywords', ''), true),\n Creator: new PDFString(getOption('creator', 'Kendo UI PDF Generator'), true),\n CreationDate: getOption('date', new Date())\n }));\n self.addPage = function (options) {\n var paperOptions = getPaperOptions(function (name, defval) {\n return options && options[name] != null ? options[name] : defval;\n });\n var paperSize = paperOptions.paperSize;\n var margin = paperOptions.margin;\n var contentWidth = paperSize[0];\n var contentHeight = paperSize[1];\n if (margin) {\n contentWidth -= margin.left + margin.right;\n contentHeight -= margin.top + margin.bottom;\n }\n var content = new PDFStream(makeOutput(), null, true);\n var props = {\n Contents: self.attach(content),\n Parent: pageTree,\n MediaBox: [\n 0,\n 0,\n paperSize[0],\n paperSize[1]\n ]\n };\n var page = new PDFPage(self, props);\n page._content = content;\n pageTree.addPage(self.attach(page));\n page.transform(1, 0, 0, -1, 0, paperSize[1]);\n if (margin) {\n page.translate(margin.left, margin.top);\n page.rect(0, 0, contentWidth, contentHeight);\n page.clip();\n }\n self.pages.push(page);\n return page;\n };\n self.render = function () {\n var i;\n out('%PDF-1.4', NL, '%ÂÁÚÏÎ', NL, NL);\n for (i = 0; i < objects.length; ++i) {\n objects[i].renderFull(out);\n out(NL, NL);\n }\n var xrefOffset = out.offset();\n out('xref', NL, 0, ' ', objects.length + 1, NL);\n out('0000000000 65535 f ', NL);\n for (i = 0; i < objects.length; ++i) {\n out(zeropad(objects[i]._offset, 10), ' 00000 n ', NL);\n }\n out(NL);\n out('trailer', NL);\n out(new PDFDictionary({\n Size: objects.length + 1,\n Root: catalog,\n Info: info\n }), NL, NL);\n out('startxref', NL, xrefOffset, NL);\n out('%%EOF', NL);\n return out.stream().offset(0);\n };\n }\n var FONT_CACHE = {\n 'Times-Roman': true,\n 'Times-Bold': true,\n 'Times-Italic': true,\n 'Times-BoldItalic': true,\n 'Helvetica': true,\n 'Helvetica-Bold': true,\n 'Helvetica-Oblique': true,\n 'Helvetica-BoldOblique': true,\n 'Courier': true,\n 'Courier-Bold': true,\n 'Courier-Oblique': true,\n 'Courier-BoldOblique': true,\n 'Symbol': true,\n 'ZapfDingbats': true\n };\n function loadBinary(url, cont) {\n var m;\n if (browser.msie && (m = /^data:.*?;base64,/i.exec(url))) {\n cont(base64ToUint8Array(url.substr(m[0].length)));\n return;\n }\n function error() {\n if (window.console) {\n if (window.console.error) {\n window.console.error('Cannot load URL: %s', url);\n } else {\n window.console.log('Cannot load URL: %s', url);\n }\n }\n cont(null);\n }\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n if (HAS_TYPED_ARRAYS) {\n req.responseType = 'arraybuffer';\n }\n req.onload = function () {\n if (req.status == 200 || req.status == 304) {\n if (HAS_TYPED_ARRAYS) {\n cont(new Uint8Array(req.response));\n } else {\n cont(new window.VBArray(req.responseBody).toArray());\n }\n } else {\n error();\n }\n };\n req.onerror = error;\n req.send(null);\n }\n function loadFont(url, cont) {\n var font = FONT_CACHE[url];\n if (font) {\n cont(font);\n } else {\n loadBinary(url, function (data) {\n if (data == null) {\n throw new Error('Cannot load font from ' + url);\n } else {\n var font = new TTFFont(data);\n FONT_CACHE[url] = font;\n cont(font);\n }\n });\n }\n }\n var IMAGE_CACHE = {};\n function clearImageCache() {\n IMAGE_CACHE = {};\n }\n function loadImage(url, size, cont, options) {\n var img = IMAGE_CACHE[url], bloburl, blob;\n if (img) {\n cont(img);\n } else {\n img = new Image();\n if (!/^data:/i.test(url)) {\n img.crossOrigin = 'Anonymous';\n }\n if (HAS_TYPED_ARRAYS && !/^data:/i.test(url)) {\n var xhr = new XMLHttpRequest();\n xhr.onload = function () {\n blob = xhr.response;\n bloburl = URL.createObjectURL(blob);\n _load(bloburl);\n };\n xhr.onerror = _onerror;\n xhr.open('GET', url, true);\n xhr.responseType = 'blob';\n xhr.send();\n } else {\n _load(url);\n }\n }\n function _load(url) {\n img.src = url;\n if (img.complete && !browser.msie) {\n _onload();\n } else {\n img.onload = _onload;\n img.onerror = _onerror;\n }\n }\n function _trycanvas() {\n if (!size) {\n size = {\n width: img.width,\n height: img.height\n };\n }\n var canvas = document.createElement('canvas');\n canvas.width = size.width;\n canvas.height = size.height;\n var ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, size.width, size.height);\n var imgdata;\n try {\n imgdata = ctx.getImageData(0, 0, size.width, size.height);\n } catch (ex) {\n _onerror();\n return;\n } finally {\n if (bloburl) {\n URL.revokeObjectURL(bloburl);\n }\n }\n var hasAlpha = false, rgb = BinaryStream(), alpha = BinaryStream();\n var rawbytes = imgdata.data;\n var i = 0;\n while (i < rawbytes.length) {\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n rgb.writeByte(rawbytes[i++]);\n var a = rawbytes[i++];\n if (a < 255) {\n hasAlpha = true;\n }\n alpha.writeByte(a);\n }\n if (hasAlpha || options.keepPNG) {\n img = new PDFRawImage(size.width, size.height, rgb, alpha);\n } else {\n var data = canvas.toDataURL('image/jpeg', options.jpegQuality);\n data = data.substr(data.indexOf(';base64,') + 8);\n var stream = BinaryStream();\n stream.writeBase64(data);\n img = new PDFJpegImage(stream);\n }\n cont(IMAGE_CACHE[url] = img);\n }\n function _onerror() {\n cont(IMAGE_CACHE[url] = 'ERROR');\n }\n function _onload() {\n if (size) {\n if (size.width >= img.width || size.height >= img.height) {\n size = null;\n }\n }\n if (!size && blob && /^image\\/jpe?g$/i.test(blob.type)) {\n var reader = new FileReader();\n reader.onload = function () {\n try {\n var img = new PDFJpegImage(BinaryStream(new Uint8Array(this.result)));\n URL.revokeObjectURL(bloburl);\n cont(IMAGE_CACHE[url] = img);\n } catch (ex) {\n _trycanvas();\n }\n };\n reader.readAsArrayBuffer(blob);\n } else {\n _trycanvas();\n }\n }\n }\n function manyLoader(loadOne) {\n return function (urls, callback) {\n var n = urls.length, i = n;\n if (n === 0) {\n return callback();\n }\n function next() {\n if (--n === 0) {\n callback();\n }\n }\n while (i-- > 0) {\n loadOne(urls[i], next);\n }\n };\n }\n var loadFonts = manyLoader(loadFont);\n var loadImages = function (images, callback, options) {\n options = $.extend({\n jpegQuality: 0.92,\n keepPNG: false\n }, options);\n var urls = Object.keys(images), n = urls.length;\n if (n === 0) {\n return callback();\n }\n function next() {\n if (--n === 0) {\n callback();\n }\n }\n urls.forEach(function (url) {\n loadImage(url, images[url], next, options);\n });\n };\n PDFDocument.prototype = {\n loadFonts: loadFonts,\n loadImages: loadImages,\n getFont: function (url) {\n var font = this.FONTS[url];\n if (!font) {\n font = FONT_CACHE[url];\n if (!font) {\n throw new Error('Font ' + url + ' has not been loaded');\n }\n if (font === true) {\n font = this.attach(new PDFStandardFont(url));\n } else {\n font = this.attach(new PDFFont(this, font));\n }\n this.FONTS[url] = font;\n }\n return font;\n },\n getImage: function (url) {\n var img = this.IMAGES[url];\n if (!img) {\n img = IMAGE_CACHE[url];\n if (!img) {\n throw new Error('Image ' + url + ' has not been loaded');\n }\n if (img === 'ERROR') {\n return null;\n }\n img = this.IMAGES[url] = this.attach(img.asStream(this));\n }\n return img;\n },\n getOpacityGS: function (opacity, forStroke) {\n var id = parseFloat(opacity).toFixed(3);\n opacity = parseFloat(id);\n id += forStroke ? 'S' : 'F';\n var cache = this._opacityGSCache || (this._opacityGSCache = {});\n var gs = cache[id];\n if (!gs) {\n var props = { Type: _('ExtGState') };\n if (forStroke) {\n props.CA = opacity;\n } else {\n props.ca = opacity;\n }\n gs = this.attach(new PDFDictionary(props));\n gs._resourceName = _('GS' + ++RESOURCE_COUNTER);\n cache[id] = gs;\n }\n return gs;\n },\n dict: function (props) {\n return new PDFDictionary(props);\n },\n name: function (str) {\n return _(str);\n },\n stream: function (props, content) {\n return new PDFStream(content, props);\n }\n };\n function pad(str, len, ch) {\n while (str.length < len) {\n str = ch + str;\n }\n return str;\n }\n function zeropad(n, len) {\n return pad(String(n), len, '0');\n }\n function hasOwnProperty(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n }\n var isArray = Array.isArray || function (obj) {\n return obj instanceof Array;\n };\n function isDate(obj) {\n return obj instanceof Date;\n }\n function renderArray(a, out) {\n out('[');\n if (a.length > 0) {\n out.withIndent(function () {\n for (var i = 0; i < a.length; ++i) {\n if (i > 0 && i % 8 === 0) {\n out.indent(a[i]);\n } else {\n out(' ', a[i]);\n }\n }\n });\n }\n out(' ]');\n }\n function renderDate(date, out) {\n out('(D:', zeropad(date.getUTCFullYear(), 4), zeropad(date.getUTCMonth() + 1, 2), zeropad(date.getUTCDate(), 2), zeropad(date.getUTCHours(), 2), zeropad(date.getUTCMinutes(), 2), zeropad(date.getUTCSeconds(), 2), 'Z)');\n }\n function mm2pt(mm) {\n return mm * (72 / 25.4);\n }\n function cm2pt(cm) {\n return mm2pt(cm * 10);\n }\n function in2pt(inch) {\n return inch * 72;\n }\n function unitsToPoints(x, def) {\n if (typeof x == 'number') {\n return x;\n }\n if (typeof x == 'string') {\n var m;\n m = /^\\s*([0-9.]+)\\s*(mm|cm|in|pt)\\s*$/.exec(x);\n if (m) {\n var num = parseFloat(m[1]);\n if (!isNaN(num)) {\n if (m[2] == 'pt') {\n return num;\n }\n return {\n 'mm': mm2pt,\n 'cm': cm2pt,\n 'in': in2pt\n }[m[2]](num);\n }\n }\n }\n if (def != null) {\n return def;\n }\n throw new Error('Can\\'t parse unit: ' + x);\n }\n function PDFValue() {\n }\n PDFValue.prototype.beforeRender = function () {\n };\n function defclass(Ctor, proto, Base) {\n if (!Base) {\n Base = PDFValue;\n }\n Ctor.prototype = new Base();\n for (var i in proto) {\n if (hasOwnProperty(proto, i)) {\n Ctor.prototype[i] = proto[i];\n }\n }\n return Ctor;\n }\n var PDFString = defclass(function PDFString(value, utf16be) {\n this.value = value;\n this.utf16be = Boolean(utf16be);\n }, {\n render: function (out) {\n var txt = this.value;\n if (this.utf16be) {\n txt = BOM + encodeUTF16BE(txt);\n txt = txt.replace(/([\\(\\)\\\\])/g, '\\\\$1');\n out('(', txt, ')');\n } else {\n var data = [40];\n for (var i = 0; i < txt.length; ++i) {\n var code = txt.charCodeAt(i) & 255;\n if (code == 40 || code == 41 || code == 92) {\n data.push(92);\n }\n data.push(code);\n }\n data.push(41);\n out.writeData(data);\n }\n },\n toString: function () {\n return this.value;\n }\n });\n var PDFHexString = defclass(function PDFHexString(value) {\n this.value = value;\n }, {\n render: function (out) {\n var this$1 = this;\n out('<');\n for (var i = 0; i < this.value.length; ++i) {\n out(zeropad(this$1.value.charCodeAt(i).toString(16), 4));\n }\n out('>');\n }\n }, PDFString);\n var PDFName = defclass(function PDFName(name) {\n this.name = name;\n }, {\n render: function (out) {\n out('/' + this.escape());\n },\n escape: function () {\n return this.name.replace(/[^\\x21-\\x7E]/g, function (c) {\n return '#' + zeropad(c.charCodeAt(0).toString(16), 2);\n });\n },\n toString: function () {\n return this.name;\n }\n });\n var PDFName_cache = {};\n PDFName.get = _;\n function _(name) {\n if (hasOwnProperty(PDFName_cache, name)) {\n return PDFName_cache[name];\n }\n return PDFName_cache[name] = new PDFName(name);\n }\n var PDFDictionary = defclass(function PDFDictionary(props) {\n this.props = props;\n }, {\n render: function (out) {\n var props = this.props, empty = true;\n out('<<');\n out.withIndent(function () {\n for (var i in props) {\n if (hasOwnProperty(props, i) && !/^_/.test(i)) {\n empty = false;\n out.indent(_(i), ' ', props[i]);\n }\n }\n });\n if (!empty) {\n out.indent();\n }\n out('>>');\n }\n });\n var PDFStream = defclass(function PDFStream(data, props, compress) {\n if (typeof data == 'string') {\n var tmp = BinaryStream();\n tmp.write(data);\n data = tmp;\n }\n this.data = data;\n this.props = props || {};\n this.compress = compress;\n }, {\n render: function (out) {\n var data = this.data.get(), props = this.props;\n if (this.compress && kendoPdf.supportsDeflate()) {\n if (!props.Filter) {\n props.Filter = [];\n } else if (!(props.Filter instanceof Array)) {\n props.Filter = [props.Filter];\n }\n props.Filter.unshift(_('FlateDecode'));\n data = kendoPdf.deflate(data);\n }\n props.Length = data.length;\n out(new PDFDictionary(props), ' stream', NL);\n out.writeData(data);\n out(NL, 'endstream');\n }\n });\n var PDFCatalog = defclass(function PDFCatalog() {\n this.props = { Type: _('Catalog') };\n }, {\n setPages: function (pagesObj) {\n this.props.Pages = pagesObj;\n }\n }, PDFDictionary);\n var PDFPageTree = defclass(function PDFPageTree() {\n this.props = {\n Type: _('Pages'),\n Kids: [],\n Count: 0\n };\n }, {\n addPage: function (pageObj) {\n this.props.Kids.push(pageObj);\n this.props.Count++;\n }\n }, PDFDictionary);\n var SOF_CODES = [\n 192,\n 193,\n 194,\n 195,\n 197,\n 198,\n 199,\n 201,\n 202,\n 203,\n 205,\n 206,\n 207\n ];\n function PDFJpegImage(data) {\n data.offset(0);\n var width, height, colorSpace, bitsPerComponent;\n var soi = data.readShort();\n if (soi != 65496) {\n throw new Error('Invalid JPEG image');\n }\n while (!data.eof()) {\n var ff = data.readByte();\n if (ff != 255) {\n throw new Error('Invalid JPEG image');\n }\n var marker = data.readByte();\n var length = data.readShort();\n if (SOF_CODES.indexOf(marker) >= 0) {\n bitsPerComponent = data.readByte();\n height = data.readShort();\n width = data.readShort();\n colorSpace = data.readByte();\n break;\n }\n data.skip(length - 2);\n }\n if (colorSpace == null) {\n throw new Error('Invalid JPEG image');\n }\n var props = {\n Type: _('XObject'),\n Subtype: _('Image'),\n Width: width,\n Height: height,\n BitsPerComponent: bitsPerComponent,\n Filter: _('DCTDecode')\n };\n switch (colorSpace) {\n case 1:\n props.ColorSpace = _('DeviceGray');\n break;\n case 3:\n props.ColorSpace = _('DeviceRGB');\n break;\n case 4:\n props.ColorSpace = _('DeviceCMYK');\n props.Decode = [\n 1,\n 0,\n 1,\n 0,\n 1,\n 0,\n 1,\n 0\n ];\n break;\n }\n this.asStream = function () {\n data.offset(0);\n var stream = new PDFStream(data, props);\n stream._resourceName = _('I' + ++RESOURCE_COUNTER);\n return stream;\n };\n }\n function PDFRawImage(width, height, rgb, alpha) {\n this.asStream = function (pdf) {\n var mask = new PDFStream(alpha, {\n Type: _('XObject'),\n Subtype: _('Image'),\n Width: width,\n Height: height,\n BitsPerComponent: 8,\n ColorSpace: _('DeviceGray')\n }, true);\n var stream = new PDFStream(rgb, {\n Type: _('XObject'),\n Subtype: _('Image'),\n Width: width,\n Height: height,\n BitsPerComponent: 8,\n ColorSpace: _('DeviceRGB'),\n SMask: pdf.attach(mask)\n }, true);\n stream._resourceName = _('I' + ++RESOURCE_COUNTER);\n return stream;\n };\n }\n var PDFStandardFont = defclass(function PDFStandardFont(name) {\n this.props = {\n Type: _('Font'),\n Subtype: _('Type1'),\n BaseFont: _(name)\n };\n this._resourceName = _('F' + ++RESOURCE_COUNTER);\n }, {\n encodeText: function (str) {\n return new PDFString(String(str));\n }\n }, PDFDictionary);\n var PDFFont = defclass(function PDFFont(pdf, font, props) {\n props = this.props = props || {};\n props.Type = _('Font');\n props.Subtype = _('Type0');\n props.Encoding = _('Identity-H');\n this._pdf = pdf;\n this._font = font;\n this._sub = font.makeSubset();\n this._resourceName = _('F' + ++RESOURCE_COUNTER);\n var head = font.head;\n this.name = font.psName;\n var scale = this.scale = font.scale;\n this.bbox = [\n head.xMin * scale,\n head.yMin * scale,\n head.xMax * scale,\n head.yMax * scale\n ];\n this.italicAngle = font.post.italicAngle;\n this.ascent = font.ascent * scale;\n this.descent = font.descent * scale;\n this.lineGap = font.lineGap * scale;\n this.capHeight = font.os2.capHeight || this.ascent;\n this.xHeight = font.os2.xHeight || 0;\n this.stemV = 0;\n this.familyClass = (font.os2.familyClass || 0) >> 8;\n this.isSerif = this.familyClass >= 1 && this.familyClass <= 7;\n this.isScript = this.familyClass == 10;\n this.flags = (font.post.isFixedPitch ? 1 : 0) | (this.isSerif ? 1 << 1 : 0) | (this.isScript ? 1 << 3 : 0) | (this.italicAngle !== 0 ? 1 << 6 : 0) | 1 << 5;\n }, {\n encodeText: function (text) {\n return new PDFHexString(this._sub.encodeText(String(text)));\n },\n getTextWidth: function (fontSize, text) {\n var this$1 = this;\n var width = 0, codeMap = this._font.cmap.codeMap;\n for (var i = 0; i < text.length; ++i) {\n var glyphId = codeMap[text.charCodeAt(i)];\n width += this$1._font.widthOfGlyph(glyphId || 0);\n }\n return width * fontSize / 1000;\n },\n beforeRender: function () {\n var self = this;\n var sub = self._sub;\n var data = sub.render();\n var fontStream = new PDFStream(BinaryStream(data), { Length1: data.length }, true);\n var descriptor = self._pdf.attach(new PDFDictionary({\n Type: _('FontDescriptor'),\n FontName: _(self._sub.psName),\n FontBBox: self.bbox,\n Flags: self.flags,\n StemV: self.stemV,\n ItalicAngle: self.italicAngle,\n Ascent: self.ascent,\n Descent: self.descent,\n CapHeight: self.capHeight,\n XHeight: self.xHeight,\n FontFile2: self._pdf.attach(fontStream)\n }));\n var cmap = sub.ncid2ogid;\n var firstChar = sub.firstChar;\n var lastChar = sub.lastChar;\n var charWidths = [];\n (function loop(i, chunk) {\n if (i <= lastChar) {\n var gid = cmap[i];\n if (gid == null) {\n loop(i + 1);\n } else {\n if (!chunk) {\n charWidths.push(i, chunk = []);\n }\n chunk.push(self._font.widthOfGlyph(gid));\n loop(i + 1, chunk);\n }\n }\n }(firstChar));\n var descendant = new PDFDictionary({\n Type: _('Font'),\n Subtype: _('CIDFontType2'),\n BaseFont: _(self._sub.psName),\n CIDSystemInfo: new PDFDictionary({\n Registry: new PDFString('Adobe'),\n Ordering: new PDFString('Identity'),\n Supplement: 0\n }),\n FontDescriptor: descriptor,\n FirstChar: firstChar,\n LastChar: lastChar,\n DW: Math.round(self._font.widthOfGlyph(0)),\n W: charWidths,\n CIDToGIDMap: self._pdf.attach(self._makeCidToGidMap())\n });\n var dict = self.props;\n dict.BaseFont = _(self._sub.psName);\n dict.DescendantFonts = [self._pdf.attach(descendant)];\n var unimap = new PDFToUnicodeCmap(firstChar, lastChar, sub.subset);\n var unimapStream = new PDFStream(makeOutput(), null, true);\n unimapStream.data(unimap);\n dict.ToUnicode = self._pdf.attach(unimapStream);\n },\n _makeCidToGidMap: function () {\n return new PDFStream(BinaryStream(this._sub.cidToGidMap()), null, true);\n }\n }, PDFDictionary);\n var PDFToUnicodeCmap = defclass(function PDFUnicodeCMap(firstChar, lastChar, map) {\n this.firstChar = firstChar;\n this.lastChar = lastChar;\n this.map = map;\n }, {\n render: function (out) {\n out.indent('/CIDInit /ProcSet findresource begin');\n out.indent('12 dict begin');\n out.indent('begincmap');\n out.indent('/CIDSystemInfo <<');\n out.indent(' /Registry (Adobe)');\n out.indent(' /Ordering (UCS)');\n out.indent(' /Supplement 0');\n out.indent('>> def');\n out.indent('/CMapName /Adobe-Identity-UCS def');\n out.indent('/CMapType 2 def');\n out.indent('1 begincodespacerange');\n out.indent(' <0000>');\n out.indent('endcodespacerange');\n var self = this;\n out.indent(self.lastChar - self.firstChar + 1, ' beginbfchar');\n out.withIndent(function () {\n for (var code = self.firstChar; code <= self.lastChar; ++code) {\n var unicode = self.map[code];\n var str = ucs2encode([unicode]);\n out.indent('<', zeropad(code.toString(16), 4), '>', '<');\n for (var i = 0; i < str.length; ++i) {\n out(zeropad(str.charCodeAt(i).toString(16), 4));\n }\n out('>');\n }\n });\n out.indent('endbfchar');\n out.indent('endcmap');\n out.indent('CMapName currentdict /CMap defineresource pop');\n out.indent('end');\n out.indent('end');\n }\n });\n function makeHash(a) {\n return a.map(function (x) {\n return isArray(x) ? makeHash(x) : typeof x == 'number' ? (Math.round(x * 1000) / 1000).toFixed(3) : x;\n }).join(' ');\n }\n function cacheColorGradientFunction(pdf, r1, g1, b1, r2, g2, b2) {\n var hash = makeHash([\n r1,\n g1,\n b1,\n r2,\n g2,\n b2\n ]);\n var func = pdf.GRAD_COL_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_COL_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [\n 0,\n 1\n ],\n Range: [\n 0,\n 1,\n 0,\n 1,\n 0,\n 1\n ],\n N: 1,\n C0: [\n r1,\n g1,\n b1\n ],\n C1: [\n r2,\n g2,\n b2\n ]\n }));\n }\n return func;\n }\n function cacheOpacityGradientFunction(pdf, a1, a2) {\n var hash = makeHash([\n a1,\n a2\n ]);\n var func = pdf.GRAD_OPC_FUNCTIONS[hash];\n if (!func) {\n func = pdf.GRAD_OPC_FUNCTIONS[hash] = pdf.attach(new PDFDictionary({\n FunctionType: 2,\n Domain: [\n 0,\n 1\n ],\n Range: [\n 0,\n 1\n ],\n N: 1,\n C0: [a1],\n C1: [a2]\n }));\n }\n return func;\n }\n function makeGradientFunctions(pdf, stops) {\n var hasAlpha = false;\n var opacities = [];\n var colors = [];\n var offsets = [];\n var encode = [];\n var i, prev, cur, prevColor, curColor;\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n colors.push(cacheColorGradientFunction(pdf, prevColor.r, prevColor.g, prevColor.b, curColor.r, curColor.g, curColor.b));\n if (prevColor.a < 1 || curColor.a < 1) {\n hasAlpha = true;\n }\n offsets.push(cur.offset);\n encode.push(0, 1);\n }\n if (hasAlpha) {\n for (i = 1; i < stops.length; ++i) {\n prev = stops[i - 1];\n cur = stops[i];\n prevColor = prev.color;\n curColor = cur.color;\n opacities.push(cacheOpacityGradientFunction(pdf, prevColor.a, curColor.a));\n }\n }\n offsets.pop();\n return {\n hasAlpha: hasAlpha,\n colors: assemble(colors),\n opacities: hasAlpha ? assemble(opacities) : null\n };\n function assemble(funcs) {\n if (funcs.length == 1) {\n return funcs[0];\n }\n return {\n FunctionType: 3,\n Functions: funcs,\n Domain: [\n 0,\n 1\n ],\n Bounds: offsets,\n Encode: encode\n };\n }\n }\n function cacheColorGradient(pdf, isRadial, stops, coords, funcs, box) {\n var shading, hash;\n if (!box) {\n var a = [isRadial].concat(coords);\n stops.forEach(function (x) {\n a.push(x.offset, x.color.r, x.color.g, x.color.b);\n });\n hash = makeHash(a);\n shading = pdf.GRAD_COL[hash];\n }\n if (!shading) {\n shading = new PDFDictionary({\n Type: _('Shading'),\n ShadingType: isRadial ? 3 : 2,\n ColorSpace: _('DeviceRGB'),\n Coords: coords,\n Domain: [\n 0,\n 1\n ],\n Function: funcs,\n Extend: [\n true,\n true\n ]\n });\n pdf.attach(shading);\n shading._resourceName = 'S' + ++RESOURCE_COUNTER;\n if (hash) {\n pdf.GRAD_COL[hash] = shading;\n }\n }\n return shading;\n }\n function cacheOpacityGradient(pdf, isRadial, stops, coords, funcs, box) {\n var opacity, hash;\n if (!box) {\n var a = [isRadial].concat(coords);\n stops.forEach(function (x) {\n a.push(x.offset, x.color.a);\n });\n hash = makeHash(a);\n opacity = pdf.GRAD_OPC[hash];\n }\n if (!opacity) {\n opacity = new PDFDictionary({\n Type: _('ExtGState'),\n AIS: false,\n CA: 1,\n ca: 1,\n SMask: {\n Type: _('Mask'),\n S: _('Luminosity'),\n G: pdf.attach(new PDFStream('/a0 gs /s0 sh', {\n Type: _('XObject'),\n Subtype: _('Form'),\n FormType: 1,\n BBox: box ? [\n box.left,\n box.top + box.height,\n box.left + box.width,\n box.top\n ] : [\n 0,\n 1,\n 1,\n 0\n ],\n Group: {\n Type: _('Group'),\n S: _('Transparency'),\n CS: _('DeviceGray'),\n I: true\n },\n Resources: {\n ExtGState: {\n a0: {\n CA: 1,\n ca: 1\n }\n },\n Shading: {\n s0: {\n ColorSpace: _('DeviceGray'),\n Coords: coords,\n Domain: [\n 0,\n 1\n ],\n ShadingType: isRadial ? 3 : 2,\n Function: funcs,\n Extend: [\n true,\n true\n ]\n }\n }\n }\n }))\n }\n });\n pdf.attach(opacity);\n opacity._resourceName = 'O' + ++RESOURCE_COUNTER;\n if (hash) {\n pdf.GRAD_OPC[hash] = opacity;\n }\n }\n return opacity;\n }\n function cacheGradient(pdf, gradient, box) {\n var isRadial = gradient.type == 'radial';\n var funcs = makeGradientFunctions(pdf, gradient.stops);\n var coords = isRadial ? [\n gradient.start.x,\n gradient.start.y,\n gradient.start.r,\n gradient.end.x,\n gradient.end.y,\n gradient.end.r\n ] : [\n gradient.start.x,\n gradient.start.y,\n gradient.end.x,\n gradient.end.y\n ];\n var shading = cacheColorGradient(pdf, isRadial, gradient.stops, coords, funcs.colors, gradient.userSpace && box);\n var opacity = funcs.hasAlpha ? cacheOpacityGradient(pdf, isRadial, gradient.stops, coords, funcs.opacities, gradient.userSpace && box) : null;\n return {\n hasAlpha: funcs.hasAlpha,\n shading: shading,\n opacity: opacity\n };\n }\n var PDFPage = defclass(function PDFPage(pdf, props) {\n this._pdf = pdf;\n this._rcount = 0;\n this._textMode = false;\n this._fontResources = {};\n this._gsResources = {};\n this._xResources = {};\n this._patResources = {};\n this._shResources = {};\n this._opacity = 1;\n this._matrix = [\n 1,\n 0,\n 0,\n 1,\n 0,\n 0\n ];\n this._annotations = [];\n this._font = null;\n this._fontSize = null;\n this._contextStack = [];\n props = this.props = props || {};\n props.Type = _('Page');\n props.ProcSet = [\n _('PDF'),\n _('Text'),\n _('ImageB'),\n _('ImageC'),\n _('ImageI')\n ];\n props.Resources = new PDFDictionary({\n Font: new PDFDictionary(this._fontResources),\n ExtGState: new PDFDictionary(this._gsResources),\n XObject: new PDFDictionary(this._xResources),\n Pattern: new PDFDictionary(this._patResources),\n Shading: new PDFDictionary(this._shResources)\n });\n props.Annots = this._annotations;\n }, {\n _out: function () {\n this._content.data.apply(null, arguments);\n },\n transform: function (a, b, c, d, e, f) {\n if (!isIdentityMatrix(arguments)) {\n this._matrix = mmul(arguments, this._matrix);\n this._out(a, ' ', b, ' ', c, ' ', d, ' ', e, ' ', f, ' cm');\n this._out(NL);\n }\n },\n translate: function (dx, dy) {\n this.transform(1, 0, 0, 1, dx, dy);\n },\n scale: function (sx, sy) {\n this.transform(sx, 0, 0, sy, 0, 0);\n },\n rotate: function (angle) {\n var cos = Math.cos(angle), sin = Math.sin(angle);\n this.transform(cos, sin, -sin, cos, 0, 0);\n },\n beginText: function () {\n this._textMode = true;\n this._out('BT', NL);\n },\n endText: function () {\n this._textMode = false;\n this._out('ET', NL);\n },\n _requireTextMode: function () {\n if (!this._textMode) {\n throw new Error('Text mode required; call page.beginText() first');\n }\n },\n _requireFont: function () {\n if (!this._font) {\n throw new Error('No font selected; call page.setFont() first');\n }\n },\n setFont: function (font, size) {\n this._requireTextMode();\n if (font == null) {\n font = this._font;\n } else if (!(font instanceof PDFFont)) {\n font = this._pdf.getFont(font);\n }\n if (size == null) {\n size = this._fontSize;\n }\n this._fontResources[font._resourceName] = font;\n this._font = font;\n this._fontSize = size;\n this._out(font._resourceName, ' ', size, ' Tf', NL);\n },\n setTextLeading: function (size) {\n this._requireTextMode();\n this._out(size, ' TL', NL);\n },\n setTextRenderingMode: function (mode) {\n this._requireTextMode();\n this._out(mode, ' Tr', NL);\n },\n showText: function (text, requestedWidth) {\n this._requireFont();\n if (text.length > 1 && requestedWidth && this._font instanceof PDFFont) {\n var outputWidth = this._font.getTextWidth(this._fontSize, text);\n var scale = requestedWidth / outputWidth * 100;\n this._out(scale, ' Tz ');\n }\n this._out(this._font.encodeText(text), ' Tj', NL);\n },\n showTextNL: function (text) {\n this._requireFont();\n this._out(this._font.encodeText(text), ' \\'', NL);\n },\n addLink: function (uri, box) {\n var ll = this._toPage({\n x: box.left,\n y: box.bottom\n });\n var ur = this._toPage({\n x: box.right,\n y: box.top\n });\n this._annotations.push(new PDFDictionary({\n Type: _('Annot'),\n Subtype: _('Link'),\n Rect: [\n ll.x,\n ll.y,\n ur.x,\n ur.y\n ],\n Border: [\n 0,\n 0,\n 0\n ],\n A: new PDFDictionary({\n Type: _('Action'),\n S: _('URI'),\n URI: new PDFString(uri)\n })\n }));\n },\n setStrokeColor: function (r, g, b) {\n this._out(r, ' ', g, ' ', b, ' RG', NL);\n },\n setOpacity: function (opacity) {\n this.setFillOpacity(opacity);\n this.setStrokeOpacity(opacity);\n this._opacity *= opacity;\n },\n setStrokeOpacity: function (opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, true);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, ' gs', NL);\n }\n },\n setFillColor: function (r, g, b) {\n this._out(r, ' ', g, ' ', b, ' rg', NL);\n },\n setFillOpacity: function (opacity) {\n if (opacity < 1) {\n var gs = this._pdf.getOpacityGS(this._opacity * opacity, false);\n this._gsResources[gs._resourceName] = gs;\n this._out(gs._resourceName, ' gs', NL);\n }\n },\n gradient: function (gradient, box) {\n this.save();\n this.rect(box.left, box.top, box.width, box.height);\n this.clip();\n if (!gradient.userSpace) {\n this.transform(box.width, 0, 0, box.height, box.left, box.top);\n }\n var g = cacheGradient(this._pdf, gradient, box);\n var sname = g.shading._resourceName, oname;\n this._shResources[sname] = g.shading;\n if (g.hasAlpha) {\n oname = g.opacity._resourceName;\n this._gsResources[oname] = g.opacity;\n this._out('/' + oname + ' gs ');\n }\n this._out('/' + sname + ' sh', NL);\n this.restore();\n },\n setDashPattern: function (dashArray, dashPhase) {\n this._out(dashArray, ' ', dashPhase, ' d', NL);\n },\n setLineWidth: function (width) {\n this._out(width, ' w', NL);\n },\n setLineCap: function (lineCap) {\n this._out(lineCap, ' J', NL);\n },\n setLineJoin: function (lineJoin) {\n this._out(lineJoin, ' j', NL);\n },\n setMitterLimit: function (mitterLimit) {\n this._out(mitterLimit, ' M', NL);\n },\n save: function () {\n this._contextStack.push(this._context());\n this._out('q', NL);\n },\n restore: function () {\n this._out('Q', NL);\n this._context(this._contextStack.pop());\n },\n moveTo: function (x, y) {\n this._out(x, ' ', y, ' m', NL);\n },\n lineTo: function (x, y) {\n this._out(x, ' ', y, ' l', NL);\n },\n bezier: function (x1, y1, x2, y2, x3, y3) {\n this._out(x1, ' ', y1, ' ', x2, ' ', y2, ' ', x3, ' ', y3, ' c', NL);\n },\n bezier1: function (x1, y1, x3, y3) {\n this._out(x1, ' ', y1, ' ', x3, ' ', y3, ' y', NL);\n },\n bezier2: function (x2, y2, x3, y3) {\n this._out(x2, ' ', y2, ' ', x3, ' ', y3, ' v', NL);\n },\n close: function () {\n this._out('h', NL);\n },\n rect: function (x, y, w, h) {\n this._out(x, ' ', y, ' ', w, ' ', h, ' re', NL);\n },\n ellipse: function (x, y, rx, ry) {\n function _X(v) {\n return x + v;\n }\n function _Y(v) {\n return y + v;\n }\n var k = 0.5522847498307936;\n this.moveTo(_X(0), _Y(ry));\n this.bezier(_X(rx * k), _Y(ry), _X(rx), _Y(ry * k), _X(rx), _Y(0));\n this.bezier(_X(rx), _Y(-ry * k), _X(rx * k), _Y(-ry), _X(0), _Y(-ry));\n this.bezier(_X(-rx * k), _Y(-ry), _X(-rx), _Y(-ry * k), _X(-rx), _Y(0));\n this.bezier(_X(-rx), _Y(ry * k), _X(-rx * k), _Y(ry), _X(0), _Y(ry));\n },\n circle: function (x, y, r) {\n this.ellipse(x, y, r, r);\n },\n stroke: function () {\n this._out('S', NL);\n },\n nop: function () {\n this._out('n', NL);\n },\n clip: function () {\n this._out('W n', NL);\n },\n clipStroke: function () {\n this._out('W S', NL);\n },\n closeStroke: function () {\n this._out('s', NL);\n },\n fill: function () {\n this._out('f', NL);\n },\n fillStroke: function () {\n this._out('B', NL);\n },\n drawImage: function (url) {\n var img = this._pdf.getImage(url);\n if (img) {\n this._xResources[img._resourceName] = img;\n this._out(img._resourceName, ' Do', NL);\n }\n },\n comment: function (txt) {\n var self = this;\n txt.split(/\\r?\\n/g).forEach(function (line) {\n self._out('% ', line, NL);\n });\n },\n _context: function (val) {\n if (val != null) {\n this._opacity = val.opacity;\n this._matrix = val.matrix;\n } else {\n return {\n opacity: this._opacity,\n matrix: this._matrix\n };\n }\n },\n _toPage: function (p) {\n var m = this._matrix;\n var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];\n return {\n x: a * p.x + c * p.y + e,\n y: b * p.x + d * p.y + f\n };\n }\n }, PDFDictionary);\n function unquote(str) {\n return str.replace(/^\\s*(['\"])(.*)\\1\\s*$/, '$2');\n }\n function parseFontDef(fontdef) {\n var rx = /^\\s*((normal|italic)\\s+)?((normal|small-caps)\\s+)?((normal|bold|\\d+)\\s+)?(([0-9.]+)(px|pt))(\\/(([0-9.]+)(px|pt)|normal))?\\s+(.*?)\\s*$/i;\n var m = rx.exec(fontdef);\n if (!m) {\n return {\n fontSize: 12,\n fontFamily: 'sans-serif'\n };\n }\n var fontSize = m[8] ? parseInt(m[8], 10) : 12;\n return {\n italic: m[2] && m[2].toLowerCase() == 'italic',\n variant: m[4],\n bold: m[6] && /bold|700/i.test(m[6]),\n fontSize: fontSize,\n lineHeight: m[12] ? m[12] == 'normal' ? fontSize : parseInt(m[12], 10) : null,\n fontFamily: m[14].split(/\\s*,\\s*/g).map(unquote)\n };\n }\n function getFontURL(style) {\n function mkFamily(name) {\n if (style.bold) {\n name += '|bold';\n }\n if (style.italic) {\n name += '|italic';\n }\n return name.toLowerCase();\n }\n var fontFamily = style.fontFamily;\n var name, url;\n if (fontFamily instanceof Array) {\n for (var i = 0; i < fontFamily.length; ++i) {\n name = mkFamily(fontFamily[i]);\n url = FONT_MAPPINGS[name];\n if (url) {\n break;\n }\n }\n } else {\n url = FONT_MAPPINGS[fontFamily.toLowerCase()];\n }\n while (typeof url == 'function') {\n url = url();\n }\n if (!url) {\n url = 'Times-Roman';\n }\n return url;\n }\n var FONT_MAPPINGS = {\n 'serif': 'Times-Roman',\n 'serif|bold': 'Times-Bold',\n 'serif|italic': 'Times-Italic',\n 'serif|bold|italic': 'Times-BoldItalic',\n 'sans-serif': 'Helvetica',\n 'sans-serif|bold': 'Helvetica-Bold',\n 'sans-serif|italic': 'Helvetica-Oblique',\n 'sans-serif|bold|italic': 'Helvetica-BoldOblique',\n 'monospace': 'Courier',\n 'monospace|bold': 'Courier-Bold',\n 'monospace|italic': 'Courier-Oblique',\n 'monospace|bold|italic': 'Courier-BoldOblique',\n 'zapfdingbats': 'ZapfDingbats',\n 'zapfdingbats|bold': 'ZapfDingbats',\n 'zapfdingbats|italic': 'ZapfDingbats',\n 'zapfdingbats|bold|italic': 'ZapfDingbats'\n };\n function fontAlias(alias, name) {\n alias = alias.toLowerCase();\n FONT_MAPPINGS[alias] = function () {\n return FONT_MAPPINGS[name];\n };\n FONT_MAPPINGS[alias + '|bold'] = function () {\n return FONT_MAPPINGS[name + '|bold'];\n };\n FONT_MAPPINGS[alias + '|italic'] = function () {\n return FONT_MAPPINGS[name + '|italic'];\n };\n FONT_MAPPINGS[alias + '|bold|italic'] = function () {\n return FONT_MAPPINGS[name + '|bold|italic'];\n };\n }\n fontAlias('Times New Roman', 'serif');\n fontAlias('Courier New', 'monospace');\n fontAlias('Arial', 'sans-serif');\n fontAlias('Helvetica', 'sans-serif');\n fontAlias('Verdana', 'sans-serif');\n fontAlias('Tahoma', 'sans-serif');\n fontAlias('Georgia', 'sans-serif');\n fontAlias('Monaco', 'monospace');\n fontAlias('Andale Mono', 'monospace');\n function defineFont(name, url) {\n if (arguments.length == 1) {\n for (var i in name) {\n if (hasOwnProperty(name, i)) {\n defineFont(i, name[i]);\n }\n }\n } else {\n name = name.toLowerCase();\n FONT_MAPPINGS[name] = url;\n switch (name) {\n case 'dejavu sans':\n FONT_MAPPINGS['sans-serif'] = url;\n break;\n case 'dejavu sans|bold':\n FONT_MAPPINGS['sans-serif|bold'] = url;\n break;\n case 'dejavu sans|italic':\n FONT_MAPPINGS['sans-serif|italic'] = url;\n break;\n case 'dejavu sans|bold|italic':\n FONT_MAPPINGS['sans-serif|bold|italic'] = url;\n break;\n case 'dejavu serif':\n FONT_MAPPINGS['serif'] = url;\n break;\n case 'dejavu serif|bold':\n FONT_MAPPINGS['serif|bold'] = url;\n break;\n case 'dejavu serif|italic':\n FONT_MAPPINGS['serif|italic'] = url;\n break;\n case 'dejavu serif|bold|italic':\n FONT_MAPPINGS['serif|bold|italic'] = url;\n break;\n case 'dejavu mono':\n FONT_MAPPINGS['monospace'] = url;\n break;\n case 'dejavu mono|bold':\n FONT_MAPPINGS['monospace|bold'] = url;\n break;\n case 'dejavu mono|italic':\n FONT_MAPPINGS['monospace|italic'] = url;\n break;\n case 'dejavu mono|bold|italic':\n FONT_MAPPINGS['monospace|bold|italic'] = url;\n break;\n }\n }\n }\n function mmul(a, b) {\n var a1 = a[0], b1 = a[1], c1 = a[2], d1 = a[3], e1 = a[4], f1 = a[5];\n var a2 = b[0], b2 = b[1], c2 = b[2], d2 = b[3], e2 = b[4], f2 = b[5];\n return [\n a1 * a2 + b1 * c2,\n a1 * b2 + b1 * d2,\n c1 * a2 + d1 * c2,\n c1 * b2 + d1 * d2,\n e1 * a2 + f1 * c2 + e2,\n e1 * b2 + f1 * d2 + f2\n ];\n }\n function isIdentityMatrix(m) {\n return m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1 && m[4] === 0 && m[5] === 0;\n }\n var TEXT_RENDERING_MODE = {\n fill: 0,\n stroke: 1,\n fillAndStroke: 2,\n invisible: 3,\n fillAndClip: 4,\n strokeAndClip: 5,\n fillStrokeClip: 6,\n clip: 7\n };\n var TEXT_RENDERING_MODE$1 = TEXT_RENDERING_MODE;\n var DASH_PATTERNS = {\n dash: [4],\n dashDot: [\n 4,\n 2,\n 1,\n 2\n ],\n dot: [\n 1,\n 2\n ],\n longDash: [\n 8,\n 2\n ],\n longDashDot: [\n 8,\n 2,\n 1,\n 2\n ],\n longDashDotDot: [\n 8,\n 2,\n 1,\n 2,\n 1,\n 2\n ],\n solid: []\n };\n var LINE_CAP = {\n butt: 0,\n round: 1,\n square: 2\n };\n var LINE_JOIN = {\n miter: 0,\n round: 1,\n bevel: 2\n };\n function render(group, callback) {\n var fonts = [], images = {}, options = group.options;\n function getOption(name, defval, hash) {\n if (!hash) {\n hash = options;\n }\n if (hash.pdf && hash.pdf[name] != null) {\n return hash.pdf[name];\n }\n return defval;\n }\n var multiPage = getOption('multiPage');\n var imgDPI = getOption('imgDPI');\n if (imgDPI) {\n clearImageCache();\n }\n group.traverse(function (element) {\n dispatch({\n Image: function (element) {\n var url = element.src();\n if (imgDPI) {\n var box = element.bbox().size;\n var prev = images[url];\n box = {\n width: Math.ceil(box.width * imgDPI / 72),\n height: Math.ceil(box.height * imgDPI / 72)\n };\n if (prev) {\n box.width = Math.max(prev.width, box.width);\n box.height = Math.max(prev.height, box.height);\n }\n images[url] = box;\n } else {\n images[url] = null;\n }\n },\n Text: function (element) {\n var style = parseFontDef(element.options.font);\n var url = getFontURL(style);\n if (fonts.indexOf(url) < 0) {\n fonts.push(url);\n }\n }\n }, element);\n });\n function doIt() {\n if (--count > 0) {\n return;\n }\n var pdf = new PDFDocument({\n producer: getOption('producer'),\n title: getOption('title'),\n author: getOption('author'),\n subject: getOption('subject'),\n keywords: getOption('keywords'),\n creator: getOption('creator'),\n date: getOption('date'),\n autoPrint: getOption('autoPrint')\n });\n function drawPage(group) {\n var options = group.options;\n var tmp = optimize(group);\n var bbox = tmp.bbox;\n group = tmp.root;\n var paperSize = getOption('paperSize', getOption('paperSize', 'auto'), options), addMargin = false;\n if (paperSize == 'auto') {\n if (bbox) {\n var size = bbox.getSize();\n paperSize = [\n size.width,\n size.height\n ];\n addMargin = true;\n var origin = bbox.getOrigin();\n tmp = new drawing.Group();\n tmp.transform(new kendoGeometry.Matrix(1, 0, 0, 1, -origin.x, -origin.y));\n tmp.append(group);\n group = tmp;\n } else {\n paperSize = 'A4';\n }\n }\n var page;\n page = pdf.addPage({\n paperSize: paperSize,\n margin: getOption('margin', getOption('margin'), options),\n addMargin: addMargin,\n landscape: getOption('landscape', getOption('landscape', false), options)\n });\n drawElement(group, page, pdf);\n }\n if (multiPage) {\n group.children.forEach(drawPage);\n } else {\n drawPage(group);\n }\n callback(pdf.render(), pdf);\n }\n var count = 2;\n loadFonts(fonts, doIt);\n loadImages(images, doIt, {\n jpegQuality: getOption('jpegQuality', 0.92),\n keepPNG: getOption('keepPNG', false)\n });\n }\n function toDataURL(group, callback) {\n render(group, function (data) {\n callback('data:application/pdf;base64,' + data.base64());\n });\n }\n function toBlob(group, callback) {\n render(group, function (data) {\n callback(new window.Blob([data.get()], { type: 'application/pdf' }));\n });\n }\n function saveAs$1(group, filename, proxy, callback) {\n if (window.Blob && !supportBrowser.safari) {\n toBlob(group, function (blob) {\n kendo.saveAs({\n dataURI: blob,\n fileName: filename\n });\n if (callback) {\n callback(blob);\n }\n });\n } else {\n toDataURL(group, function (dataURL) {\n kendo.saveAs({\n dataURI: dataURL,\n fileName: filename,\n proxyURL: proxy\n });\n if (callback) {\n callback(dataURL);\n }\n });\n }\n }\n function dispatch(handlers, element) {\n var handler = handlers[element.nodeType];\n if (handler) {\n return handler.call.apply(handler, arguments);\n }\n return element;\n }\n function drawElement(element, page, pdf) {\n if (element.options._pdfDebug) {\n page.comment('BEGIN: ' + element.options._pdfDebug);\n }\n var transform = element.transform();\n var opacity = element.opacity();\n page.save();\n if (opacity != null && opacity < 1) {\n page.setOpacity(opacity);\n }\n setStrokeOptions(element, page, pdf);\n setFillOptions(element, page, pdf);\n if (transform) {\n var m = transform.matrix();\n page.transform(m.a, m.b, m.c, m.d, m.e, m.f);\n }\n setClipping(element, page, pdf);\n dispatch({\n Path: drawPath,\n MultiPath: drawMultiPath,\n Circle: drawCircle,\n Arc: drawArc,\n Text: drawText,\n Image: drawImage,\n Group: drawGroup,\n Rect: drawRect\n }, element, page, pdf);\n page.restore();\n if (element.options._pdfDebug) {\n page.comment('END: ' + element.options._pdfDebug);\n }\n }\n function setStrokeOptions(element, page) {\n var stroke = element.stroke && element.stroke();\n if (!stroke) {\n return;\n }\n var color = stroke.color;\n if (color) {\n color = parseColor$1(color);\n if (color == null) {\n return;\n }\n page.setStrokeColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setStrokeOpacity(color.a);\n }\n }\n var width = stroke.width;\n if (width != null) {\n if (width === 0) {\n return;\n }\n page.setLineWidth(width);\n }\n var dashType = stroke.dashType;\n if (dashType) {\n page.setDashPattern(DASH_PATTERNS[dashType], 0);\n }\n var lineCap = stroke.lineCap;\n if (lineCap) {\n page.setLineCap(LINE_CAP[lineCap]);\n }\n var lineJoin = stroke.lineJoin;\n if (lineJoin) {\n page.setLineJoin(LINE_JOIN[lineJoin]);\n }\n var opacity = stroke.opacity;\n if (opacity != null) {\n page.setStrokeOpacity(opacity);\n }\n }\n function setFillOptions(element, page) {\n var fill = element.fill && element.fill();\n if (!fill) {\n return;\n }\n if (fill instanceof drawing.Gradient) {\n return;\n }\n var color = fill.color;\n if (color) {\n color = parseColor$1(color);\n if (color == null) {\n return;\n }\n page.setFillColor(color.r, color.g, color.b);\n if (color.a != 1) {\n page.setFillOpacity(color.a);\n }\n }\n var opacity = fill.opacity;\n if (opacity != null) {\n page.setFillOpacity(opacity);\n }\n }\n function setClipping(element, page, pdf) {\n var clip = element.clip();\n if (clip) {\n _drawPath(clip, page, pdf);\n page.clip();\n }\n }\n function shouldDraw(thing) {\n return thing && (thing instanceof drawing.Gradient || thing.color && !/^(none|transparent)$/i.test(thing.color) && (thing.width == null || thing.width > 0) && (thing.opacity == null || thing.opacity > 0));\n }\n function maybeGradient(element, page, pdf, stroke) {\n var fill = element.fill();\n if (fill instanceof drawing.Gradient) {\n if (stroke) {\n page.clipStroke();\n } else {\n page.clip();\n }\n var isRadial = fill instanceof drawing.RadialGradient;\n var start, end;\n if (isRadial) {\n start = {\n x: fill.center().x,\n y: fill.center().y,\n r: 0\n };\n end = {\n x: fill.center().x,\n y: fill.center().y,\n r: fill.radius()\n };\n } else {\n start = {\n x: fill.start().x,\n y: fill.start().y\n };\n end = {\n x: fill.end().x,\n y: fill.end().y\n };\n }\n var stops = fill.stops.elements().map(function (stop) {\n var offset = stop.offset();\n if (/%$/.test(offset)) {\n offset = parseFloat(offset) / 100;\n } else {\n offset = parseFloat(offset);\n }\n var color = parseColor$1(stop.color());\n color.a *= stop.opacity();\n return {\n offset: offset,\n color: color\n };\n });\n stops.unshift(stops[0]);\n stops.push(stops[stops.length - 1]);\n var gradient = {\n userSpace: fill.userSpace(),\n type: isRadial ? 'radial' : 'linear',\n start: start,\n end: end,\n stops: stops\n };\n var box = element.rawBBox();\n var tl = box.topLeft(), size = box.getSize();\n box = {\n left: tl.x,\n top: tl.y,\n width: size.width,\n height: size.height\n };\n page.gradient(gradient, box);\n return true;\n }\n }\n function maybeFillStroke(element, page, pdf) {\n if (shouldDraw(element.fill()) && shouldDraw(element.stroke())) {\n if (!maybeGradient(element, page, pdf, true)) {\n page.fillStroke();\n }\n } else if (shouldDraw(element.fill())) {\n if (!maybeGradient(element, page, pdf, false)) {\n page.fill();\n }\n } else if (shouldDraw(element.stroke())) {\n page.stroke();\n } else {\n page.nop();\n }\n }\n function maybeDrawRect(path, page) {\n var segments = path.segments;\n if (segments.length == 4 && path.options.closed) {\n var a = [];\n for (var i = 0; i < segments.length; ++i) {\n if (segments[i].controlIn()) {\n return false;\n }\n a[i] = segments[i].anchor();\n }\n var isRect = a[0].y == a[1].y && a[1].x == a[2].x && a[2].y == a[3].y && a[3].x == a[0].x || a[0].x == a[1].x && a[1].y == a[2].y && a[2].x == a[3].x && a[3].y == a[0].y;\n if (isRect) {\n page.rect(a[0].x, a[0].y, a[2].x - a[0].x, a[2].y - a[0].y);\n return true;\n }\n }\n }\n function _drawPath(element, page, pdf) {\n var segments = element.segments;\n if (segments.length === 0) {\n return;\n }\n if (!maybeDrawRect(element, page, pdf)) {\n for (var prev, i = 0; i < segments.length; ++i) {\n var seg = segments[i];\n var anchor = seg.anchor();\n if (!prev) {\n page.moveTo(anchor.x, anchor.y);\n } else {\n var prevOut = prev.controlOut();\n var controlIn = seg.controlIn();\n if (prevOut && controlIn) {\n page.bezier(prevOut.x, prevOut.y, controlIn.x, controlIn.y, anchor.x, anchor.y);\n } else {\n page.lineTo(anchor.x, anchor.y);\n }\n }\n prev = seg;\n }\n if (element.options.closed) {\n page.close();\n }\n }\n }\n function drawPath(element, page, pdf) {\n _drawPath(element, page, pdf);\n maybeFillStroke(element, page, pdf);\n }\n function drawMultiPath(element, page, pdf) {\n var paths = element.paths;\n for (var i = 0; i < paths.length; ++i) {\n _drawPath(paths[i], page, pdf);\n }\n maybeFillStroke(element, page, pdf);\n }\n function drawCircle(element, page, pdf) {\n var g = element.geometry();\n page.circle(g.center.x, g.center.y, g.radius);\n maybeFillStroke(element, page, pdf);\n }\n function drawArc(element, page, pdf) {\n var points = element.geometry().curvePoints();\n page.moveTo(points[0].x, points[0].y);\n for (var i = 1; i < points.length;) {\n page.bezier(points[i].x, points[i++].y, points[i].x, points[i++].y, points[i].x, points[i++].y);\n }\n maybeFillStroke(element, page, pdf);\n }\n function drawText(element, page) {\n var style = parseFontDef(element.options.font);\n var pos = element._position;\n var mode;\n if (element.fill() && element.stroke()) {\n mode = TEXT_RENDERING_MODE$1.fillAndStroke;\n } else if (element.fill()) {\n mode = TEXT_RENDERING_MODE$1.fill;\n } else if (element.stroke()) {\n mode = TEXT_RENDERING_MODE$1.stroke;\n }\n page.transform(1, 0, 0, -1, pos.x, pos.y + style.fontSize);\n page.beginText();\n page.setFont(getFontURL(style), style.fontSize);\n page.setTextRenderingMode(mode);\n page.showText(element.content(), element._pdfRect ? element._pdfRect.width() : null);\n page.endText();\n }\n function drawGroup(element, page, pdf) {\n if (element._pdfLink) {\n page.addLink(element._pdfLink.url, element._pdfLink);\n }\n var children = element.children;\n for (var i = 0; i < children.length; ++i) {\n drawElement(children[i], page, pdf);\n }\n }\n function drawImage(element, page) {\n var url = element.src();\n if (!url) {\n return;\n }\n var rect = element.rect();\n var tl = rect.getOrigin();\n var sz = rect.getSize();\n page.transform(sz.width, 0, 0, -sz.height, tl.x, tl.y + sz.height);\n page.drawImage(url);\n }\n function drawRect(element, page, pdf) {\n var geometry = element.geometry();\n page.rect(geometry.origin.x, geometry.origin.y, geometry.size.width, geometry.size.height);\n maybeFillStroke(element, page, pdf);\n }\n function parseColor$1(value) {\n var color = kendo.parseColor(value, true);\n return color ? color.toRGB() : null;\n }\n function optimize(root) {\n var clipbox = false;\n var matrix = kendoGeometry.Matrix.unit();\n var currentBox = null;\n var changed;\n do {\n changed = false;\n root = opt(root);\n } while (root && changed);\n return {\n root: root,\n bbox: currentBox\n };\n function change(newShape) {\n changed = true;\n return newShape;\n }\n function visible(shape) {\n return shape.visible() && shape.opacity() > 0 && (shouldDraw(shape.fill()) || shouldDraw(shape.stroke()));\n }\n function optArray(a) {\n var b = [];\n for (var i = 0; i < a.length; ++i) {\n var el = opt(a[i]);\n if (el != null) {\n b.push(el);\n }\n }\n return b;\n }\n function withClipping(shape, f) {\n var saveclipbox = clipbox;\n var savematrix = matrix;\n if (shape.transform()) {\n matrix = matrix.multiplyCopy(shape.transform().matrix());\n }\n var clip = shape.clip();\n if (clip) {\n clip = clip.bbox();\n if (clip) {\n clip = clip.bbox(matrix);\n clipbox = clipbox ? kendoGeometry.Rect.intersect(clipbox, clip) : clip;\n }\n }\n try {\n return f();\n } finally {\n clipbox = saveclipbox;\n matrix = savematrix;\n }\n }\n function inClipbox(shape) {\n if (clipbox == null) {\n return false;\n }\n var box = shape.rawBBox().bbox(matrix);\n if (clipbox && box) {\n box = kendoGeometry.Rect.intersect(box, clipbox);\n }\n return box;\n }\n function opt(shape) {\n return withClipping(shape, function () {\n if (!(shape instanceof drawing.Group || shape instanceof drawing.MultiPath)) {\n var box = inClipbox(shape);\n if (!box) {\n return change(null);\n }\n currentBox = currentBox ? kendoGeometry.Rect.union(currentBox, box) : box;\n }\n return dispatch({\n Path: function (shape) {\n if (shape.segments.length === 0 || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n MultiPath: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n var el = new drawing.MultiPath(shape.options);\n el.paths = optArray(shape.paths);\n if (el.paths.length === 0) {\n return change(null);\n }\n return el;\n },\n Circle: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Arc: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Text: function (shape) {\n if (!/\\S/.test(shape.content()) || !visible(shape)) {\n return change(null);\n }\n return shape;\n },\n Image: function (shape) {\n if (!(shape.visible() && shape.opacity() > 0)) {\n return change(null);\n }\n return shape;\n },\n Group: function (shape) {\n if (!(shape.visible() && shape.opacity() > 0)) {\n return change(null);\n }\n var el = new drawing.Group(shape.options);\n el.children = optArray(shape.children);\n el._pdfLink = shape._pdfLink;\n if (shape !== root && el.children.length === 0 && !shape._pdfLink) {\n return change(null);\n }\n return el;\n },\n Rect: function (shape) {\n if (!visible(shape)) {\n return change(null);\n }\n return shape;\n }\n }, shape);\n });\n }\n }\n function exportPDF(group, options) {\n var promise = util.createPromise();\n for (var i in options) {\n if (i == 'margin' && group.options.pdf && group.options.pdf._ignoreMargin) {\n continue;\n }\n group.options.set('pdf.' + i, options[i]);\n }\n toDataURL(group, promise.resolve);\n return promise;\n }\n function exportPDFToBlob(group, options) {\n var promise = util.createPromise();\n for (var i in options) {\n if (i == 'margin' && group.options.pdf && group.options.pdf._ignoreMargin) {\n continue;\n }\n group.options.set('pdf.' + i, options[i]);\n }\n if (window.Blob && !supportBrowser.safari) {\n toBlob(group, promise.resolve);\n } else {\n toDataURL(group, promise.resolve);\n }\n return promise;\n }\n kendo.deepExtend(kendo.pdf, {\n Document: PDFDocument,\n BinaryStream: BinaryStream,\n defineFont: defineFont,\n parseFontDef: parseFontDef,\n getFontURL: getFontURL,\n loadFonts: loadFonts,\n loadImages: loadImages,\n getPaperOptions: getPaperOptions,\n clearImageCache: clearImageCache,\n TEXT_RENDERING_MODE: TEXT_RENDERING_MODE,\n exportPDF: exportPDF,\n exportPDFToBlob: exportPDFToBlob,\n saveAs: saveAs$1,\n toDataURL: toDataURL,\n toBlob: toBlob,\n render: render\n });\n kendo.drawing.exportPDF = kendo.pdf.exportPDF;\n kendo.drawing.pdf = kendo.pdf;\n }(kendo));\n return kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('pdf/mixins', ['pdf/core'], f);\n}(function () {\n (function ($, undefined) {\n kendo.PDFMixin = {\n extend: function (proto) {\n proto.events.push('pdfExport');\n proto.options.pdf = this.options;\n proto.saveAsPDF = this.saveAsPDF;\n proto._drawPDF = this._drawPDF;\n proto._drawPDFShadow = this._drawPDFShadow;\n },\n options: {\n fileName: 'Export.pdf',\n proxyURL: '',\n paperSize: 'auto',\n allPages: false,\n landscape: false,\n margin: null,\n title: null,\n author: null,\n subject: null,\n keywords: null,\n creator: 'Kendo UI PDF Generator v.' + kendo.version,\n date: null\n },\n saveAsPDF: function () {\n var progress = new $.Deferred();\n var promise = progress.promise();\n var args = { promise: promise };\n if (this.trigger('pdfExport', args)) {\n return;\n }\n var options = this.options.pdf;\n options.multiPage = options.multiPage || options.allPages;\n this._drawPDF(progress).then(function (root) {\n return kendo.drawing.exportPDF(root, options);\n }).done(function (dataURI) {\n kendo.saveAs({\n dataURI: dataURI,\n fileName: options.fileName,\n proxyURL: options.proxyURL,\n forceProxy: options.forceProxy,\n proxyTarget: options.proxyTarget\n });\n progress.resolve();\n }).fail(function (err) {\n progress.reject(err);\n });\n return promise;\n },\n _drawPDF: function (progress) {\n var promise = new $.Deferred();\n kendo.drawing.drawDOM(this.wrapper).done(function (group) {\n var args = {\n page: group,\n pageNumber: 1,\n progress: 1,\n totalPages: 1\n };\n progress.notify(args);\n promise.resolve(args.page);\n }).fail(function (err) {\n promise.reject(err);\n });\n return promise;\n },\n _drawPDFShadow: function (settings, drawOptions) {\n settings = settings || {};\n var wrapper = this.wrapper;\n var shadow = $('
');\n if (settings.width) {\n shadow.css({\n width: settings.width,\n overflow: 'visible'\n });\n }\n wrapper.before(shadow);\n shadow.append(settings.content || wrapper.clone(true, true));\n var defer = $.Deferred();\n setTimeout(function () {\n var promise = kendo.drawing.drawDOM(shadow, drawOptions);\n promise.always(function () {\n shadow.remove();\n }).then(function () {\n defer.resolve.apply(defer, arguments);\n }).fail(function () {\n defer.reject.apply(defer, arguments);\n }).progress(function () {\n defer.progress.apply(defer, arguments);\n });\n }, 15);\n return defer.promise();\n }\n };\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));\n(function (f, define) {\n define('kendo.pdf', [\n 'kendo.core',\n 'kendo.drawing',\n 'pdf/core',\n 'pdf/mixins'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'pdf',\n name: 'PDF export',\n description: 'PDF Generation framework',\n mixin: true,\n category: 'framework',\n depends: [\n 'core',\n 'drawing'\n ]\n };\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}