{"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","nextSubsetTag","subsetTag","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","def","PAPER_SIZE","a4","toLowerCase","unitsToPoints","min","left","top","right","bottom","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","FONT_CACHE","TTFFont","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","svg","upscale","blob","type","substring","FileReader","readAsArrayBuffer","xhr","Image","crossOrigin","createObjectURL","manyLoader","loadOne","urls","callback","next","ch","zeropad","Date","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","mm2pt","mm","cm2pt","cm","in2pt","inch","in","_","name","PDFName_cache","PDFName","makeHash","cacheColorGradientFunction","r1","g1","b1","r2","g2","b2","func","GRAD_COL_FUNCTIONS","attach","FunctionType","Domain","Range","N","C0","C1","cacheOpacityGradientFunction","GRAD_OPC_FUNCTIONS","makeGradientFunctions","stops","assemble","funcs","Functions","Bounds","offsets","Encode","prev","cur","prevColor","curColor","opacities","colors","color","r","g","pop","cacheColorGradient","isRadial","coords","shading","concat","forEach","GRAD_COL","Type","ShadingType","ColorSpace","Coords","Function","Extend","_resourceName","RESOURCE_COUNTER","cacheOpacityGradient","opacity","GRAD_OPC","AIS","CA","ca","SMask","S","G","PDFStream","Subtype","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","render$1","group","defval","doIt","drawPage","addMargin","origin","page","optimize","bbox","root","getSize","getOrigin","drawing","transform","kendoGeometry","Matrix","append","addPage","landscape","drawElement","count","PDFDocument","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","drawImage$1","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","clip","_drawPath","shouldDraw","thing","maybeGradient","tl","clipStroke","RadialGradient","center","radius","elements","stop","unshift","rawBBox","topLeft","maybeFillStroke","fillStroke","nop","maybeDrawRect","path","isRect","segments","closed","controlIn","anchor","rect","seg","prevOut","controlOut","bezier","lineTo","moveTo","close","paths","geometry","circle","points","curvePoints","mode","_position","TEXT_RENDERING_MODE$1","fillAndStroke","beginText","setFont","setTextRenderingMode","showText","content","_pdfRect","endText","_pdfLink","addLink","sz","ref","cornerRadius","ry","fromRect","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","extendStatic","kendoPdf","Directory","Table","HeadTable","LocaTable","HheaTable","MaxpTable","HmtxTable","GlyfTable","NameTable","PostTable","CmapTable","OS2Table","Subfont","BOM","PDFString","PDFHexString","PDFCatalog","PDFPageTree","SOF_CODES","PDFStandardFont","PDFFont","PDFToUnicodeCmap","PDFPage","TEXT_RENDERING_MODE","version","keyStr","enc1","enc2","enc3","enc4","chr1","chr2","chr3","charAt","tables","raw","scalerType","tableCount","searchRange","entrySelector","rangeShift","tag","checksum","readTable","Ctor","table","directoryLength","headOffset","tableData","sum","adjustment","this$1","maxpow2","pow","floor","LN2","file","definition","rawData","parse","create","constructor","fn","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","ARG_1_AND_2_ARE_WORDS","WE_HAVE_A_SCALE","MORE_COMPONENTS","WE_HAVE_AN_X_AND_Y_SCALE","WE_HAVE_A_TWO_BY_TWO","CompoundGlyph","prototypeAccessors$1","SimpleGlyph","prototypeAccessors","compound","defineProperties","idOffsets","old2new","anonymous","cache","glyphFor","loca","numberOfContours","glyph","glyphs","oldIds","NameEntry","platformID","platformSpecificID","languageID","nameID","stringOffset","nameRecords","strings","rec","postscriptEntry","postscriptName","psName","strTable","list","j","strCount","POSTSCRIPT_GLYPHS","numberOfGlyphs","limit","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","glyphNameIndex","names","code","index","mapping","indexes","post","renderCharmap","ncid2ogid","ogid2ngid","new_gid","charcode","gid","delta","segCount","segCountX2","deltas","rangeOffsets","startCode","endCode","startGlyph","codes","startCodes","endCodes","last","diff","CmapEntry","codeMap","self","idDelta","idRangeOffset","glyphId","ngroups","endCharCode","glyphCode","language","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","subset","unicodes","0","ngid2ogid","firstChar","nextGid","use","old_gid","reduce","cmap","encodeText","glyphsFor","glyf","new_gid_ids","old_gid_ids","lastChar","hmtx","OS/2","os2","directory","cidToGidMap","cid","numFonts","contents","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","catalog","pageTree","nameTree","info","objcount","objects","pages","FONTS","IMAGES","JavaScript","Names","JS","props","setPages","Producer","Title","Author","Subject","Keywords","Creator","CreationDate","paperOptions","contentWidth","contentHeight","Contents","Parent","MediaBox","_content","translate","xrefOffset","Size","Root","Info","getFont","getImage","asStream","getOpacityGS","forStroke","gs","_opacityGSCache","dict","utf16be","txt","escape","empty","compress","Filter","Length","pagesObj","Pages","Kids","Count","pageObj","colorSpace","bitsPerComponent","soi","ff","Width","Height","BitsPerComponent","Decode","mask","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","_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","proto","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 (typeof text === 'undefined' || text === null) {\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 ($) {\n window.kendo.pdf = window.kendo.pdf || {};\n var support = kendo.support;\n var supportBrowser = support.browser;\n var drawing = kendo.drawing;\n var util = drawing.util;\n var extendStatic = util.extendStatic;\n var kendoPdf = kendo.pdf;\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 var Directory = 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.readTable = function readTable(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 Directory.prototype.render = function render(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 Directory.prototype.checksum = function checksum(data) {\n data = BinaryStream(data);\n var sum = 0;\n while (!data.eof()) {\n sum += data.readLong();\n }\n return sum & 4294967295;\n };\n var Table = function Table(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 Table.prototype.raw = function raw() {\n return this.rawData.slice(this.offset, this.length);\n };\n Table.prototype.parse = function parse() {\n };\n var HeadTable = function (Table) {\n function HeadTable() {\n Table.apply(this, arguments);\n }\n extendStatic(HeadTable, Table);\n HeadTable.prototype = Object.create(Table && Table.prototype);\n HeadTable.prototype.constructor = HeadTable;\n HeadTable.fn = HeadTable.prototype;\n HeadTable.fn.init = HeadTable.fn.constructor;\n HeadTable.prototype.parse = function parse(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 HeadTable.prototype.render = function render(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 return HeadTable;\n }(Table);\n var LocaTable = function (Table) {\n function LocaTable() {\n Table.apply(this, arguments);\n }\n extendStatic(LocaTable, Table);\n LocaTable.prototype = Object.create(Table && Table.prototype);\n LocaTable.prototype.constructor = LocaTable;\n LocaTable.fn = LocaTable.prototype;\n LocaTable.fn.init = LocaTable.fn.constructor;\n LocaTable.prototype.parse = function parse(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 LocaTable.prototype.offsetOf = function offsetOf(id) {\n return this.offsets[id];\n };\n LocaTable.prototype.lengthOf = function lengthOf(id) {\n return this.offsets[id + 1] - this.offsets[id];\n };\n LocaTable.prototype.render = function render(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 return LocaTable;\n }(Table);\n var HheaTable = function (Table) {\n function HheaTable() {\n Table.apply(this, arguments);\n }\n extendStatic(HheaTable, Table);\n HheaTable.prototype = Object.create(Table && Table.prototype);\n HheaTable.prototype.constructor = HheaTable;\n HheaTable.fn = HheaTable.prototype;\n HheaTable.fn.init = HheaTable.fn.constructor;\n HheaTable.prototype.parse = function parse(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 HheaTable.prototype.render = function render(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 return HheaTable;\n }(Table);\n var MaxpTable = function (Table) {\n function MaxpTable() {\n Table.apply(this, arguments);\n }\n extendStatic(MaxpTable, Table);\n MaxpTable.prototype = Object.create(Table && Table.prototype);\n MaxpTable.prototype.constructor = MaxpTable;\n MaxpTable.fn = MaxpTable.prototype;\n MaxpTable.fn.init = MaxpTable.fn.constructor;\n MaxpTable.prototype.parse = function parse(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 MaxpTable.prototype.render = function render(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 return MaxpTable;\n }(Table);\n var HmtxTable = function (Table) {\n function HmtxTable() {\n Table.apply(this, arguments);\n }\n extendStatic(HmtxTable, Table);\n HmtxTable.prototype = Object.create(Table && Table.prototype);\n HmtxTable.prototype.constructor = HmtxTable;\n HmtxTable.fn = HmtxTable.prototype;\n HmtxTable.fn.init = HmtxTable.fn.constructor;\n HmtxTable.prototype.parse = function parse(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 HmtxTable.prototype.forGlyph = function forGlyph(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 HmtxTable.prototype.render = function render(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 return HmtxTable;\n }(Table);\n var GlyfTable = function () {\n var SimpleGlyph = function SimpleGlyph(raw) {\n this.raw = raw;\n };\n var prototypeAccessors = { compound: {} };\n prototypeAccessors.compound.get = function () {\n return false;\n };\n SimpleGlyph.prototype.render = function render() {\n return this.raw.get();\n };\n Object.defineProperties(SimpleGlyph.prototype, prototypeAccessors);\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 var CompoundGlyph = 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 var prototypeAccessors$1 = { compound: {} };\n prototypeAccessors$1.compound.get = function () {\n return true;\n };\n CompoundGlyph.prototype.render = function render(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 Object.defineProperties(CompoundGlyph.prototype, prototypeAccessors$1);\n return function (Table) {\n function anonymous() {\n Table.apply(this, arguments);\n }\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create(Table && Table.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.parse = function parse() {\n this.cache = {};\n };\n anonymous.prototype.glyphFor = function glyphFor(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 < 0 ? 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 anonymous.prototype.render = function render(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 if (out.offset() % 2) {\n out.writeByte(0);\n }\n offsets.push(out.offset());\n if (glyph) {\n out.write(glyph.render(old2new));\n }\n }\n if (out.offset() % 2) {\n out.writeByte(0);\n }\n offsets.push(out.offset());\n return {\n table: out.get(),\n offsets: offsets\n };\n };\n return anonymous;\n }(Table);\n }();\n var NameTable = function () {\n var NameEntry = 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 function (Table) {\n function anonymous() {\n Table.apply(this, arguments);\n }\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create(Table && Table.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.parse = function parse(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 anonymous.prototype.render = function render(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 return anonymous;\n }(Table);\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 function (Table) {\n function anonymous() {\n Table.apply(this, arguments);\n }\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create(Table && Table.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.parse = function parse(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 anonymous.prototype.glyphFor = function glyphFor(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 anonymous.prototype.render = function render(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 return anonymous;\n }(Table);\n }();\n var CmapTable = function () {\n var CmapEntry = 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 function (Table) {\n function anonymous() {\n Table.apply(this, arguments);\n }\n extendStatic(anonymous, Table);\n anonymous.prototype = Object.create(Table && Table.prototype);\n anonymous.prototype.constructor = anonymous;\n anonymous.fn = anonymous.prototype;\n anonymous.fn.init = anonymous.fn.constructor;\n anonymous.prototype.parse = function parse(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 anonymous.render = function render(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 return anonymous;\n }(Table);\n }();\n var OS2Table = function (Table) {\n function OS2Table() {\n Table.apply(this, arguments);\n }\n extendStatic(OS2Table, Table);\n OS2Table.prototype = Object.create(Table && Table.prototype);\n OS2Table.prototype.constructor = OS2Table;\n OS2Table.fn = OS2Table.prototype;\n OS2Table.fn.init = OS2Table.fn.constructor;\n OS2Table.prototype.parse = function parse(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 OS2Table.prototype.render = function render() {\n return this.raw();\n };\n return OS2Table;\n }(Table);\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 var Subfont = 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.use = function use(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 Subfont.prototype.encodeText = function encodeText(text) {\n return this.use(text);\n };\n Subfont.prototype.glyphIds = function glyphIds() {\n return sortedKeys(this.ogid2ngid);\n };\n Subfont.prototype.glyphsFor = function glyphsFor(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 Subfont.prototype.render = function render() {\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 Subfont.prototype.cidToGidMap = function cidToGidMap() {\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 var TTFFont = 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.parse = function parse() {\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 TTFFont.prototype.widthOfGlyph = function widthOfGlyph(glyph) {\n return this.hmtx.forGlyph(glyph).advance * this.scale;\n };\n TTFFont.prototype.makeSubset = function makeSubset() {\n return new Subfont(this);\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 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.call(img);\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 var svg = blob && blob.type === 'image/svg+xml' || /^data:image\\/svg\\+xml;/i.test(this.src.substring(0, 19));\n var upscale = size.width >= img.width || size.height >= img.height;\n if (!svg && upscale) {\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 var PDFDocument = 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 self.loadFonts = loadFonts;\n self.loadImages = loadImages;\n };\n PDFDocument.prototype.getFont = function getFont(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 PDFDocument.prototype.getImage = function getImage(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 PDFDocument.prototype.getOpacityGS = function getOpacityGS(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 PDFDocument.prototype.dict = function dict(props) {\n return new PDFDictionary(props);\n };\n PDFDocument.prototype.name = function name(str) {\n return _(str);\n };\n PDFDocument.prototype.stream = function stream(props, content) {\n return new PDFStream(content, props);\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 var PDFValue = function PDFValue() {\n };\n PDFValue.prototype.beforeRender = function beforeRender() {\n };\n var PDFString = function (PDFValue) {\n function PDFString(value, utf16be) {\n PDFValue.call(this);\n this.value = value;\n this.utf16be = Boolean(utf16be);\n }\n extendStatic(PDFString, PDFValue);\n PDFString.prototype = Object.create(PDFValue && PDFValue.prototype);\n PDFString.prototype.constructor = PDFString;\n PDFString.fn = PDFString.prototype;\n PDFString.fn.init = PDFString.fn.constructor;\n PDFString.prototype.render = function render(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 PDFString.prototype.toString = function toString() {\n return this.value;\n };\n return PDFString;\n }(PDFValue);\n var PDFHexString = function (PDFString) {\n function PDFHexString(value) {\n PDFString.call(this, value);\n this.value = value;\n }\n extendStatic(PDFHexString, PDFString);\n PDFHexString.prototype = Object.create(PDFString && PDFString.prototype);\n PDFHexString.prototype.constructor = PDFHexString;\n PDFHexString.fn = PDFHexString.prototype;\n PDFHexString.fn.init = PDFHexString.fn.constructor;\n PDFHexString.prototype.render = function render(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 return PDFHexString;\n }(PDFString);\n var PDFName = function (PDFValue) {\n function PDFName(name) {\n PDFValue.call(this);\n this.name = name;\n }\n extendStatic(PDFName, PDFValue);\n PDFName.prototype = Object.create(PDFValue && PDFValue.prototype);\n PDFName.prototype.constructor = PDFName;\n PDFName.fn = PDFName.prototype;\n PDFName.fn.init = PDFName.fn.constructor;\n PDFName.get = function get(name) {\n return _(name);\n };\n PDFName.prototype.render = function render(out) {\n out('/' + this.escape());\n };\n PDFName.prototype.escape = function escape() {\n return this.name.replace(/[^\\x21-\\x7E]/g, function (c) {\n return '#' + zeropad(c.charCodeAt(0).toString(16), 2);\n });\n };\n PDFName.prototype.toString = function toString() {\n return this.name;\n };\n return PDFName;\n }(PDFValue);\n var PDFName_cache = {};\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 = function (PDFValue) {\n function PDFDictionary(props) {\n PDFValue.call(this);\n this.props = props;\n }\n extendStatic(PDFDictionary, PDFValue);\n PDFDictionary.prototype = Object.create(PDFValue && PDFValue.prototype);\n PDFDictionary.prototype.constructor = PDFDictionary;\n PDFDictionary.fn = PDFDictionary.prototype;\n PDFDictionary.fn.init = PDFDictionary.fn.constructor;\n PDFDictionary.prototype.render = function render(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 return PDFDictionary;\n }(PDFValue);\n var PDFStream = function (PDFValue) {\n function PDFStream(data, props, compress) {\n PDFValue.call(this);\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 extendStatic(PDFStream, PDFValue);\n PDFStream.prototype = Object.create(PDFValue && PDFValue.prototype);\n PDFStream.prototype.constructor = PDFStream;\n PDFStream.fn = PDFStream.prototype;\n PDFStream.fn.init = PDFStream.fn.constructor;\n PDFStream.prototype.render = function render(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 return PDFStream;\n }(PDFValue);\n var PDFCatalog = function (PDFDictionary) {\n function PDFCatalog() {\n PDFDictionary.call(this, { Type: _('Catalog') });\n }\n extendStatic(PDFCatalog, PDFDictionary);\n PDFCatalog.prototype = Object.create(PDFDictionary && PDFDictionary.prototype);\n PDFCatalog.prototype.constructor = PDFCatalog;\n PDFCatalog.fn = PDFCatalog.prototype;\n PDFCatalog.fn.init = PDFCatalog.fn.constructor;\n PDFCatalog.prototype.setPages = function setPages(pagesObj) {\n this.props.Pages = pagesObj;\n };\n return PDFCatalog;\n }(PDFDictionary);\n var PDFPageTree = function (PDFDictionary) {\n function PDFPageTree() {\n PDFDictionary.call(this, {\n Type: _('Pages'),\n Kids: [],\n Count: 0\n });\n }\n extendStatic(PDFPageTree, PDFDictionary);\n PDFPageTree.prototype = Object.create(PDFDictionary && PDFDictionary.prototype);\n PDFPageTree.prototype.constructor = PDFPageTree;\n PDFPageTree.fn = PDFPageTree.prototype;\n PDFPageTree.fn.init = PDFPageTree.fn.constructor;\n PDFPageTree.prototype.addPage = function addPage(pageObj) {\n this.props.Kids.push(pageObj);\n this.props.Count++;\n };\n return PDFPageTree;\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 var PDFJpegImage = 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 var PDFRawImage = 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 = function (PDFDictionary) {\n function PDFStandardFont(name) {\n PDFDictionary.call(this, {\n Type: _('Font'),\n Subtype: _('Type1'),\n BaseFont: _(name)\n });\n this._resourceName = _('F' + ++RESOURCE_COUNTER);\n }\n extendStatic(PDFStandardFont, PDFDictionary);\n PDFStandardFont.prototype = Object.create(PDFDictionary && PDFDictionary.prototype);\n PDFStandardFont.prototype.constructor = PDFStandardFont;\n PDFStandardFont.fn = PDFStandardFont.prototype;\n PDFStandardFont.fn.init = PDFStandardFont.fn.constructor;\n PDFStandardFont.prototype.encodeText = function encodeText(str) {\n return new PDFString(String(str));\n };\n return PDFStandardFont;\n }(PDFDictionary);\n var PDFFont = function (PDFDictionary) {\n function PDFFont(pdf, font, props) {\n PDFDictionary.call(this, {});\n props = this.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 extendStatic(PDFFont, PDFDictionary);\n PDFFont.prototype = Object.create(PDFDictionary && PDFDictionary.prototype);\n PDFFont.prototype.constructor = PDFFont;\n PDFFont.fn = PDFFont.prototype;\n PDFFont.fn.init = PDFFont.fn.constructor;\n PDFFont.prototype.encodeText = function encodeText(text) {\n return new PDFHexString(this._sub.encodeText(String(text)));\n };\n PDFFont.prototype.getTextWidth = function getTextWidth(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 PDFFont.prototype.beforeRender = function beforeRender() {\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 PDFFont.prototype._makeCidToGidMap = function _makeCidToGidMap() {\n return new PDFStream(BinaryStream(this._sub.cidToGidMap()), null, true);\n };\n return PDFFont;\n }(PDFDictionary);\n var PDFToUnicodeCmap = function (PDFValue) {\n function PDFToUnicodeCmap(firstChar, lastChar, map) {\n PDFValue.call(this);\n this.firstChar = firstChar;\n this.lastChar = lastChar;\n this.map = map;\n }\n extendStatic(PDFToUnicodeCmap, PDFValue);\n PDFToUnicodeCmap.prototype = Object.create(PDFValue && PDFValue.prototype);\n PDFToUnicodeCmap.prototype.constructor = PDFToUnicodeCmap;\n PDFToUnicodeCmap.fn = PDFToUnicodeCmap.prototype;\n PDFToUnicodeCmap.fn.init = PDFToUnicodeCmap.fn.constructor;\n PDFToUnicodeCmap.prototype.render = function render(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 return PDFToUnicodeCmap;\n }(PDFValue);\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 = function (PDFDictionary) {\n function PDFPage(pdf, props) {\n PDFDictionary.call(this, 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;\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 extendStatic(PDFPage, PDFDictionary);\n PDFPage.prototype = Object.create(PDFDictionary && PDFDictionary.prototype);\n PDFPage.prototype.constructor = PDFPage;\n PDFPage.fn = PDFPage.prototype;\n PDFPage.fn.init = PDFPage.fn.constructor;\n PDFPage.prototype._out = function _out() {\n this._content.data.apply(null, arguments);\n };\n PDFPage.prototype.transform = function transform(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 PDFPage.prototype.translate = function translate(dx, dy) {\n this.transform(1, 0, 0, 1, dx, dy);\n };\n PDFPage.prototype.scale = function scale(sx, sy) {\n this.transform(sx, 0, 0, sy, 0, 0);\n };\n PDFPage.prototype.rotate = function rotate(angle) {\n var cos = Math.cos(angle), sin = Math.sin(angle);\n this.transform(cos, sin, -sin, cos, 0, 0);\n };\n PDFPage.prototype.beginText = function beginText() {\n this._textMode = true;\n this._out('BT', NL);\n };\n PDFPage.prototype.endText = function endText() {\n this._textMode = false;\n this._out('ET', NL);\n };\n PDFPage.prototype._requireTextMode = function _requireTextMode() {\n if (!this._textMode) {\n throw new Error('Text mode required; call page.beginText() first');\n }\n };\n PDFPage.prototype._requireFont = function _requireFont() {\n if (!this._font) {\n throw new Error('No font selected; call page.setFont() first');\n }\n };\n PDFPage.prototype.setFont = function setFont(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 PDFPage.prototype.setTextLeading = function setTextLeading(size) {\n this._requireTextMode();\n this._out(size, ' TL', NL);\n };\n PDFPage.prototype.setTextRenderingMode = function setTextRenderingMode(mode) {\n this._requireTextMode();\n this._out(mode, ' Tr', NL);\n };\n PDFPage.prototype.showText = function showText(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 PDFPage.prototype.showTextNL = function showTextNL(text) {\n this._requireFont();\n this._out(this._font.encodeText(text), ' \\'', NL);\n };\n PDFPage.prototype.addLink = function addLink(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 PDFPage.prototype.setStrokeColor = function setStrokeColor(r, g, b) {\n this._out(r, ' ', g, ' ', b, ' RG', NL);\n };\n PDFPage.prototype.setOpacity = function setOpacity(opacity) {\n this.setFillOpacity(opacity);\n this.setStrokeOpacity(opacity);\n this._opacity *= opacity;\n };\n PDFPage.prototype.setStrokeOpacity = function setStrokeOpacity(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 PDFPage.prototype.setFillColor = function setFillColor(r, g, b) {\n this._out(r, ' ', g, ' ', b, ' rg', NL);\n };\n PDFPage.prototype.setFillOpacity = function setFillOpacity(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 PDFPage.prototype.gradient = function gradient(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 PDFPage.prototype.setDashPattern = function setDashPattern(dashArray, dashPhase) {\n this._out(dashArray, ' ', dashPhase, ' d', NL);\n };\n PDFPage.prototype.setLineWidth = function setLineWidth(width) {\n this._out(width, ' w', NL);\n };\n PDFPage.prototype.setLineCap = function setLineCap(lineCap) {\n this._out(lineCap, ' J', NL);\n };\n PDFPage.prototype.setLineJoin = function setLineJoin(lineJoin) {\n this._out(lineJoin, ' j', NL);\n };\n PDFPage.prototype.setMitterLimit = function setMitterLimit(mitterLimit) {\n this._out(mitterLimit, ' M', NL);\n };\n PDFPage.prototype.save = function save() {\n this._contextStack.push(this._context());\n this._out('q', NL);\n };\n PDFPage.prototype.restore = function restore() {\n this._out('Q', NL);\n this._context(this._contextStack.pop());\n };\n PDFPage.prototype.moveTo = function moveTo(x, y) {\n this._out(x, ' ', y, ' m', NL);\n };\n PDFPage.prototype.lineTo = function lineTo(x, y) {\n this._out(x, ' ', y, ' l', NL);\n };\n PDFPage.prototype.bezier = function bezier(x1, y1, x2, y2, x3, y3) {\n this._out(x1, ' ', y1, ' ', x2, ' ', y2, ' ', x3, ' ', y3, ' c', NL);\n };\n PDFPage.prototype.bezier1 = function bezier1(x1, y1, x3, y3) {\n this._out(x1, ' ', y1, ' ', x3, ' ', y3, ' y', NL);\n };\n PDFPage.prototype.bezier2 = function bezier2(x2, y2, x3, y3) {\n this._out(x2, ' ', y2, ' ', x3, ' ', y3, ' v', NL);\n };\n PDFPage.prototype.close = function close() {\n this._out('h', NL);\n };\n PDFPage.prototype.rect = function rect(x, y, w, h) {\n this._out(x, ' ', y, ' ', w, ' ', h, ' re', NL);\n };\n PDFPage.prototype.ellipse = function ellipse(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 PDFPage.prototype.circle = function circle(x, y, r) {\n this.ellipse(x, y, r, r);\n };\n PDFPage.prototype.stroke = function stroke() {\n this._out('S', NL);\n };\n PDFPage.prototype.nop = function nop() {\n this._out('n', NL);\n };\n PDFPage.prototype.clip = function clip() {\n this._out('W n', NL);\n };\n PDFPage.prototype.clipStroke = function clipStroke() {\n this._out('W S', NL);\n };\n PDFPage.prototype.closeStroke = function closeStroke() {\n this._out('s', NL);\n };\n PDFPage.prototype.fill = function fill() {\n this._out('f', NL);\n };\n PDFPage.prototype.fillStroke = function fillStroke() {\n this._out('B', NL);\n };\n PDFPage.prototype.drawImage = function drawImage(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 PDFPage.prototype.comment = function comment(txt) {\n var self = this;\n txt.split(/\\r?\\n/g).forEach(function (line) {\n self._out('% ', line, NL);\n });\n };\n PDFPage.prototype._context = function _context(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 PDFPage.prototype._toPage = function _toPage(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 return PDFPage;\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$1(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 clearImageCache();\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$1(group, function (data) {\n callback('data:application/pdf;base64,' + data.base64());\n });\n }\n function toBlob(group, callback) {\n render$1(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$1,\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$1(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 var ref = geometry.cornerRadius;\n var rx = ref[0];\n var ry = ref[1];\n if (rx === 0 && ry === 0) {\n page.rect(geometry.origin.x, geometry.origin.y, geometry.size.width, geometry.size.height);\n maybeFillStroke(element, page, pdf);\n } else {\n drawPath(drawing.Path.fromRect(geometry, element.options), page, pdf);\n }\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$1\n });\n kendo.drawing.exportPDF = kendo.pdf.exportPDF;\n kendo.drawing.pdf = kendo.pdf;\n }(window.kendo.jQuery));\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}));"]}