pdfkit 0.9.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/js/pdfkit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pdfkit.js","sources":["../lib/abstract_reference.js","../lib/object.js","../lib/reference.js","../lib/page.js","../lib/security.js","../lib/gradient.js","../lib/mixins/color.js","../lib/path.js","../lib/mixins/vector.js","../lib/font/afm.js","../lib/font.js","../lib/font/standard.js","../lib/font/embedded.js","../lib/font_factory.js","../lib/mixins/fonts.js","../lib/line_wrapper.js","../lib/mixins/text.js","../lib/image/jpeg.js","../lib/image/png.js","../lib/image.js","../lib/mixins/images.js","../lib/mixins/annotations.js","../lib/outline.js","../lib/mixins/outline.js","../lib/document.js"],"sourcesContent":["/*\r\nPDFAbstractReference - abstract class for PDF reference\r\n*/\r\n\r\nclass PDFAbstractReference {\r\n toString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFAbstractReference;\r\n","/*\r\nPDFObject - converts JavaScript types into their corresponding PDF types.\r\nBy Devon Govett\r\n*/\r\n\r\nimport PDFAbstractReference from './abstract_reference';\r\n\r\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\r\n\r\nconst escapableRe = /[\\n\\r\\t\\b\\f\\(\\)\\\\]/g;\r\nconst escapable = {\r\n '\\n': '\\\\n',\r\n '\\r': '\\\\r',\r\n '\\t': '\\\\t',\r\n '\\b': '\\\\b',\r\n '\\f': '\\\\f',\r\n '\\\\': '\\\\\\\\',\r\n '(': '\\\\(',\r\n ')': '\\\\)'\r\n};\r\n\r\n// Convert little endian UTF-16 to big endian\r\nconst swapBytes = function(buff) {\r\n const l = buff.length;\r\n if (l & 0x01) {\r\n throw new Error('Buffer length must be even');\r\n } else {\r\n for (let i = 0, end = l - 1; i < end; i += 2) {\r\n const a = buff[i];\r\n buff[i] = buff[i + 1];\r\n buff[i + 1] = a;\r\n }\r\n }\r\n\r\n return buff;\r\n};\r\n\r\nclass PDFObject {\r\n static convert(object, encryptFn = null) {\r\n // String literals are converted to the PDF name type\r\n if (typeof object === 'string') {\r\n return `/${object}`;\r\n\r\n // String objects are converted to PDF strings (UTF-16)\r\n } else if (object instanceof String) {\r\n let string = object;\r\n // Detect if this is a unicode string\r\n let isUnicode = false;\r\n for (let i = 0, end = string.length; i < end; i++) {\r\n if (string.charCodeAt(i) > 0x7f) {\r\n isUnicode = true;\r\n break;\r\n }\r\n }\r\n\r\n // If so, encode it as big endian UTF-16\r\n let stringBuffer;\r\n if (isUnicode) {\r\n stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\r\n } else {\r\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\r\n }\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(stringBuffer).toString('binary');\r\n } else {\r\n string = stringBuffer.toString('binary');\r\n }\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n\r\n return `(${string})`;\r\n\r\n // Buffers are converted to PDF hex strings\r\n } else if (Buffer.isBuffer(object)) {\r\n return `<${object.toString('hex')}>`;\r\n } else if (object instanceof PDFAbstractReference) {\r\n return object.toString();\r\n } else if (object instanceof Date) {\r\n let string =\r\n `D:${pad(object.getUTCFullYear(), 4)}` +\r\n pad(object.getUTCMonth() + 1, 2) +\r\n pad(object.getUTCDate(), 2) +\r\n pad(object.getUTCHours(), 2) +\r\n pad(object.getUTCMinutes(), 2) +\r\n pad(object.getUTCSeconds(), 2) +\r\n 'Z';\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(new Buffer(string, 'ascii')).toString('binary');\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n }\r\n\r\n return `(${string})`;\r\n } else if (Array.isArray(object)) {\r\n const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' ');\r\n return `[${items}]`;\r\n } else if ({}.toString.call(object) === '[object Object]') {\r\n const out = ['<<'];\r\n for (let key in object) {\r\n const val = object[key];\r\n out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\r\n }\r\n\r\n out.push('>>');\r\n return out.join('\\n');\r\n } else if (typeof object === 'number') {\r\n return PDFObject.number(object);\r\n } else {\r\n return `${object}`;\r\n }\r\n }\r\n\r\n static number(n) {\r\n if (n > -1e21 && n < 1e21) {\r\n return Math.round(n * 1e6) / 1e6;\r\n }\r\n\r\n throw new Error(`unsupported number: ${n}`);\r\n }\r\n}\r\n\r\nexport default PDFObject;\r\n","/*\r\nPDFReference - represents a reference to another object in the PDF object heirarchy\r\nBy Devon Govett\r\n*/\r\n\r\nimport zlib from 'zlib';\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFObject from './object';\r\n\r\nclass PDFReference extends PDFAbstractReference {\r\n constructor(document, id, data) {\r\n super();\r\n this.document = document;\r\n this.id = id;\r\n if (data == null) {\r\n data = {};\r\n }\r\n this.data = data;\r\n this.gen = 0;\r\n this.compress = this.document.compress && !this.data.Filter;\r\n this.uncompressedLength = 0;\r\n this.buffer = [];\r\n }\r\n\r\n write(chunk) {\r\n if (!Buffer.isBuffer(chunk)) {\r\n chunk = new Buffer(chunk + '\\n', 'binary');\r\n }\r\n\r\n this.uncompressedLength += chunk.length;\r\n if (this.data.Length == null) {\r\n this.data.Length = 0;\r\n }\r\n this.buffer.push(chunk);\r\n this.data.Length += chunk.length;\r\n if (this.compress) {\r\n return (this.data.Filter = 'FlateDecode');\r\n }\r\n }\r\n\r\n end(chunk) {\r\n if (chunk) {\r\n this.write(chunk);\r\n }\r\n return this.finalize();\r\n }\r\n\r\n finalize() {\r\n this.offset = this.document._offset;\r\n\r\n const encryptFn = this.document._security\r\n ? this.document._security.getEncryptFn(this.id, this.gen)\r\n : null;\r\n\r\n if (this.buffer.length) {\r\n this.buffer = Buffer.concat(this.buffer);\r\n if (this.compress) {\r\n this.buffer = zlib.deflateSync(this.buffer);\r\n }\r\n\r\n if (encryptFn) {\r\n this.buffer = encryptFn(this.buffer);\r\n }\r\n\r\n this.data.Length = this.buffer.length;\r\n }\r\n\r\n this.document._write(`${this.id} ${this.gen} obj`);\r\n this.document._write(PDFObject.convert(this.data, encryptFn));\r\n\r\n if (this.buffer.length) {\r\n this.document._write('stream');\r\n this.document._write(this.buffer);\r\n\r\n this.buffer = []; // free up memory\r\n this.document._write('\\nendstream');\r\n }\r\n\r\n this.document._write('endobj');\r\n this.document._refEnd(this);\r\n }\r\n toString() {\r\n return `${this.id} ${this.gen} R`;\r\n }\r\n}\r\n\r\nexport default PDFReference;\r\n","/*\r\nPDFPage - represents a single page in the PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nconst DEFAULT_MARGINS = {\r\n top: 72,\r\n left: 72,\r\n bottom: 72,\r\n right: 72\r\n};\r\n\r\nconst SIZES = {\r\n '4A0': [4767.87, 6740.79],\r\n '2A0': [3370.39, 4767.87],\r\n A0: [2383.94, 3370.39],\r\n A1: [1683.78, 2383.94],\r\n A2: [1190.55, 1683.78],\r\n A3: [841.89, 1190.55],\r\n A4: [595.28, 841.89],\r\n A5: [419.53, 595.28],\r\n A6: [297.64, 419.53],\r\n A7: [209.76, 297.64],\r\n A8: [147.4, 209.76],\r\n A9: [104.88, 147.4],\r\n A10: [73.7, 104.88],\r\n B0: [2834.65, 4008.19],\r\n B1: [2004.09, 2834.65],\r\n B2: [1417.32, 2004.09],\r\n B3: [1000.63, 1417.32],\r\n B4: [708.66, 1000.63],\r\n B5: [498.9, 708.66],\r\n B6: [354.33, 498.9],\r\n B7: [249.45, 354.33],\r\n B8: [175.75, 249.45],\r\n B9: [124.72, 175.75],\r\n B10: [87.87, 124.72],\r\n C0: [2599.37, 3676.54],\r\n C1: [1836.85, 2599.37],\r\n C2: [1298.27, 1836.85],\r\n C3: [918.43, 1298.27],\r\n C4: [649.13, 918.43],\r\n C5: [459.21, 649.13],\r\n C6: [323.15, 459.21],\r\n C7: [229.61, 323.15],\r\n C8: [161.57, 229.61],\r\n C9: [113.39, 161.57],\r\n C10: [79.37, 113.39],\r\n RA0: [2437.8, 3458.27],\r\n RA1: [1729.13, 2437.8],\r\n RA2: [1218.9, 1729.13],\r\n RA3: [864.57, 1218.9],\r\n RA4: [609.45, 864.57],\r\n SRA0: [2551.18, 3628.35],\r\n SRA1: [1814.17, 2551.18],\r\n SRA2: [1275.59, 1814.17],\r\n SRA3: [907.09, 1275.59],\r\n SRA4: [637.8, 907.09],\r\n EXECUTIVE: [521.86, 756.0],\r\n FOLIO: [612.0, 936.0],\r\n LEGAL: [612.0, 1008.0],\r\n LETTER: [612.0, 792.0],\r\n TABLOID: [792.0, 1224.0]\r\n};\r\n\r\nclass PDFPage {\r\n constructor(document, options) {\r\n this.document = document;\r\n if (options == null) {\r\n options = {};\r\n }\r\n this.size = options.size || 'letter';\r\n this.layout = options.layout || 'portrait';\r\n\r\n // process margins\r\n if (typeof options.margin === 'number') {\r\n this.margins = {\r\n top: options.margin,\r\n left: options.margin,\r\n bottom: options.margin,\r\n right: options.margin\r\n };\r\n\r\n // default to 1 inch margins\r\n } else {\r\n this.margins = options.margins || DEFAULT_MARGINS;\r\n }\r\n\r\n // calculate page dimensions\r\n const dimensions = Array.isArray(this.size)\r\n ? this.size\r\n : SIZES[this.size.toUpperCase()];\r\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\r\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\r\n\r\n this.content = this.document.ref();\r\n\r\n // Initialize the Font, XObject, and ExtGState dictionaries\r\n this.resources = this.document.ref({\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\r\n });\r\n\r\n // The page dictionary\r\n this.dictionary = this.document.ref({\r\n Type: 'Page',\r\n Parent: this.document._root.data.Pages,\r\n MediaBox: [0, 0, this.width, this.height],\r\n Contents: this.content,\r\n Resources: this.resources\r\n });\r\n }\r\n\r\n // Lazily create these dictionaries\r\n get fonts() {\r\n const data = this.resources.data;\r\n return data.Font != null ? data.Font : (data.Font = {});\r\n }\r\n\r\n get xobjects() {\r\n const data = this.resources.data;\r\n return data.XObject != null ? data.XObject : (data.XObject = {});\r\n }\r\n\r\n get ext_gstates() {\r\n const data = this.resources.data;\r\n return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\r\n }\r\n\r\n get patterns() {\r\n const data = this.resources.data;\r\n return data.Pattern != null ? data.Pattern : (data.Pattern = {});\r\n }\r\n\r\n get annotations() {\r\n const data = this.dictionary.data;\r\n return data.Annots != null ? data.Annots : (data.Annots = []);\r\n }\r\n\r\n maxY() {\r\n return this.height - this.margins.bottom;\r\n }\r\n\r\n write(chunk) {\r\n return this.content.write(chunk);\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n this.resources.end();\r\n return this.content.end();\r\n }\r\n}\r\n\r\nexport default PDFPage;\r\n","/*\r\n PDFSecurity - represents PDF security settings\r\n By Yang Liu <hi@zesik.com>\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nimport saslprep from 'saslprep';\r\n\r\nclass PDFSecurity {\r\n static generateFileID(info = {}) {\r\n let infoStr = `${info.CreationDate.getTime()}\\n`;\r\n\r\n for (let key in info) {\r\n if (!info.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n infoStr += `${key}: ${info[key].toString()}\\n`;\r\n }\r\n\r\n return wordArrayToBuffer(CryptoJS.MD5(infoStr));\r\n }\r\n\r\n static generateRandomWordArray(bytes) {\r\n return CryptoJS.lib.WordArray.random(bytes);\r\n }\r\n\r\n static create(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n return null;\r\n }\r\n return new PDFSecurity(document, options);\r\n }\r\n\r\n constructor(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n throw new Error('None of owner password and user password is defined.');\r\n }\r\n\r\n this.document = document;\r\n this._setupEncryption(options);\r\n }\r\n\r\n _setupEncryption(options) {\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n case '1.5':\r\n this.version = 2;\r\n break;\r\n case '1.6':\r\n case '1.7':\r\n this.version = 4;\r\n break;\r\n case '1.7ext3':\r\n this.version = 5;\r\n break;\r\n default:\r\n this.version = 1;\r\n break;\r\n }\r\n\r\n const encDict = {\r\n Filter: 'Standard'\r\n };\r\n\r\n switch (this.version) {\r\n case 1:\r\n case 2:\r\n case 4:\r\n this._setupEncryptionV1V2V4(this.version, encDict, options);\r\n break;\r\n case 5:\r\n this._setupEncryptionV5(encDict, options);\r\n break;\r\n }\r\n\r\n this.dictionary = this.document.ref(encDict);\r\n }\r\n\r\n _setupEncryptionV1V2V4(v, encDict, options) {\r\n let r, permissions;\r\n switch (v) {\r\n case 1:\r\n r = 2;\r\n this.keyBits = 40;\r\n permissions = getPermissionsR2(options.permissions);\r\n break;\r\n case 2:\r\n r = 3;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n case 4:\r\n r = 4;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n }\r\n\r\n const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\r\n const paddedOwnerPassword = options.ownerPassword\r\n ? processPasswordR2R3R4(options.ownerPassword)\r\n : paddedUserPassword;\r\n\r\n const ownerPasswordEntry = getOwnerPasswordR2R3R4(\r\n r,\r\n this.keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n );\r\n this.encryptionKey = getEncryptionKeyR2R3R4(\r\n r,\r\n this.keyBits,\r\n this.document._id,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n );\r\n let userPasswordEntry;\r\n if (r === 2) {\r\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\r\n } else {\r\n userPasswordEntry = getUserPasswordR3R4(\r\n this.document._id,\r\n this.encryptionKey\r\n );\r\n }\r\n\r\n encDict.V = v;\r\n if (v >= 2) {\r\n encDict.Length = this.keyBits;\r\n }\r\n if (v === 4) {\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV2',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n }\r\n encDict.R = r;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.P = permissions;\r\n }\r\n\r\n _setupEncryptionV5(encDict, options) {\r\n this.keyBits = 256;\r\n const permissions = getPermissionsR3(options);\r\n\r\n const processedUserPassword = processPasswordR5(options.userPassword);\r\n const processedOwnerPassword = options.ownerPassword\r\n ? processPasswordR5(options.ownerPassword)\r\n : processedUserPassword;\r\n\r\n this.encryptionKey = getEncryptionKeyR5(\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userPasswordEntry = getUserPasswordR5(\r\n processedUserPassword,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userKeySalt = CryptoJS.lib.WordArray.create(\r\n userPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const userEncryptionKeyEntry = getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n this.encryptionKey\r\n );\r\n const ownerPasswordEntry = getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const ownerKeySalt = CryptoJS.lib.WordArray.create(\r\n ownerPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n this.encryptionKey\r\n );\r\n const permsEntry = getEncryptedPermissionsR5(\r\n permissions,\r\n this.encryptionKey,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n\r\n encDict.V = 5;\r\n encDict.Length = this.keyBits;\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV3',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n encDict.R = 5;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\r\n encDict.P = permissions;\r\n encDict.Perms = wordArrayToBuffer(permsEntry);\r\n }\r\n\r\n getEncryptFn(obj, gen) {\r\n let digest;\r\n if (this.version < 5) {\r\n digest = this.encryptionKey\r\n .clone()\r\n .concat(\r\n CryptoJS.lib.WordArray.create(\r\n [\r\n ((obj & 0xff) << 24) |\r\n ((obj & 0xff00) << 8) |\r\n ((obj >> 8) & 0xff00) |\r\n (gen & 0xff),\r\n (gen & 0xff00) << 16\r\n ],\r\n 5\r\n )\r\n );\r\n }\r\n\r\n if (this.version === 1 || this.version === 2) {\r\n let key = CryptoJS.MD5(digest);\r\n key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\r\n return buffer =>\r\n wordArrayToBuffer(\r\n CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\r\n .ciphertext\r\n );\r\n }\r\n\r\n let key;\r\n if (this.version === 4) {\r\n key = CryptoJS.MD5(\r\n digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))\r\n );\r\n } else {\r\n key = this.encryptionKey;\r\n }\r\n\r\n const iv = PDFSecurity.generateRandomWordArray(16);\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7,\r\n iv\r\n };\r\n\r\n return buffer =>\r\n wordArrayToBuffer(\r\n iv\r\n .clone()\r\n .concat(\r\n CryptoJS.AES.encrypt(\r\n CryptoJS.lib.WordArray.create(buffer),\r\n key,\r\n options\r\n ).ciphertext\r\n )\r\n );\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n }\r\n}\r\n\r\nfunction getPermissionsR2(permissionObject = {}) {\r\n let permissions = 0xffffffc0 >> 0;\r\n if (permissionObject.printing) {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getPermissionsR3(permissionObject = {}) {\r\n let permissions = 0xfffff0c0 >> 0;\r\n if (permissionObject.printing === 'lowResolution') {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.printing === 'highResolution') {\r\n permissions |= 0b100000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n if (permissionObject.fillingForms) {\r\n permissions |= 0b000100000000;\r\n }\r\n if (permissionObject.contentAccessibility) {\r\n permissions |= 0b001000000000;\r\n }\r\n if (permissionObject.documentAssembly) {\r\n permissions |= 0b010000000000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getUserPasswordR2(encryptionKey) {\r\n return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\r\n .ciphertext;\r\n}\r\n\r\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\r\n const key = encryptionKey.clone();\r\n let cipher = CryptoJS.MD5(\r\n processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))\r\n );\r\n for (let i = 0; i < 20; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] =\r\n encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\r\n}\r\n\r\nfunction getOwnerPasswordR2R3R4(\r\n r,\r\n keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let digest = paddedOwnerPassword;\r\n let round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n digest = CryptoJS.MD5(digest);\r\n }\r\n\r\n const key = digest.clone();\r\n key.sigBytes = keyBits / 8;\r\n let cipher = paddedUserPassword;\r\n round = r >= 3 ? 20 : 1;\r\n for (let i = 0; i < round; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher;\r\n}\r\n\r\nfunction getEncryptionKeyR2R3R4(\r\n r,\r\n keyBits,\r\n documentId,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n) {\r\n let key = paddedUserPassword\r\n .clone()\r\n .concat(ownerPasswordEntry)\r\n .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\r\n .concat(CryptoJS.lib.WordArray.create(documentId));\r\n const round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n key = CryptoJS.MD5(key);\r\n key.sigBytes = keyBits / 8;\r\n }\r\n return key;\r\n}\r\n\r\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedUserPassword.clone().concat(userKeySalt)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n generateRandomWordArray\r\n) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(validationSalt)\r\n .concat(userPasswordEntry)\r\n )\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(ownerKeySalt)\r\n .concat(userPasswordEntry)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getEncryptionKeyR5(generateRandomWordArray) {\r\n return generateRandomWordArray(32);\r\n}\r\n\r\nfunction getEncryptedPermissionsR5(\r\n permissions,\r\n encryptionKey,\r\n generateRandomWordArray\r\n) {\r\n const cipher = CryptoJS.lib.WordArray.create(\r\n [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\r\n 12\r\n ).concat(generateRandomWordArray(4));\r\n const options = {\r\n mode: CryptoJS.mode.ECB,\r\n padding: CryptoJS.pad.NoPadding\r\n };\r\n return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\r\n}\r\n\r\nfunction processPasswordR2R3R4(password = '') {\r\n const out = new Buffer(32);\r\n const length = password.length;\r\n let index = 0;\r\n while (index < length && index < 32) {\r\n const code = password.charCodeAt(index);\r\n if (code > 0xff) {\r\n throw new Error('Password contains one or more invalid characters.');\r\n }\r\n out[index] = code;\r\n index++;\r\n }\r\n while (index < 32) {\r\n out[index] = PASSWORD_PADDING[index - length];\r\n index++;\r\n }\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction processPasswordR5(password = '') {\r\n password = unescape(encodeURIComponent(saslprep(password)));\r\n const length = Math.min(127, password.length);\r\n const out = new Buffer(length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n out[i] = password.charCodeAt(i);\r\n }\r\n\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction lsbFirstWord(data) {\r\n return (\r\n ((data & 0xff) << 24) |\r\n ((data & 0xff00) << 8) |\r\n ((data >> 8) & 0xff00) |\r\n ((data >> 24) & 0xff)\r\n );\r\n}\r\n\r\nfunction wordArrayToBuffer(wordArray) {\r\n const byteArray = [];\r\n for (let i = 0; i < wordArray.sigBytes; i++) {\r\n byteArray.push(\r\n (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff\r\n );\r\n }\r\n return Buffer.from(byteArray);\r\n}\r\n\r\nconst PASSWORD_PADDING = [\r\n 0x28,\r\n 0xbf,\r\n 0x4e,\r\n 0x5e,\r\n 0x4e,\r\n 0x75,\r\n 0x8a,\r\n 0x41,\r\n 0x64,\r\n 0x00,\r\n 0x4e,\r\n 0x56,\r\n 0xff,\r\n 0xfa,\r\n 0x01,\r\n 0x08,\r\n 0x2e,\r\n 0x2e,\r\n 0x00,\r\n 0xb6,\r\n 0xd0,\r\n 0x68,\r\n 0x3e,\r\n 0x80,\r\n 0x2f,\r\n 0x0c,\r\n 0xa9,\r\n 0xfe,\r\n 0x64,\r\n 0x53,\r\n 0x69,\r\n 0x7a\r\n];\r\n\r\nexport default PDFSecurity;\r\n","import PDFObject from './object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nclass PDFGradient {\r\n constructor(doc) {\r\n this.doc = doc;\r\n this.stops = [];\r\n this.embedded = false;\r\n this.transform = [1, 0, 0, 1, 0, 0];\r\n }\r\n\r\n stop(pos, color, opacity) {\r\n if (opacity == null) {\r\n opacity = 1;\r\n }\r\n color = this.doc._normalizeColor(color);\r\n\r\n if (this.stops.length === 0) {\r\n if (color.length === 3) {\r\n this._colorSpace = 'DeviceRGB';\r\n } else if (color.length === 4) {\r\n this._colorSpace = 'DeviceCMYK';\r\n } else if (color.length === 1) {\r\n this._colorSpace = 'DeviceGray';\r\n } else {\r\n throw new Error('Unknown color space');\r\n }\r\n } else if (\r\n (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\r\n (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\r\n (this._colorSpace === 'DeviceGray' && color.length !== 1)\r\n ) {\r\n throw new Error('All gradient stops must use the same color space');\r\n }\r\n\r\n opacity = Math.max(0, Math.min(1, opacity));\r\n this.stops.push([pos, color, opacity]);\r\n return this;\r\n }\r\n\r\n setTransform(m11, m12, m21, m22, dx, dy) {\r\n this.transform = [m11, m12, m21, m22, dx, dy];\r\n return this;\r\n }\r\n\r\n embed(m) {\r\n let fn;\r\n if (this.stops.length === 0) {\r\n return;\r\n }\r\n this.embedded = true;\r\n this.matrix = m;\r\n\r\n // if the last stop comes before 100%, add a copy at 100%\r\n const last = this.stops[this.stops.length - 1];\r\n if (last[0] < 1) {\r\n this.stops.push([1, last[1], last[2]]);\r\n }\r\n\r\n const bounds = [];\r\n const encode = [];\r\n const stops = [];\r\n\r\n for (let i = 0, stopsLength = this.stops.length - 1; i < stopsLength; i++) {\r\n encode.push(0, 1);\r\n if (i + 2 !== stopsLength) {\r\n bounds.push(this.stops[i + 1][0]);\r\n }\r\n\r\n fn = this.doc.ref({\r\n FunctionType: 2,\r\n Domain: [0, 1],\r\n C0: this.stops[i + 0][1],\r\n C1: this.stops[i + 1][1],\r\n N: 1\r\n });\r\n\r\n stops.push(fn);\r\n fn.end();\r\n }\r\n\r\n // if there are only two stops, we don't need a stitching function\r\n if (stops.length === 1) {\r\n fn = stops[0];\r\n } else {\r\n fn = this.doc.ref({\r\n FunctionType: 3, // stitching function\r\n Domain: [0, 1],\r\n Functions: stops,\r\n Bounds: bounds,\r\n Encode: encode\r\n });\r\n\r\n fn.end();\r\n }\r\n\r\n this.id = `Sh${++this.doc._gradCount}`;\r\n\r\n const shader = this.shader(fn);\r\n shader.end();\r\n\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 2,\r\n Shading: shader,\r\n Matrix: this.matrix.map(v => number(v))\r\n });\r\n\r\n pattern.end();\r\n\r\n if (this.stops.some(stop => stop[2] < 1)) {\r\n let grad = this.opacityGradient();\r\n grad._colorSpace = 'DeviceGray';\r\n\r\n for (let stop of this.stops) {\r\n grad.stop(stop[0], [stop[2]]);\r\n }\r\n\r\n grad = grad.embed(this.matrix);\r\n\r\n const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\r\n\r\n const form = this.doc.ref({\r\n Type: 'XObject',\r\n Subtype: 'Form',\r\n FormType: 1,\r\n BBox: pageBBox,\r\n Group: {\r\n Type: 'Group',\r\n S: 'Transparency',\r\n CS: 'DeviceGray'\r\n },\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: grad\r\n }\r\n }\r\n });\r\n\r\n form.write('/Pattern cs /Sh1 scn');\r\n form.end(`${pageBBox.join(' ')} re f`);\r\n\r\n const gstate = this.doc.ref({\r\n Type: 'ExtGState',\r\n SMask: {\r\n Type: 'Mask',\r\n S: 'Luminosity',\r\n G: form\r\n }\r\n });\r\n\r\n gstate.end();\r\n\r\n const opacityPattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1,\r\n PaintType: 1,\r\n TilingType: 2,\r\n BBox: pageBBox,\r\n XStep: pageBBox[2],\r\n YStep: pageBBox[3],\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: pattern\r\n },\r\n ExtGState: {\r\n Gs1: gstate\r\n }\r\n }\r\n });\r\n\r\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\r\n opacityPattern.end(`${pageBBox.join(' ')} re f`);\r\n\r\n this.doc.page.patterns[this.id] = opacityPattern;\r\n } else {\r\n this.doc.page.patterns[this.id] = pattern;\r\n }\r\n\r\n return pattern;\r\n }\r\n\r\n apply(op) {\r\n // apply gradient transform to existing document ctm\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = this.transform;\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n\r\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\r\n this.embed(m);\r\n }\r\n return this.doc.addContent(`/${this.id} ${op}`);\r\n }\r\n}\r\n\r\nclass PDFLinearGradient extends PDFGradient {\r\n constructor(doc, x1, y1, x2, y2) {\r\n super(doc);\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 2,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.x2, this.y2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\r\n }\r\n}\r\n\r\nclass PDFRadialGradient extends PDFGradient {\r\n constructor(doc, x1, y1, r1, x2, y2, r2) {\r\n super(doc);\r\n this.doc = doc;\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.r1 = r1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n this.r2 = r2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 3,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFRadialGradient(\r\n this.doc,\r\n this.x1,\r\n this.y1,\r\n this.r1,\r\n this.x2,\r\n this.y2,\r\n this.r2\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\r\n","import Gradient from '../gradient';\r\n\r\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\r\n\r\nexport default {\r\n initColor() {\r\n // The opacity dictionaries\r\n this._opacityRegistry = {};\r\n this._opacityCount = 0;\r\n return (this._gradCount = 0);\r\n },\r\n\r\n _normalizeColor(color) {\r\n if (color instanceof PDFGradient) {\r\n return color;\r\n }\r\n\r\n if (typeof color === 'string') {\r\n if (color.charAt(0) === '#') {\r\n if (color.length === 4) {\r\n color = color.replace(\r\n /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\r\n '#$1$1$2$2$3$3'\r\n );\r\n }\r\n const hex = parseInt(color.slice(1), 16);\r\n color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\r\n } else if (namedColors[color]) {\r\n color = namedColors[color];\r\n }\r\n }\r\n\r\n if (Array.isArray(color)) {\r\n // RGB\r\n if (color.length === 3) {\r\n color = color.map(part => part / 255);\r\n // CMYK\r\n } else if (color.length === 4) {\r\n color = color.map(part => part / 100);\r\n }\r\n return color;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n _setColor(color, stroke) {\r\n color = this._normalizeColor(color);\r\n if (!color) {\r\n return false;\r\n }\r\n\r\n const op = stroke ? 'SCN' : 'scn';\r\n\r\n if (color instanceof PDFGradient) {\r\n this._setColorSpace('Pattern', stroke);\r\n color.apply(op);\r\n } else {\r\n const space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\r\n this._setColorSpace(space, stroke);\r\n\r\n color = color.join(' ');\r\n this.addContent(`${color} ${op}`);\r\n }\r\n\r\n return true;\r\n },\r\n\r\n _setColorSpace(space, stroke) {\r\n const op = stroke ? 'CS' : 'cs';\r\n return this.addContent(`/${space} ${op}`);\r\n },\r\n\r\n fillColor(color, opacity) {\r\n const set = this._setColor(color, false);\r\n if (set) {\r\n this.fillOpacity(opacity);\r\n }\r\n\r\n // save this for text wrapper, which needs to reset\r\n // the fill color on new pages\r\n this._fillColor = [color, opacity];\r\n return this;\r\n },\r\n\r\n strokeColor(color, opacity) {\r\n const set = this._setColor(color, true);\r\n if (set) {\r\n this.strokeOpacity(opacity);\r\n }\r\n return this;\r\n },\r\n\r\n opacity(opacity) {\r\n this._doOpacity(opacity, opacity);\r\n return this;\r\n },\r\n\r\n fillOpacity(opacity) {\r\n this._doOpacity(opacity, null);\r\n return this;\r\n },\r\n\r\n strokeOpacity(opacity) {\r\n this._doOpacity(null, opacity);\r\n return this;\r\n },\r\n\r\n _doOpacity(fillOpacity, strokeOpacity) {\r\n let dictionary, name;\r\n if (fillOpacity == null && strokeOpacity == null) {\r\n return;\r\n }\r\n\r\n if (fillOpacity != null) {\r\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\r\n }\r\n if (strokeOpacity != null) {\r\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\r\n }\r\n const key = `${fillOpacity}_${strokeOpacity}`;\r\n\r\n if (this._opacityRegistry[key]) {\r\n [dictionary, name] = this._opacityRegistry[key];\r\n } else {\r\n dictionary = { Type: 'ExtGState' };\r\n\r\n if (fillOpacity != null) {\r\n dictionary.ca = fillOpacity;\r\n }\r\n if (strokeOpacity != null) {\r\n dictionary.CA = strokeOpacity;\r\n }\r\n\r\n dictionary = this.ref(dictionary);\r\n dictionary.end();\r\n const id = ++this._opacityCount;\r\n name = `Gs${id}`;\r\n this._opacityRegistry[key] = [dictionary, name];\r\n }\r\n\r\n this.page.ext_gstates[name] = dictionary;\r\n return this.addContent(`/${name} gs`);\r\n },\r\n\r\n linearGradient(x1, y1, x2, y2) {\r\n return new PDFLinearGradient(this, x1, y1, x2, y2);\r\n },\r\n\r\n radialGradient(x1, y1, r1, x2, y2, r2) {\r\n return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\r\n }\r\n};\r\n\r\nvar namedColors = {\r\n aliceblue: [240, 248, 255],\r\n antiquewhite: [250, 235, 215],\r\n aqua: [0, 255, 255],\r\n aquamarine: [127, 255, 212],\r\n azure: [240, 255, 255],\r\n beige: [245, 245, 220],\r\n bisque: [255, 228, 196],\r\n black: [0, 0, 0],\r\n blanchedalmond: [255, 235, 205],\r\n blue: [0, 0, 255],\r\n blueviolet: [138, 43, 226],\r\n brown: [165, 42, 42],\r\n burlywood: [222, 184, 135],\r\n cadetblue: [95, 158, 160],\r\n chartreuse: [127, 255, 0],\r\n chocolate: [210, 105, 30],\r\n coral: [255, 127, 80],\r\n cornflowerblue: [100, 149, 237],\r\n cornsilk: [255, 248, 220],\r\n crimson: [220, 20, 60],\r\n cyan: [0, 255, 255],\r\n darkblue: [0, 0, 139],\r\n darkcyan: [0, 139, 139],\r\n darkgoldenrod: [184, 134, 11],\r\n darkgray: [169, 169, 169],\r\n darkgreen: [0, 100, 0],\r\n darkgrey: [169, 169, 169],\r\n darkkhaki: [189, 183, 107],\r\n darkmagenta: [139, 0, 139],\r\n darkolivegreen: [85, 107, 47],\r\n darkorange: [255, 140, 0],\r\n darkorchid: [153, 50, 204],\r\n darkred: [139, 0, 0],\r\n darksalmon: [233, 150, 122],\r\n darkseagreen: [143, 188, 143],\r\n darkslateblue: [72, 61, 139],\r\n darkslategray: [47, 79, 79],\r\n darkslategrey: [47, 79, 79],\r\n darkturquoise: [0, 206, 209],\r\n darkviolet: [148, 0, 211],\r\n deeppink: [255, 20, 147],\r\n deepskyblue: [0, 191, 255],\r\n dimgray: [105, 105, 105],\r\n dimgrey: [105, 105, 105],\r\n dodgerblue: [30, 144, 255],\r\n firebrick: [178, 34, 34],\r\n floralwhite: [255, 250, 240],\r\n forestgreen: [34, 139, 34],\r\n fuchsia: [255, 0, 255],\r\n gainsboro: [220, 220, 220],\r\n ghostwhite: [248, 248, 255],\r\n gold: [255, 215, 0],\r\n goldenrod: [218, 165, 32],\r\n gray: [128, 128, 128],\r\n grey: [128, 128, 128],\r\n green: [0, 128, 0],\r\n greenyellow: [173, 255, 47],\r\n honeydew: [240, 255, 240],\r\n hotpink: [255, 105, 180],\r\n indianred: [205, 92, 92],\r\n indigo: [75, 0, 130],\r\n ivory: [255, 255, 240],\r\n khaki: [240, 230, 140],\r\n lavender: [230, 230, 250],\r\n lavenderblush: [255, 240, 245],\r\n lawngreen: [124, 252, 0],\r\n lemonchiffon: [255, 250, 205],\r\n lightblue: [173, 216, 230],\r\n lightcoral: [240, 128, 128],\r\n lightcyan: [224, 255, 255],\r\n lightgoldenrodyellow: [250, 250, 210],\r\n lightgray: [211, 211, 211],\r\n lightgreen: [144, 238, 144],\r\n lightgrey: [211, 211, 211],\r\n lightpink: [255, 182, 193],\r\n lightsalmon: [255, 160, 122],\r\n lightseagreen: [32, 178, 170],\r\n lightskyblue: [135, 206, 250],\r\n lightslategray: [119, 136, 153],\r\n lightslategrey: [119, 136, 153],\r\n lightsteelblue: [176, 196, 222],\r\n lightyellow: [255, 255, 224],\r\n lime: [0, 255, 0],\r\n limegreen: [50, 205, 50],\r\n linen: [250, 240, 230],\r\n magenta: [255, 0, 255],\r\n maroon: [128, 0, 0],\r\n mediumaquamarine: [102, 205, 170],\r\n mediumblue: [0, 0, 205],\r\n mediumorchid: [186, 85, 211],\r\n mediumpurple: [147, 112, 219],\r\n mediumseagreen: [60, 179, 113],\r\n mediumslateblue: [123, 104, 238],\r\n mediumspringgreen: [0, 250, 154],\r\n mediumturquoise: [72, 209, 204],\r\n mediumvioletred: [199, 21, 133],\r\n midnightblue: [25, 25, 112],\r\n mintcream: [245, 255, 250],\r\n mistyrose: [255, 228, 225],\r\n moccasin: [255, 228, 181],\r\n navajowhite: [255, 222, 173],\r\n navy: [0, 0, 128],\r\n oldlace: [253, 245, 230],\r\n olive: [128, 128, 0],\r\n olivedrab: [107, 142, 35],\r\n orange: [255, 165, 0],\r\n orangered: [255, 69, 0],\r\n orchid: [218, 112, 214],\r\n palegoldenrod: [238, 232, 170],\r\n palegreen: [152, 251, 152],\r\n paleturquoise: [175, 238, 238],\r\n palevioletred: [219, 112, 147],\r\n papayawhip: [255, 239, 213],\r\n peachpuff: [255, 218, 185],\r\n peru: [205, 133, 63],\r\n pink: [255, 192, 203],\r\n plum: [221, 160, 221],\r\n powderblue: [176, 224, 230],\r\n purple: [128, 0, 128],\r\n red: [255, 0, 0],\r\n rosybrown: [188, 143, 143],\r\n royalblue: [65, 105, 225],\r\n saddlebrown: [139, 69, 19],\r\n salmon: [250, 128, 114],\r\n sandybrown: [244, 164, 96],\r\n seagreen: [46, 139, 87],\r\n seashell: [255, 245, 238],\r\n sienna: [160, 82, 45],\r\n silver: [192, 192, 192],\r\n skyblue: [135, 206, 235],\r\n slateblue: [106, 90, 205],\r\n slategray: [112, 128, 144],\r\n slategrey: [112, 128, 144],\r\n snow: [255, 250, 250],\r\n springgreen: [0, 255, 127],\r\n steelblue: [70, 130, 180],\r\n tan: [210, 180, 140],\r\n teal: [0, 128, 128],\r\n thistle: [216, 191, 216],\r\n tomato: [255, 99, 71],\r\n turquoise: [64, 224, 208],\r\n violet: [238, 130, 238],\r\n wheat: [245, 222, 179],\r\n white: [255, 255, 255],\r\n whitesmoke: [245, 245, 245],\r\n yellow: [255, 255, 0],\r\n yellowgreen: [154, 205, 50]\r\n};\r\n","let cx, cy, px, py, sx, sy;\r\n\r\ncx = cy = px = py = sx = sy = 0;\r\n\r\nconst parameters = {\r\n A: 7,\r\n a: 7,\r\n C: 6,\r\n c: 6,\r\n H: 1,\r\n h: 1,\r\n L: 2,\r\n l: 2,\r\n M: 2,\r\n m: 2,\r\n Q: 4,\r\n q: 4,\r\n S: 4,\r\n s: 4,\r\n T: 2,\r\n t: 2,\r\n V: 1,\r\n v: 1,\r\n Z: 0,\r\n z: 0\r\n};\r\n\r\nconst parse = function(path) {\r\n let cmd;\r\n const ret = [];\r\n let args = [];\r\n let curArg = '';\r\n let foundDecimal = false;\r\n let params = 0;\r\n\r\n for (let c of path) {\r\n if (parameters[c] != null) {\r\n params = parameters[c];\r\n if (cmd) {\r\n // save existing command\r\n if (curArg.length > 0) {\r\n args[args.length] = +curArg;\r\n }\r\n ret[ret.length] = { cmd, args };\r\n\r\n args = [];\r\n curArg = '';\r\n foundDecimal = false;\r\n }\r\n\r\n cmd = c;\r\n } else if (\r\n [' ', ','].includes(c) ||\r\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\r\n (c === '.' && foundDecimal)\r\n ) {\r\n if (curArg.length === 0) {\r\n continue;\r\n }\r\n\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n\r\n foundDecimal = c === '.';\r\n\r\n // fix for negative numbers or repeated decimals with no delimeter between commands\r\n curArg = ['-', '.'].includes(c) ? c : '';\r\n } else {\r\n curArg += c;\r\n if (c === '.') {\r\n foundDecimal = true;\r\n }\r\n }\r\n }\r\n\r\n // add the last command\r\n if (curArg.length > 0) {\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n }\r\n\r\n ret[ret.length] = { cmd, args };\r\n\r\n return ret;\r\n};\r\n\r\nconst apply = function(commands, doc) {\r\n // current point, control point, and subpath starting point\r\n cx = cy = px = py = sx = sy = 0;\r\n\r\n // run the commands\r\n for (let i = 0; i < commands.length; i++) {\r\n const c = commands[i];\r\n if (typeof runners[c.cmd] === 'function') {\r\n runners[c.cmd](doc, c.args);\r\n }\r\n }\r\n};\r\n\r\nconst runners = {\r\n M(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n m(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n C(doc, a) {\r\n cx = a[4];\r\n cy = a[5];\r\n px = a[2];\r\n py = a[3];\r\n return doc.bezierCurveTo(...(a || []));\r\n },\r\n\r\n c(doc, a) {\r\n doc.bezierCurveTo(\r\n a[0] + cx,\r\n a[1] + cy,\r\n a[2] + cx,\r\n a[3] + cy,\r\n a[4] + cx,\r\n a[5] + cy\r\n );\r\n px = cx + a[2];\r\n py = cy + a[3];\r\n cx += a[4];\r\n return (cy += a[5]);\r\n },\r\n\r\n S(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n return (cy = a[3]);\r\n },\r\n\r\n s(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(\r\n cx - (px - cx),\r\n cy - (py - cy),\r\n cx + a[0],\r\n cy + a[1],\r\n cx + a[2],\r\n cy + a[3]\r\n );\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n Q(doc, a) {\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n cy = a[3];\r\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\r\n },\r\n\r\n q(doc, a) {\r\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n T(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, a[0], a[1]);\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n cx = a[0];\r\n return (cy = a[1]);\r\n },\r\n\r\n t(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\r\n cx += a[0];\r\n return (cy += a[1]);\r\n },\r\n\r\n A(doc, a) {\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n a(doc, a) {\r\n a[5] += cx;\r\n a[6] += cy;\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n L(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n l(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n H(doc, a) {\r\n cx = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n h(doc, a) {\r\n cx += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n V(doc, a) {\r\n cy = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n v(doc, a) {\r\n cy += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n Z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n },\r\n\r\n z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n }\r\n};\r\n\r\nconst solveArc = function(doc, x, y, coords) {\r\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\r\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\r\n\r\n for (let seg of segs) {\r\n const bez = segmentToBezier(...(seg || []));\r\n doc.bezierCurveTo(...(bez || []));\r\n }\r\n};\r\n\r\n// from Inkscape svgtopdf, thanks!\r\nconst arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\r\n const th = rotateX * (Math.PI / 180);\r\n const sin_th = Math.sin(th);\r\n const cos_th = Math.cos(th);\r\n rx = Math.abs(rx);\r\n ry = Math.abs(ry);\r\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\r\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\r\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\r\n if (pl > 1) {\r\n pl = Math.sqrt(pl);\r\n rx *= pl;\r\n ry *= pl;\r\n }\r\n\r\n const a00 = cos_th / rx;\r\n const a01 = sin_th / rx;\r\n const a10 = -sin_th / ry;\r\n const a11 = cos_th / ry;\r\n const x0 = a00 * ox + a01 * oy;\r\n const y0 = a10 * ox + a11 * oy;\r\n const x1 = a00 * x + a01 * y;\r\n const y1 = a10 * x + a11 * y;\r\n\r\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\r\n let sfactor_sq = 1 / d - 0.25;\r\n if (sfactor_sq < 0) {\r\n sfactor_sq = 0;\r\n }\r\n let sfactor = Math.sqrt(sfactor_sq);\r\n if (sweep === large) {\r\n sfactor = -sfactor;\r\n }\r\n\r\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\r\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\r\n\r\n const th0 = Math.atan2(y0 - yc, x0 - xc);\r\n const th1 = Math.atan2(y1 - yc, x1 - xc);\r\n\r\n let th_arc = th1 - th0;\r\n if (th_arc < 0 && sweep === 1) {\r\n th_arc += 2 * Math.PI;\r\n } else if (th_arc > 0 && sweep === 0) {\r\n th_arc -= 2 * Math.PI;\r\n }\r\n\r\n const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\r\n const result = [];\r\n\r\n for (let i = 0; i < segments; i++) {\r\n const th2 = th0 + (i * th_arc) / segments;\r\n const th3 = th0 + ((i + 1) * th_arc) / segments;\r\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\r\n const a00 = cos_th * rx;\r\n const a01 = -sin_th * ry;\r\n const a10 = sin_th * rx;\r\n const a11 = cos_th * ry;\r\n\r\n const th_half = 0.5 * (th1 - th0);\r\n const t =\r\n ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\r\n Math.sin(th_half);\r\n const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\r\n const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\r\n const x3 = cx + Math.cos(th1);\r\n const y3 = cy + Math.sin(th1);\r\n const x2 = x3 + t * Math.sin(th1);\r\n const y2 = y3 - t * Math.cos(th1);\r\n\r\n return [\r\n a00 * x1 + a01 * y1,\r\n a10 * x1 + a11 * y1,\r\n a00 * x2 + a01 * y2,\r\n a10 * x2 + a11 * y2,\r\n a00 * x3 + a01 * y3,\r\n a10 * x3 + a11 * y3\r\n ];\r\n};\r\n\r\nclass SVGPath {\r\n static apply(doc, path) {\r\n const commands = parse(path);\r\n apply(commands, doc);\r\n }\r\n}\r\n\r\nexport default SVGPath;\r\n","import SVGPath from '../path';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\n// This constant is used to approximate a symmetrical arc using a cubic\r\n// Bezier curve.\r\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\r\nexport default {\r\n initVector() {\r\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\r\n return (this._ctmStack = []);\r\n },\r\n\r\n save() {\r\n this._ctmStack.push(this._ctm.slice());\r\n // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\r\n return this.addContent('q');\r\n },\r\n\r\n restore() {\r\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\r\n return this.addContent('Q');\r\n },\r\n\r\n closePath() {\r\n return this.addContent('h');\r\n },\r\n\r\n lineWidth(w) {\r\n return this.addContent(`${number(w)} w`);\r\n },\r\n\r\n _CAP_STYLES: {\r\n BUTT: 0,\r\n ROUND: 1,\r\n SQUARE: 2\r\n },\r\n\r\n lineCap(c) {\r\n if (typeof c === 'string') {\r\n c = this._CAP_STYLES[c.toUpperCase()];\r\n }\r\n return this.addContent(`${c} J`);\r\n },\r\n\r\n _JOIN_STYLES: {\r\n MITER: 0,\r\n ROUND: 1,\r\n BEVEL: 2\r\n },\r\n\r\n lineJoin(j) {\r\n if (typeof j === 'string') {\r\n j = this._JOIN_STYLES[j.toUpperCase()];\r\n }\r\n return this.addContent(`${j} j`);\r\n },\r\n\r\n miterLimit(m) {\r\n return this.addContent(`${number(m)} M`);\r\n },\r\n\r\n dash(length, options) {\r\n let phase;\r\n if (options == null) {\r\n options = {};\r\n }\r\n if (length == null) {\r\n return this;\r\n }\r\n if (Array.isArray(length)) {\r\n length = length.map(v => number(v)).join(' ');\r\n phase = options.phase || 0;\r\n return this.addContent(`[${length}] ${number(phase)} d`);\r\n } else {\r\n const space = options.space != null ? options.space : length;\r\n phase = options.phase || 0;\r\n return this.addContent(\r\n `[${number(length)} ${number(space)}] ${number(phase)} d`\r\n );\r\n }\r\n },\r\n\r\n undash() {\r\n return this.addContent('[] 0 d');\r\n },\r\n\r\n moveTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} m`);\r\n },\r\n\r\n lineTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} l`);\r\n },\r\n\r\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n return this.addContent(\r\n `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\r\n x\r\n )} ${number(y)} c`\r\n );\r\n },\r\n\r\n quadraticCurveTo(cpx, cpy, x, y) {\r\n return this.addContent(\r\n `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`\r\n );\r\n },\r\n\r\n rect(x, y, w, h) {\r\n return this.addContent(\r\n `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`\r\n );\r\n },\r\n\r\n roundedRect(x, y, w, h, r) {\r\n if (r == null) {\r\n r = 0;\r\n }\r\n r = Math.min(r, 0.5 * w, 0.5 * h);\r\n\r\n // amount to inset control points from corners (see `ellipse`)\r\n const c = r * (1.0 - KAPPA);\r\n\r\n this.moveTo(x + r, y);\r\n this.lineTo(x + w - r, y);\r\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\r\n this.lineTo(x + w, y + h - r);\r\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\r\n this.lineTo(x + r, y + h);\r\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\r\n this.lineTo(x, y + r);\r\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\r\n return this.closePath();\r\n },\r\n\r\n ellipse(x, y, r1, r2) {\r\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\r\n if (r2 == null) {\r\n r2 = r1;\r\n }\r\n x -= r1;\r\n y -= r2;\r\n const ox = r1 * KAPPA;\r\n const oy = r2 * KAPPA;\r\n const xe = x + r1 * 2;\r\n const ye = y + r2 * 2;\r\n const xm = x + r1;\r\n const ym = y + r2;\r\n\r\n this.moveTo(x, ym);\r\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\r\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\r\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\r\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\r\n return this.closePath();\r\n },\r\n\r\n circle(x, y, radius) {\r\n return this.ellipse(x, y, radius);\r\n },\r\n\r\n arc(x, y, radius, startAngle, endAngle, anticlockwise) {\r\n if (anticlockwise == null) {\r\n anticlockwise = false;\r\n }\r\n const TWO_PI = 2.0 * Math.PI;\r\n const HALF_PI = 0.5 * Math.PI;\r\n\r\n let deltaAng = endAngle - startAngle;\r\n\r\n if (Math.abs(deltaAng) > TWO_PI) {\r\n // draw only full circle if more than that is specified\r\n deltaAng = TWO_PI;\r\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\r\n // necessary to flip direction of rendering\r\n const dir = anticlockwise ? -1 : 1;\r\n deltaAng = dir * TWO_PI + deltaAng;\r\n }\r\n\r\n const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\r\n const segAng = deltaAng / numSegs;\r\n const handleLen = (segAng / HALF_PI) * KAPPA * radius;\r\n let curAng = startAngle;\r\n\r\n // component distances between anchor point and control point\r\n let deltaCx = -Math.sin(curAng) * handleLen;\r\n let deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // anchor point\r\n let ax = x + Math.cos(curAng) * radius;\r\n let ay = y + Math.sin(curAng) * radius;\r\n\r\n // calculate and render segments\r\n this.moveTo(ax, ay);\r\n\r\n for (let segIdx = 0; segIdx < numSegs; segIdx++) {\r\n // starting control point\r\n const cp1x = ax + deltaCx;\r\n const cp1y = ay + deltaCy;\r\n\r\n // step angle\r\n curAng += segAng;\r\n\r\n // next anchor point\r\n ax = x + Math.cos(curAng) * radius;\r\n ay = y + Math.sin(curAng) * radius;\r\n\r\n // next control point delta\r\n deltaCx = -Math.sin(curAng) * handleLen;\r\n deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // ending control point\r\n const cp2x = ax - deltaCx;\r\n const cp2y = ay - deltaCy;\r\n\r\n // render segment\r\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n polygon(...points) {\r\n this.moveTo(...(points.shift() || []));\r\n for (let point of points) {\r\n this.lineTo(...(point || []));\r\n }\r\n return this.closePath();\r\n },\r\n\r\n path(path) {\r\n SVGPath.apply(this, path);\r\n return this;\r\n },\r\n\r\n _windingRule(rule) {\r\n if (/even-?odd/.test(rule)) {\r\n return '*';\r\n }\r\n\r\n return '';\r\n },\r\n\r\n fill(color, rule) {\r\n if (/(even-?odd)|(non-?zero)/.test(color)) {\r\n rule = color;\r\n color = null;\r\n }\r\n\r\n if (color) {\r\n this.fillColor(color);\r\n }\r\n return this.addContent(`f${this._windingRule(rule)}`);\r\n },\r\n\r\n stroke(color) {\r\n if (color) {\r\n this.strokeColor(color);\r\n }\r\n return this.addContent('S');\r\n },\r\n\r\n fillAndStroke(fillColor, strokeColor, rule) {\r\n if (strokeColor == null) {\r\n strokeColor = fillColor;\r\n }\r\n const isFillRule = /(even-?odd)|(non-?zero)/;\r\n if (isFillRule.test(fillColor)) {\r\n rule = fillColor;\r\n fillColor = null;\r\n }\r\n\r\n if (isFillRule.test(strokeColor)) {\r\n rule = strokeColor;\r\n strokeColor = fillColor;\r\n }\r\n\r\n if (fillColor) {\r\n this.fillColor(fillColor);\r\n this.strokeColor(strokeColor);\r\n }\r\n\r\n return this.addContent(`B${this._windingRule(rule)}`);\r\n },\r\n\r\n clip(rule) {\r\n return this.addContent(`W${this._windingRule(rule)} n`);\r\n },\r\n\r\n transform(m11, m12, m21, m22, dx, dy) {\r\n // keep track of the current transformation matrix\r\n const m = this._ctm;\r\n const [m0, m1, m2, m3, m4, m5] = m;\r\n m[0] = m0 * m11 + m2 * m12;\r\n m[1] = m1 * m11 + m3 * m12;\r\n m[2] = m0 * m21 + m2 * m22;\r\n m[3] = m1 * m21 + m3 * m22;\r\n m[4] = m0 * dx + m2 * dy + m4;\r\n m[5] = m1 * dx + m3 * dy + m5;\r\n\r\n const values = [m11, m12, m21, m22, dx, dy].map(v => number(v)).join(' ');\r\n return this.addContent(`${values} cm`);\r\n },\r\n\r\n translate(x, y) {\r\n return this.transform(1, 0, 0, 1, x, y);\r\n },\r\n\r\n rotate(angle, options) {\r\n let y;\r\n if (options == null) {\r\n options = {};\r\n }\r\n const rad = (angle * Math.PI) / 180;\r\n const cos = Math.cos(rad);\r\n const sin = Math.sin(rad);\r\n let x = (y = 0);\r\n\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n const x1 = x * cos - y * sin;\r\n const y1 = x * sin + y * cos;\r\n x -= x1;\r\n y -= y1;\r\n }\r\n\r\n return this.transform(cos, sin, -sin, cos, x, y);\r\n },\r\n\r\n scale(xFactor, yFactor, options) {\r\n let y;\r\n if (yFactor == null) {\r\n yFactor = xFactor;\r\n }\r\n if (options == null) {\r\n options = {};\r\n }\r\n if (typeof yFactor === 'object') {\r\n options = yFactor;\r\n yFactor = xFactor;\r\n }\r\n\r\n let x = (y = 0);\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n x -= xFactor * x;\r\n y -= yFactor * y;\r\n }\r\n\r\n return this.transform(xFactor, 0, 0, yFactor, x, y);\r\n }\r\n};\r\n","import fs from 'fs';\r\n\r\nconst WIN_ANSI_MAP = {\r\n 402: 131,\r\n 8211: 150,\r\n 8212: 151,\r\n 8216: 145,\r\n 8217: 146,\r\n 8218: 130,\r\n 8220: 147,\r\n 8221: 148,\r\n 8222: 132,\r\n 8224: 134,\r\n 8225: 135,\r\n 8226: 149,\r\n 8230: 133,\r\n 8364: 128,\r\n 8240: 137,\r\n 8249: 139,\r\n 8250: 155,\r\n 710: 136,\r\n 8482: 153,\r\n 338: 140,\r\n 339: 156,\r\n 732: 152,\r\n 352: 138,\r\n 353: 154,\r\n 376: 159,\r\n 381: 142,\r\n 382: 158\r\n};\r\n\r\nconst characters = `\\\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n \r\nspace exclam quotedbl numbersign\r\ndollar percent ampersand quotesingle\r\nparenleft parenright asterisk plus\r\ncomma hyphen period slash\r\nzero one two three\r\nfour five six seven\r\neight nine colon semicolon\r\nless equal greater question\r\n \r\nat A B C\r\nD E F G\r\nH I J K\r\nL M N O\r\nP Q R S\r\nT U V W\r\nX Y Z bracketleft\r\nbackslash bracketright asciicircum underscore\r\n \r\ngrave a b c\r\nd e f g\r\nh i j k\r\nl m n o\r\np q r s\r\nt u v w\r\nx y z braceleft\r\nbar braceright asciitilde .notdef\r\n \r\nEuro .notdef quotesinglbase florin\r\nquotedblbase ellipsis dagger daggerdbl\r\ncircumflex perthousand Scaron guilsinglleft\r\nOE .notdef Zcaron .notdef\r\n.notdef quoteleft quoteright quotedblleft\r\nquotedblright bullet endash emdash\r\ntilde trademark scaron guilsinglright\r\noe .notdef zcaron ydieresis\r\n \r\nspace exclamdown cent sterling\r\ncurrency yen brokenbar section\r\ndieresis copyright ordfeminine guillemotleft\r\nlogicalnot hyphen registered macron\r\ndegree plusminus twosuperior threesuperior\r\nacute mu paragraph periodcentered\r\ncedilla onesuperior ordmasculine guillemotright\r\nonequarter onehalf threequarters questiondown\r\n \r\nAgrave Aacute Acircumflex Atilde\r\nAdieresis Aring AE Ccedilla\r\nEgrave Eacute Ecircumflex Edieresis\r\nIgrave Iacute Icircumflex Idieresis\r\nEth Ntilde Ograve Oacute\r\nOcircumflex Otilde Odieresis multiply\r\nOslash Ugrave Uacute Ucircumflex\r\nUdieresis Yacute Thorn germandbls\r\n \r\nagrave aacute acircumflex atilde\r\nadieresis aring ae ccedilla\r\negrave eacute ecircumflex edieresis\r\nigrave iacute icircumflex idieresis\r\neth ntilde ograve oacute\r\nocircumflex otilde odieresis divide\r\noslash ugrave uacute ucircumflex\r\nudieresis yacute thorn ydieresis\\\r\n`.split(/\\s+/);\r\n\r\nclass AFMFont {\r\n static open(filename) {\r\n return new AFMFont(fs.readFileSync(filename, 'utf8'));\r\n }\r\n\r\n constructor(contents) {\r\n this.contents = contents;\r\n this.attributes = {};\r\n this.glyphWidths = {};\r\n this.boundingBoxes = {};\r\n this.kernPairs = {};\r\n\r\n this.parse();\r\n // todo: remove charWidths since appears to not be used\r\n this.charWidths = new Array(256);\r\n for (let char = 0; char <= 255; char++) {\r\n this.charWidths[char] = this.glyphWidths[characters[char]];\r\n }\r\n\r\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(e => +e);\r\n this.ascender = +(this.attributes['Ascender'] || 0);\r\n this.descender = +(this.attributes['Descender'] || 0);\r\n this.xHeight = +(this.attributes['XHeight'] || 0);\r\n this.capHeight = +(this.attributes['CapHeight'] || 0);\r\n this.lineGap =\r\n this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\r\n }\r\n\r\n parse() {\r\n let section = '';\r\n for (let line of this.contents.split('\\n')) {\r\n var match;\r\n var a;\r\n if ((match = line.match(/^Start(\\w+)/))) {\r\n section = match[1];\r\n continue;\r\n } else if ((match = line.match(/^End(\\w+)/))) {\r\n section = '';\r\n continue;\r\n }\r\n\r\n switch (section) {\r\n case 'FontMetrics':\r\n match = line.match(/(^\\w+)\\s+(.*)/);\r\n var key = match[1];\r\n var value = match[2];\r\n\r\n if ((a = this.attributes[key])) {\r\n if (!Array.isArray(a)) {\r\n a = this.attributes[key] = [a];\r\n }\r\n a.push(value);\r\n } else {\r\n this.attributes[key] = value;\r\n }\r\n break;\r\n\r\n case 'CharMetrics':\r\n if (!/^CH?\\s/.test(line)) {\r\n continue;\r\n }\r\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\r\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\r\n break;\r\n\r\n case 'KernPairs':\r\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\r\n if (match) {\r\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n encodeText(text) {\r\n const res = [];\r\n for (let i = 0, len = text.length; i < len; i++) {\r\n let char = text.charCodeAt(i);\r\n char = WIN_ANSI_MAP[char] || char;\r\n res.push(char.toString(16));\r\n }\r\n\r\n return res;\r\n }\r\n\r\n glyphsForString(string) {\r\n const glyphs = [];\r\n\r\n for (let i = 0, len = string.length; i < len; i++) {\r\n const charCode = string.charCodeAt(i);\r\n glyphs.push(this.characterToGlyph(charCode));\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n characterToGlyph(character) {\r\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\r\n }\r\n\r\n widthOfGlyph(glyph) {\r\n return this.glyphWidths[glyph] || 0;\r\n }\r\n\r\n getKernPair(left, right) {\r\n return this.kernPairs[left + '\\0' + right] || 0;\r\n }\r\n\r\n advancesForGlyphs(glyphs) {\r\n const advances = [];\r\n\r\n for (let index = 0; index < glyphs.length; index++) {\r\n const left = glyphs[index];\r\n const right = glyphs[index + 1];\r\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\r\n }\r\n\r\n return advances;\r\n }\r\n}\r\n\r\nexport default AFMFont;\r\n","class PDFFont {\r\n constructor() {}\r\n\r\n encode() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n widthOfString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n ref() {\r\n return this.dictionary != null\r\n ? this.dictionary\r\n : (this.dictionary = this.document.ref());\r\n }\r\n\r\n finalize() {\r\n if (this.embedded || this.dictionary == null) {\r\n return;\r\n }\r\n\r\n this.embed();\r\n return (this.embedded = true);\r\n }\r\n\r\n embed() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n lineHeight(size, includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n const gap = includeGap ? this.lineGap : 0;\r\n return ((this.ascender + gap - this.descender) / 1000) * size;\r\n }\r\n}\r\n\r\nexport default PDFFont;\r\n","import AFMFont from './afm';\r\nimport PDFFont from '../font';\r\nimport fs from 'fs';\r\n\r\n// This insanity is so bundlers can inline the font files\r\nconst STANDARD_FONTS = {\r\n Courier() {\r\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\r\n },\r\n 'Courier-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\r\n },\r\n 'Courier-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\r\n },\r\n 'Courier-BoldOblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\r\n },\r\n Helvetica() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\r\n },\r\n 'Helvetica-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\r\n },\r\n 'Helvetica-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\r\n },\r\n 'Helvetica-BoldOblique'() {\r\n return fs.readFileSync(\r\n __dirname + '/data/Helvetica-BoldOblique.afm',\r\n 'utf8'\r\n );\r\n },\r\n 'Times-Roman'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\r\n },\r\n 'Times-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\r\n },\r\n 'Times-Italic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\r\n },\r\n 'Times-BoldItalic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\r\n },\r\n Symbol() {\r\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\r\n },\r\n ZapfDingbats() {\r\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\r\n }\r\n};\r\n\r\nclass StandardFont extends PDFFont {\r\n constructor(document, name, id) {\r\n super();\r\n this.document = document;\r\n this.name = name;\r\n this.id = id;\r\n this.font = new AFMFont(STANDARD_FONTS[this.name]());\r\n ({\r\n ascender: this.ascender,\r\n descender: this.descender,\r\n bbox: this.bbox,\r\n lineGap: this.lineGap,\r\n xHeight: this.xHeight,\r\n capHeight: this.capHeight\r\n } = this.font);\r\n }\r\n\r\n embed() {\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n BaseFont: this.name,\r\n Subtype: 'Type1',\r\n Encoding: 'WinAnsiEncoding'\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n encode(text) {\r\n const encoded = this.font.encodeText(text);\r\n const glyphs = this.font.glyphsForString(`${text}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n const positions = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n positions.push({\r\n xAdvance: advances[i],\r\n yAdvance: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n advanceWidth: this.font.widthOfGlyph(glyph)\r\n });\r\n }\r\n\r\n return [encoded, positions];\r\n }\r\n\r\n widthOfString(string, size) {\r\n const glyphs = this.font.glyphsForString(`${string}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n\r\n let width = 0;\r\n for (let advance of advances) {\r\n width += advance;\r\n }\r\n\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n static isStandardFont(name) {\r\n return name in STANDARD_FONTS;\r\n }\r\n}\r\n\r\nexport default StandardFont;\r\n","import PDFFont from '../font';\r\n\r\nconst toHex = function(num) {\r\n return `0000${num.toString(16)}`.slice(-4);\r\n};\r\n\r\nclass EmbeddedFont extends PDFFont {\r\n constructor(document, font, id) {\r\n super();\r\n this.document = document;\r\n this.font = font;\r\n this.id = id;\r\n this.subset = this.font.createSubset();\r\n this.unicode = [[0]];\r\n this.widths = [this.font.getGlyph(0).advanceWidth];\r\n\r\n this.name = this.font.postscriptName;\r\n this.scale = 1000 / this.font.unitsPerEm;\r\n this.ascender = this.font.ascent * this.scale;\r\n this.descender = this.font.descent * this.scale;\r\n this.xHeight = this.font.xHeight * this.scale;\r\n this.capHeight = this.font.capHeight * this.scale;\r\n this.lineGap = this.font.lineGap * this.scale;\r\n this.bbox = this.font.bbox;\r\n\r\n if (document.options.fontLayoutCache !== false) {\r\n this.layoutCache = Object.create(null);\r\n }\r\n }\r\n\r\n layoutRun(text, features) {\r\n const run = this.font.layout(text, features);\r\n\r\n // Normalize position values\r\n for (let i = 0; i < run.positions.length; i++) {\r\n const position = run.positions[i];\r\n for (let key in position) {\r\n position[key] *= this.scale;\r\n }\r\n\r\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\r\n }\r\n\r\n return run;\r\n }\r\n\r\n layoutCached(text) {\r\n if (!this.layoutCache) {\r\n return this.layoutRun(text);\r\n }\r\n let cached;\r\n if ((cached = this.layoutCache[text])) {\r\n return cached;\r\n }\r\n\r\n const run = this.layoutRun(text);\r\n this.layoutCache[text] = run;\r\n return run;\r\n }\r\n\r\n layout(text, features, onlyWidth) {\r\n // Skip the cache if any user defined features are applied\r\n if (features) {\r\n return this.layoutRun(text, features);\r\n }\r\n\r\n let glyphs = onlyWidth ? null : [];\r\n let positions = onlyWidth ? null : [];\r\n let advanceWidth = 0;\r\n\r\n // Split the string by words to increase cache efficiency.\r\n // For this purpose, spaces and tabs are a good enough delimeter.\r\n let last = 0;\r\n let index = 0;\r\n while (index <= text.length) {\r\n var needle;\r\n if (\r\n (index === text.length && last < index) ||\r\n ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\r\n ) {\r\n const run = this.layoutCached(text.slice(last, ++index));\r\n if (!onlyWidth) {\r\n glyphs = glyphs.concat(run.glyphs);\r\n positions = positions.concat(run.positions);\r\n }\r\n\r\n advanceWidth += run.advanceWidth;\r\n last = index;\r\n } else {\r\n index++;\r\n }\r\n }\r\n\r\n return { glyphs, positions, advanceWidth };\r\n }\r\n\r\n encode(text, features) {\r\n const { glyphs, positions } = this.layout(text, features);\r\n\r\n const res = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n const gid = this.subset.includeGlyph(glyph.id);\r\n res.push(`0000${gid.toString(16)}`.slice(-4));\r\n\r\n if (this.widths[gid] == null) {\r\n this.widths[gid] = glyph.advanceWidth * this.scale;\r\n }\r\n if (this.unicode[gid] == null) {\r\n this.unicode[gid] = glyph.codePoints;\r\n }\r\n }\r\n\r\n return [res, positions];\r\n }\r\n\r\n widthOfString(string, size, features) {\r\n const width = this.layout(string, features, true).advanceWidth;\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n embed() {\r\n const isCFF = this.subset.cff != null;\r\n const fontFile = this.document.ref();\r\n\r\n if (isCFF) {\r\n fontFile.data.Subtype = 'CIDFontType0C';\r\n }\r\n\r\n this.subset\r\n .encodeStream()\r\n .on('data', data => fontFile.write(data))\r\n .on('end', () => fontFile.end());\r\n\r\n const familyClass =\r\n ((this.font['OS/2'] != null\r\n ? this.font['OS/2'].sFamilyClass\r\n : undefined) || 0) >> 8;\r\n let flags = 0;\r\n if (this.font.post.isFixedPitch) {\r\n flags |= 1 << 0;\r\n }\r\n if (1 <= familyClass && familyClass <= 7) {\r\n flags |= 1 << 1;\r\n }\r\n flags |= 1 << 2; // assume the font uses non-latin characters\r\n if (familyClass === 10) {\r\n flags |= 1 << 3;\r\n }\r\n if (this.font.head.macStyle.italic) {\r\n flags |= 1 << 6;\r\n }\r\n\r\n // generate a tag (6 uppercase letters. 16 is the char code offset from '1' to 'A'. 74 will map to 'Z')\r\n const tag = [1, 2, 3, 4, 5, 6]\r\n .map(i => String.fromCharCode((this.id.charCodeAt(i) || 74) + 16))\r\n .join('');\r\n const name = tag + '+' + this.font.postscriptName;\r\n\r\n const { bbox } = this.font;\r\n const descriptor = this.document.ref({\r\n Type: 'FontDescriptor',\r\n FontName: name,\r\n Flags: flags,\r\n FontBBox: [\r\n bbox.minX * this.scale,\r\n bbox.minY * this.scale,\r\n bbox.maxX * this.scale,\r\n bbox.maxY * this.scale\r\n ],\r\n ItalicAngle: this.font.italicAngle,\r\n Ascent: this.ascender,\r\n Descent: this.descender,\r\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\r\n XHeight: (this.font.xHeight || 0) * this.scale,\r\n StemV: 0\r\n }); // not sure how to calculate this\r\n\r\n if (isCFF) {\r\n descriptor.data.FontFile3 = fontFile;\r\n } else {\r\n descriptor.data.FontFile2 = fontFile;\r\n }\r\n\r\n descriptor.end();\r\n\r\n const descendantFont = this.document.ref({\r\n Type: 'Font',\r\n Subtype: isCFF ? 'CIDFontType0' : 'CIDFontType2',\r\n BaseFont: name,\r\n CIDSystemInfo: {\r\n Registry: new String('Adobe'),\r\n Ordering: new String('Identity'),\r\n Supplement: 0\r\n },\r\n FontDescriptor: descriptor,\r\n W: [0, this.widths]\r\n });\r\n\r\n descendantFont.end();\r\n\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n Subtype: 'Type0',\r\n BaseFont: name,\r\n Encoding: 'Identity-H',\r\n DescendantFonts: [descendantFont],\r\n ToUnicode: this.toUnicodeCmap()\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n // Maps the glyph ids encoded in the PDF back to unicode strings\r\n // Because of ligature substitutions and the like, there may be one or more\r\n // unicode characters represented by each glyph.\r\n toUnicodeCmap() {\r\n const cmap = this.document.ref();\r\n\r\n const entries = [];\r\n for (let codePoints of this.unicode) {\r\n const encoded = [];\r\n\r\n // encode codePoints to utf16\r\n for (let value of codePoints) {\r\n if (value > 0xffff) {\r\n value -= 0x10000;\r\n encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\r\n value = 0xdc00 | (value & 0x3ff);\r\n }\r\n\r\n encoded.push(toHex(value));\r\n }\r\n\r\n entries.push(`<${encoded.join(' ')}>`);\r\n }\r\n\r\n cmap.end(`\\\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo <<\r\n /Registry (Adobe)\r\n /Ordering (UCS)\r\n /Supplement 0\r\n>> def\r\n/CMapName /Adobe-Identity-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000><ffff>\r\nendcodespacerange\r\n1 beginbfrange\r\n<0000> <${toHex(entries.length - 1)}> [${entries.join(' ')}]\r\nendbfrange\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\\\r\n`);\r\n\r\n return cmap;\r\n }\r\n}\r\n\r\nexport default EmbeddedFont;\r\n","import fs from 'fs';\r\nimport fontkit from 'fontkit';\r\nimport StandardFont from './font/standard';\r\nimport EmbeddedFont from './font/embedded';\r\n\r\nclass PDFFontFactory {\r\n static open(document, src, family, id) {\r\n let font;\r\n if (typeof src === 'string') {\r\n if (StandardFont.isStandardFont(src)) {\r\n return new StandardFont(document, src, id);\r\n }\r\n\r\n src = fs.readFileSync(src);\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n font = fontkit.create(src, family);\r\n } else if (src instanceof Uint8Array) {\r\n font = fontkit.create(new Buffer(src), family);\r\n } else if (src instanceof ArrayBuffer) {\r\n font = fontkit.create(new Buffer(new Uint8Array(src)), family);\r\n }\r\n\r\n if (font == null) {\r\n throw new Error('Not a supported font format or standard PDF font.');\r\n }\r\n\r\n return new EmbeddedFont(document, font, id);\r\n }\r\n}\r\n\r\nexport default PDFFontFactory;\r\n","import PDFFontFactory from '../font_factory';\r\n\r\nexport default {\r\n initFonts(defaultFont = 'Helvetica') {\r\n // Lookup table for embedded fonts\r\n this._fontFamilies = {};\r\n this._fontCount = 0;\r\n\r\n // Font state\r\n this._fontSize = 12;\r\n this._font = null;\r\n\r\n this._registeredFonts = {};\r\n\r\n // Set the default font\r\n if (defaultFont) {\r\n this.font(defaultFont);\r\n }\r\n },\r\n\r\n font(src, family, size) {\r\n let cacheKey, font;\r\n if (typeof family === 'number') {\r\n size = family;\r\n family = null;\r\n }\r\n\r\n // check registered fonts if src is a string\r\n if (typeof src === 'string' && this._registeredFonts[src]) {\r\n cacheKey = src;\r\n ({ src, family } = this._registeredFonts[src]);\r\n } else {\r\n cacheKey = family || src;\r\n if (typeof cacheKey !== 'string') {\r\n cacheKey = null;\r\n }\r\n }\r\n\r\n if (size != null) {\r\n this.fontSize(size);\r\n }\r\n\r\n // fast path: check if the font is already in the PDF\r\n if ((font = this._fontFamilies[cacheKey])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // load the font\r\n const id = `F${++this._fontCount}`;\r\n this._font = PDFFontFactory.open(this, src, family, id);\r\n\r\n // check for existing font familes with the same name already in the PDF\r\n // useful if the font was passed as a buffer\r\n if ((font = this._fontFamilies[this._font.name])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // save the font for reuse later\r\n if (cacheKey) {\r\n this._fontFamilies[cacheKey] = this._font;\r\n }\r\n\r\n if (this._font.name) {\r\n this._fontFamilies[this._font.name] = this._font;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n fontSize(_fontSize) {\r\n this._fontSize = _fontSize;\r\n return this;\r\n },\r\n\r\n currentLineHeight(includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n return this._font.lineHeight(this._fontSize, includeGap);\r\n },\r\n\r\n registerFont(name, src, family) {\r\n this._registeredFonts[name] = {\r\n src,\r\n family\r\n };\r\n\r\n return this;\r\n }\r\n};\r\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from 'linebreak';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n constructor(document, options) {\r\n super();\r\n this.document = document;\r\n this.indent = options.indent || 0;\r\n this.characterSpacing = options.characterSpacing || 0;\r\n this.wordSpacing = options.wordSpacing === 0;\r\n this.columns = options.columns || 1;\r\n this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\r\n this.lineWidth =\r\n (options.width - this.columnGap * (this.columns - 1)) / this.columns;\r\n this.spaceLeft = this.lineWidth;\r\n this.startX = this.document.x;\r\n this.startY = this.document.y;\r\n this.column = 1;\r\n this.ellipsis = options.ellipsis;\r\n this.continuedX = 0;\r\n this.features = options.features;\r\n\r\n // calculate the maximum Y position the text can appear at\r\n if (options.height != null) {\r\n this.height = options.height;\r\n this.maxY = this.startY + options.height;\r\n } else {\r\n this.maxY = this.document.page.maxY();\r\n }\r\n\r\n // handle paragraph indents\r\n this.on('firstLine', options => {\r\n // if this is the first line of the text segment, and\r\n // we're continuing where we left off, indent that much\r\n // otherwise use the user specified indent option\r\n const indent = this.continuedX || this.indent;\r\n this.document.x += indent;\r\n this.lineWidth -= indent;\r\n\r\n return this.once('line', () => {\r\n this.document.x -= indent;\r\n this.lineWidth += indent;\r\n if (options.continued && !this.continuedX) {\r\n this.continuedX = this.indent;\r\n }\r\n if (!options.continued) {\r\n return (this.continuedX = 0);\r\n }\r\n });\r\n });\r\n\r\n // handle left aligning last lines of paragraphs\r\n this.on('lastLine', options => {\r\n const { align } = options;\r\n if (align === 'justify') {\r\n options.align = 'left';\r\n }\r\n this.lastLine = true;\r\n\r\n return this.once('line', () => {\r\n this.document.y += options.paragraphGap || 0;\r\n options.align = align;\r\n return (this.lastLine = false);\r\n });\r\n });\r\n }\r\n\r\n wordWidth(word) {\r\n return (\r\n this.document.widthOfString(word, this) +\r\n this.characterSpacing +\r\n this.wordSpacing\r\n );\r\n }\r\n\r\n eachWord(text, fn) {\r\n // setup a unicode line breaker\r\n let bk;\r\n const breaker = new LineBreaker(text);\r\n let last = null;\r\n const wordWidths = Object.create(null);\r\n\r\n while ((bk = breaker.nextBreak())) {\r\n var shouldContinue;\r\n let word = text.slice(\r\n (last != null ? last.position : undefined) || 0,\r\n bk.position\r\n );\r\n let w =\r\n wordWidths[word] != null\r\n ? wordWidths[word]\r\n : (wordWidths[word] = this.wordWidth(word));\r\n\r\n // if the word is longer than the whole line, chop it up\r\n // TODO: break by grapheme clusters, not JS string characters\r\n if (w > this.lineWidth + this.continuedX) {\r\n // make some fake break objects\r\n let lbk = last;\r\n const fbk = {};\r\n\r\n while (word.length) {\r\n // fit as much of the word as possible into the space we have\r\n var l, mightGrow;\r\n if (w > this.spaceLeft) {\r\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n // an issue with long loops when processing massive words, such as a huge number of spaces\r\n l = Math.ceil(this.spaceLeft / (w / word.length));\r\n w = this.wordWidth(word.slice(0, l));\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n } else {\r\n l = word.length;\r\n }\r\n let mustShrink = w > this.spaceLeft && l > 0;\r\n // shrink or grow word as necessary after our near-guess above\r\n while (mustShrink || mightGrow) {\r\n if (mustShrink) {\r\n w = this.wordWidth(word.slice(0, --l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n } else {\r\n w = this.wordWidth(word.slice(0, ++l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n }\r\n }\r\n\r\n // send a required break unless this is the last piece and a linebreak is not specified\r\n fbk.required = bk.required || l < word.length;\r\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n lbk = { required: false };\r\n\r\n // get the remaining piece of the word\r\n word = word.slice(l);\r\n w = this.wordWidth(word);\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n // otherwise just emit the break as it was given to us\r\n shouldContinue = fn(word, w, bk, last);\r\n }\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n last = bk;\r\n }\r\n }\r\n\r\n wrap(text, options) {\r\n // override options from previous continued fragments\r\n if (options.indent != null) {\r\n this.indent = options.indent;\r\n }\r\n if (options.characterSpacing != null) {\r\n this.characterSpacing = options.characterSpacing;\r\n }\r\n if (options.wordSpacing != null) {\r\n this.wordSpacing = options.wordSpacing;\r\n }\r\n if (options.ellipsis != null) {\r\n this.ellipsis = options.ellipsis;\r\n }\r\n\r\n // make sure we're actually on the page\r\n // and that the first line of is never by\r\n // itself at the bottom of a page (orphans)\r\n const nextY = this.document.y + this.document.currentLineHeight(true);\r\n if (this.document.y > this.maxY || nextY > this.maxY) {\r\n this.nextSection();\r\n }\r\n\r\n let buffer = '';\r\n let textWidth = 0;\r\n let wc = 0;\r\n let lc = 0;\r\n\r\n let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n const emitLine = () => {\r\n options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n options.wordCount = wc;\r\n options.lineWidth = this.lineWidth;\r\n ({ y } = this.document);\r\n this.emit('line', buffer, options, this);\r\n return lc++;\r\n };\r\n\r\n this.emit('sectionStart', options, this);\r\n\r\n this.eachWord(text, (word, w, bk, last) => {\r\n if (last == null || last.required) {\r\n this.emit('firstLine', options, this);\r\n this.spaceLeft = this.lineWidth;\r\n }\r\n\r\n if (w <= this.spaceLeft) {\r\n buffer += word;\r\n textWidth += w;\r\n wc++;\r\n }\r\n\r\n if (bk.required || w > this.spaceLeft) {\r\n // if the user specified a max height and an ellipsis, and is about to pass the\r\n // max height and max columns after the next line, append the ellipsis\r\n const lh = this.document.currentLineHeight(true);\r\n if (\r\n this.height != null &&\r\n this.ellipsis &&\r\n this.document.y + lh * 2 > this.maxY &&\r\n this.column >= this.columns\r\n ) {\r\n if (this.ellipsis === true) {\r\n this.ellipsis = '…';\r\n } // map default ellipsis character\r\n buffer = buffer.replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n // remove characters from the buffer until the ellipsis fits\r\n // to avoid inifinite loop need to stop while-loop if buffer is empty string\r\n while (buffer && textWidth > this.lineWidth) {\r\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n }\r\n // need to add ellipsis only if there is enough space for it\r\n if (textWidth <= this.lineWidth) {\r\n buffer = buffer + this.ellipsis;\r\n }\r\n\r\n textWidth = this.wordWidth(buffer);\r\n }\r\n\r\n if (bk.required) {\r\n if (w > this.spaceLeft) {\r\n emitLine();\r\n buffer = word;\r\n textWidth = w;\r\n wc = 1;\r\n }\r\n\r\n this.emit('lastLine', options, this);\r\n }\r\n\r\n emitLine();\r\n\r\n // if we've reached the edge of the page,\r\n // continue on a new page or column\r\n if (this.document.y + lh > this.maxY) {\r\n const shouldContinue = this.nextSection();\r\n\r\n // stop if we reached the maximum height\r\n if (!shouldContinue) {\r\n wc = 0;\r\n buffer = '';\r\n return false;\r\n }\r\n }\r\n\r\n // reset the space left and buffer\r\n if (bk.required) {\r\n this.spaceLeft = this.lineWidth;\r\n buffer = '';\r\n textWidth = 0;\r\n return (wc = 0);\r\n } else {\r\n // reset the space left and buffer\r\n this.spaceLeft = this.lineWidth - w;\r\n buffer = word;\r\n textWidth = w;\r\n return (wc = 1);\r\n }\r\n } else {\r\n return (this.spaceLeft -= w);\r\n }\r\n });\r\n\r\n if (wc > 0) {\r\n this.emit('lastLine', options, this);\r\n emitLine();\r\n }\r\n\r\n this.emit('sectionEnd', options, this);\r\n\r\n // if the wrap is set to be continued, save the X position\r\n // to start the first line of the next segment at, and reset\r\n // the y position\r\n if (options.continued === true) {\r\n if (lc > 1) {\r\n this.continuedX = 0;\r\n }\r\n this.continuedX += options.textWidth || 0;\r\n return (this.document.y = y);\r\n } else {\r\n return (this.document.x = this.startX);\r\n }\r\n }\r\n\r\n nextSection(options) {\r\n this.emit('sectionEnd', options, this);\r\n\r\n if (++this.column > this.columns) {\r\n // if a max height was specified by the user, we're done.\r\n // otherwise, the default is to make a new page at the bottom.\r\n if (this.height != null) {\r\n return false;\r\n }\r\n\r\n this.document.addPage();\r\n this.column = 1;\r\n this.startY = this.document.page.margins.top;\r\n this.maxY = this.document.page.maxY();\r\n this.document.x = this.startX;\r\n if (this.document._fillColor) {\r\n this.document.fillColor(...(this.document._fillColor || []));\r\n }\r\n this.emit('pageBreak', options, this);\r\n } else {\r\n this.document.x += this.lineWidth + this.columnGap;\r\n this.document.y = this.startY;\r\n this.emit('columnBreak', options, this);\r\n }\r\n\r\n this.emit('sectionStart', options, this);\r\n return true;\r\n }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nexport default {\r\n initText() {\r\n this._line = this._line.bind(this);\r\n // Current coordinates\r\n this.x = 0;\r\n this.y = 0;\r\n return (this._lineGap = 0);\r\n },\r\n\r\n lineGap(_lineGap) {\r\n this._lineGap = _lineGap;\r\n return this;\r\n },\r\n\r\n moveDown(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n moveUp(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n _text(text, x, y, options, lineCallback) {\r\n options = this._initOptions(x, y, options);\r\n\r\n // Convert text to a string\r\n text = text == null ? '' : `${text}`;\r\n\r\n // if the wordSpacing option is specified, remove multiple consecutive spaces\r\n if (options.wordSpacing) {\r\n text = text.replace(/\\s{2,}/g, ' ');\r\n }\r\n\r\n // word wrapping\r\n if (options.width) {\r\n let wrapper = this._wrapper;\r\n if (!wrapper) {\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', lineCallback);\r\n }\r\n\r\n this._wrapper = options.continued ? wrapper : null;\r\n this._textOptions = options.continued ? options : null;\r\n wrapper.wrap(text, options);\r\n\r\n // render paragraphs as single lines\r\n } else {\r\n for (let line of text.split('\\n')) {\r\n lineCallback(line, options);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n text(text, x, y, options) {\r\n return this._text(text, x, y, options, this._line);\r\n },\r\n\r\n widthOfString(string, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n return (\r\n this._font.widthOfString(string, this._fontSize, options.features) +\r\n (options.characterSpacing || 0) * (string.length - 1)\r\n );\r\n },\r\n\r\n heightOfString(text, options) {\r\n const { x, y } = this;\r\n\r\n options = this._initOptions(options);\r\n options.height = Infinity; // don't break pages\r\n\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n this._text(text, this.x, this.y, options, () => {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n });\r\n\r\n const height = this.y - y;\r\n this.x = x;\r\n this.y = y;\r\n\r\n return height;\r\n },\r\n\r\n list(list, x, y, options, wrapper) {\r\n options = this._initOptions(x, y, options);\r\n\r\n const listType = options.listType || 'bullet';\r\n const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\r\n const midLine = unit / 2;\r\n const r = options.bulletRadius || unit / 3;\r\n const indent =\r\n options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\r\n const itemIndent =\r\n options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\r\n\r\n let level = 1;\r\n const items = [];\r\n const levels = [];\r\n const numbers = [];\r\n\r\n var flatten = function(list) {\r\n let n = 1;\r\n for (let i = 0; i < list.length; i++) {\r\n const item = list[i];\r\n if (Array.isArray(item)) {\r\n level++;\r\n flatten(item);\r\n level--;\r\n } else {\r\n items.push(item);\r\n levels.push(level);\r\n if (listType !== 'bullet') {\r\n numbers.push(n++);\r\n }\r\n }\r\n }\r\n };\r\n\r\n flatten(list);\r\n\r\n const label = function(n) {\r\n switch (listType) {\r\n case 'numbered':\r\n return `${n}.`;\r\n case 'lettered':\r\n var letter = String.fromCharCode(((n - 1) % 26) + 65);\r\n var times = Math.floor((n - 1) / 26 + 1);\r\n var text = Array(times + 1).join(letter);\r\n return `${text}.`;\r\n }\r\n };\r\n\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', this._line);\r\n\r\n level = 1;\r\n let i = 0;\r\n wrapper.on('firstLine', () => {\r\n let l;\r\n if ((l = levels[i++]) !== level) {\r\n const diff = itemIndent * (l - level);\r\n this.x += diff;\r\n wrapper.lineWidth -= diff;\r\n level = l;\r\n }\r\n\r\n switch (listType) {\r\n case 'bullet':\r\n this.circle(this.x - indent + r, this.y + midLine, r);\r\n return this.fill();\r\n case 'numbered':\r\n case 'lettered':\r\n var text = label(numbers[i - 1]);\r\n return this._fragment(text, this.x - indent, this.y, options);\r\n }\r\n });\r\n\r\n wrapper.on('sectionStart', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x += pos;\r\n return (wrapper.lineWidth -= pos);\r\n });\r\n\r\n wrapper.on('sectionEnd', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x -= pos;\r\n return (wrapper.lineWidth += pos);\r\n });\r\n\r\n wrapper.wrap(items.join('\\n'), options);\r\n\r\n return this;\r\n },\r\n\r\n _initOptions(x, y, options) {\r\n if (x == null) {\r\n x = {};\r\n }\r\n if (options == null) {\r\n options = {};\r\n }\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n // clone options object\r\n const result = Object.assign({}, options);\r\n\r\n // extend options with previous values for continued text\r\n if (this._textOptions) {\r\n for (let key in this._textOptions) {\r\n const val = this._textOptions[key];\r\n if (key !== 'continued') {\r\n if (result[key] == null) {\r\n result[key] = val;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Update the current position\r\n if (x != null) {\r\n this.x = x;\r\n }\r\n if (y != null) {\r\n this.y = y;\r\n }\r\n\r\n // wrap to margins if no x or y position passed\r\n if (result.lineBreak !== false) {\r\n if (result.width == null) {\r\n result.width = this.page.width - this.x - this.page.margins.right;\r\n }\r\n }\r\n\r\n if (!result.columns) {\r\n result.columns = 0;\r\n }\r\n if (result.columnGap == null) {\r\n result.columnGap = 18;\r\n } // 1/4 inch\r\n\r\n return result;\r\n },\r\n\r\n _line(text, options, wrapper) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n this._fragment(text, this.x, this.y, options);\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n\r\n if (!wrapper) {\r\n return (this.x += this.widthOfString(text));\r\n } else {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n }\r\n },\r\n\r\n _fragment(text, x, y, options) {\r\n let dy, encoded, i, positions, textWidth, words;\r\n text = `${text}`.replace(/\\n/g, '');\r\n if (text.length === 0) {\r\n return;\r\n }\r\n\r\n // handle options\r\n const align = options.align || 'left';\r\n let wordSpacing = options.wordSpacing || 0;\r\n const characterSpacing = options.characterSpacing || 0;\r\n\r\n // text alignments\r\n if (options.width) {\r\n switch (align) {\r\n case 'right':\r\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\r\n x += options.lineWidth - textWidth;\r\n break;\r\n\r\n case 'center':\r\n x += options.lineWidth / 2 - options.textWidth / 2;\r\n break;\r\n\r\n case 'justify':\r\n // calculate the word spacing value\r\n words = text.trim().split(/\\s+/);\r\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\r\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\r\n wordSpacing = Math.max(\r\n 0,\r\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\r\n spaceWidth\r\n );\r\n break;\r\n }\r\n }\r\n\r\n // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\r\n if (typeof options.baseline === 'number') {\r\n dy = -options.baseline;\r\n } else {\r\n switch (options.baseline) {\r\n case 'svg-middle':\r\n dy = 0.5 * this._font.xHeight;\r\n break;\r\n case 'middle':\r\n case 'svg-central':\r\n dy = 0.5 * (this._font.descender + this._font.ascender);\r\n break;\r\n case 'bottom':\r\n case 'ideographic':\r\n dy = this._font.descender;\r\n break;\r\n case 'alphabetic':\r\n dy = 0;\r\n break;\r\n case 'mathematical':\r\n dy = 0.5 * this._font.ascender;\r\n break;\r\n case 'hanging':\r\n dy = 0.8 * this._font.ascender;\r\n break;\r\n case 'top':\r\n dy = this._font.ascender;\r\n break;\r\n default:\r\n dy = this._font.ascender;\r\n }\r\n dy = (dy / 1000) * this._fontSize;\r\n }\r\n\r\n // calculate the actual rendered width of the string after word and character spacing\r\n const renderedWidth =\r\n options.textWidth +\r\n wordSpacing * (options.wordCount - 1) +\r\n characterSpacing * (text.length - 1);\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\r\n }\r\n\r\n // create underline or strikethrough line\r\n if (options.underline || options.strike) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n const d = options.underline ? 1 : 2;\r\n let lineY = y + this.currentLineHeight() / d;\r\n if (options.underline) {\r\n lineY -= lineWidth;\r\n }\r\n\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n\r\n this.save();\r\n\r\n // oblique (angle in degrees or boolean)\r\n if (options.oblique) {\r\n let skew;\r\n if (typeof options.oblique === 'number') {\r\n skew = -Math.tan((options.oblique * Math.PI) / 180);\r\n } else {\r\n skew = -0.25;\r\n }\r\n this.transform(1, 0, 0, 1, x, y);\r\n this.transform(1, 0, skew, 1, -skew * dy, 0);\r\n this.transform(1, 0, 0, 1, -x, -y);\r\n }\r\n\r\n // flip coordinate system\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n y = this.page.height - y - dy;\r\n\r\n // add current font to page if necessary\r\n if (this.page.fonts[this._font.id] == null) {\r\n this.page.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // begin the text object\r\n this.addContent('BT');\r\n\r\n // text position\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n\r\n // font and font size\r\n this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\r\n\r\n // rendering mode\r\n const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\r\n if (mode) {\r\n this.addContent(`${mode} Tr`);\r\n }\r\n\r\n // Character spacing\r\n if (characterSpacing) {\r\n this.addContent(`${number(characterSpacing)} Tc`);\r\n }\r\n\r\n // Add the actual text\r\n // If we have a word spacing value, we need to encode each word separately\r\n // since the normal Tw operator only works on character code 32, which isn't\r\n // used for embedded fonts.\r\n if (wordSpacing) {\r\n words = text.trim().split(/\\s+/);\r\n wordSpacing += this.widthOfString(' ') + characterSpacing;\r\n wordSpacing *= 1000 / this._fontSize;\r\n\r\n encoded = [];\r\n positions = [];\r\n for (let word of words) {\r\n const [encodedWord, positionsWord] = this._font.encode(\r\n word,\r\n options.features\r\n );\r\n encoded = encoded.concat(encodedWord);\r\n positions = positions.concat(positionsWord);\r\n\r\n // add the word spacing to the end of the word\r\n // clone object because of cache\r\n const space = {};\r\n const object = positions[positions.length - 1];\r\n for (let key in object) {\r\n const val = object[key];\r\n space[key] = val;\r\n }\r\n space.xAdvance += wordSpacing;\r\n positions[positions.length - 1] = space;\r\n }\r\n } else {\r\n [encoded, positions] = this._font.encode(text, options.features);\r\n }\r\n\r\n const scale = this._fontSize / 1000;\r\n const commands = [];\r\n let last = 0;\r\n let hadOffset = false;\r\n\r\n // Adds a segment of text to the TJ command buffer\r\n const addSegment = cur => {\r\n if (last < cur) {\r\n const hex = encoded.slice(last, cur).join('');\r\n const advance =\r\n positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\r\n commands.push(`<${hex}> ${number(-advance)}`);\r\n }\r\n\r\n return (last = cur);\r\n };\r\n\r\n // Flushes the current TJ commands to the output stream\r\n const flush = i => {\r\n addSegment(i);\r\n\r\n if (commands.length > 0) {\r\n this.addContent(`[${commands.join(' ')}] TJ`);\r\n return (commands.length = 0);\r\n }\r\n };\r\n\r\n for (i = 0; i < positions.length; i++) {\r\n // If we have an x or y offset, we have to break out of the current TJ command\r\n // so we can move the text position.\r\n const pos = positions[i];\r\n if (pos.xOffset || pos.yOffset) {\r\n // Flush the current buffer\r\n flush(i);\r\n\r\n // Move the text position and flush just the current character\r\n this.addContent(\r\n `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\r\n y + pos.yOffset * scale\r\n )} Tm`\r\n );\r\n flush(i + 1);\r\n\r\n hadOffset = true;\r\n } else {\r\n // If the last character had an offset, reset the text position\r\n if (hadOffset) {\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n hadOffset = false;\r\n }\r\n\r\n // Group segments that don't have any advance adjustments\r\n if (pos.xAdvance - pos.advanceWidth !== 0) {\r\n addSegment(i + 1);\r\n }\r\n }\r\n\r\n x += pos.xAdvance * scale;\r\n }\r\n\r\n // Flush any remaining commands\r\n flush(i);\r\n\r\n // end the text object\r\n this.addContent('ET');\r\n\r\n // restore flipped coordinate system\r\n return this.restore();\r\n }\r\n};\r\n","const MARKERS = [\r\n 0xffc0,\r\n 0xffc1,\r\n 0xffc2,\r\n 0xffc3,\r\n 0xffc5,\r\n 0xffc6,\r\n 0xffc7,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffca,\r\n 0xffcb,\r\n 0xffcc,\r\n 0xffcd,\r\n 0xffce,\r\n 0xffcf\r\n];\r\n\r\nconst COLOR_SPACE_MAP = {\r\n 1: 'DeviceGray',\r\n 3: 'DeviceRGB',\r\n 4: 'DeviceCMYK'\r\n};\r\n\r\nclass JPEG {\r\n constructor(data, label) {\r\n let marker;\r\n this.data = data;\r\n this.label = label;\r\n if (this.data.readUInt16BE(0) !== 0xffd8) {\r\n throw 'SOI not found in JPEG';\r\n }\r\n\r\n let pos = 2;\r\n while (pos < this.data.length) {\r\n marker = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n if (MARKERS.includes(marker)) {\r\n break;\r\n }\r\n pos += this.data.readUInt16BE(pos);\r\n }\r\n\r\n if (!MARKERS.includes(marker)) {\r\n throw 'Invalid JPEG.';\r\n }\r\n pos += 2;\r\n\r\n this.bits = this.data[pos++];\r\n this.height = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n this.width = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n const channels = this.data[pos++];\r\n this.colorSpace = COLOR_SPACE_MAP[channels];\r\n\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n this.obj = document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: this.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n ColorSpace: this.colorSpace,\r\n Filter: 'DCTDecode'\r\n });\r\n\r\n // add extra decode params for CMYK images. By swapping the\r\n // min and max values from the default, we invert the colors. See\r\n // section 4.8.4 of the spec.\r\n if (this.colorSpace === 'DeviceCMYK') {\r\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\r\n }\r\n\r\n this.obj.end(this.data);\r\n\r\n // free memory\r\n return (this.data = null);\r\n }\r\n}\r\n\r\nexport default JPEG;\r\n","import zlib from 'zlib';\r\nimport PNG from 'png-js';\r\n\r\nclass PNGImage {\r\n constructor(data, label) {\r\n this.label = label;\r\n this.image = new PNG(data);\r\n this.width = this.image.width;\r\n this.height = this.image.height;\r\n this.imgData = this.image.imgData;\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n this.document = document;\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n const hasAlphaChannel = this.image.hasAlphaChannel;\r\n\r\n this.obj = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n Filter: 'FlateDecode'\r\n });\r\n\r\n if (!hasAlphaChannel) {\r\n const params = this.document.ref({\r\n Predictor: 15,\r\n Colors: this.image.colors,\r\n BitsPerComponent: this.image.bits,\r\n Columns: this.width\r\n });\r\n\r\n this.obj.data['DecodeParms'] = params;\r\n params.end();\r\n }\r\n\r\n if (this.image.palette.length === 0) {\r\n this.obj.data['ColorSpace'] = this.image.colorSpace;\r\n } else {\r\n // embed the color palette in the PDF as an object stream\r\n const palette = this.document.ref();\r\n palette.end(new Buffer(this.image.palette));\r\n\r\n // build the color space array for the image\r\n this.obj.data['ColorSpace'] = [\r\n 'Indexed',\r\n 'DeviceRGB',\r\n this.image.palette.length / 3 - 1,\r\n palette\r\n ];\r\n }\r\n\r\n // For PNG color types 0, 2 and 3, the transparency data is stored in\r\n // a dedicated PNG chunk.\r\n if (this.image.transparency.grayscale != null) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const val = this.image.transparency.grayscale;\r\n this.obj.data['Mask'] = [val, val];\r\n } else if (this.image.transparency.rgb) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const { rgb } = this.image.transparency;\r\n const mask = [];\r\n for (let x of rgb) {\r\n mask.push(x, x);\r\n }\r\n\r\n this.obj.data['Mask'] = mask;\r\n } else if (this.image.transparency.indexed) {\r\n // Create a transparency SMask for the image based on the data\r\n // in the PLTE and tRNS sections. See below for details on SMasks.\r\n return this.loadIndexedAlphaChannel();\r\n } else if (hasAlphaChannel) {\r\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\r\n // channel mixed in with the main image data. Separate this data out into an\r\n // SMask object and store it separately in the PDF.\r\n return this.splitAlphaChannel();\r\n }\r\n this.finalize();\r\n }\r\n\r\n finalize() {\r\n if (this.alphaChannel) {\r\n const sMask = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n Height: this.height,\r\n Width: this.width,\r\n BitsPerComponent: 8,\r\n Filter: 'FlateDecode',\r\n ColorSpace: 'DeviceGray',\r\n Decode: [0, 1]\r\n });\r\n\r\n sMask.end(this.alphaChannel);\r\n this.obj.data['SMask'] = sMask;\r\n }\r\n\r\n // add the actual image data\r\n this.obj.end(this.imgData);\r\n\r\n // free memory\r\n this.image = null;\r\n return (this.imgData = null);\r\n }\r\n\r\n splitAlphaChannel() {\r\n return this.image.decodePixels(pixels => {\r\n let a, p;\r\n const colorCount = this.image.colors;\r\n const pixelCount = this.width * this.height;\r\n const imgData = new Buffer(pixelCount * colorCount);\r\n const alphaChannel = new Buffer(pixelCount);\r\n\r\n let i = (p = a = 0);\r\n const len = pixels.length;\r\n // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\r\n const skipByteCount = this.image.bits === 16 ? 1 : 0;\r\n while (i < len) {\r\n for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\r\n imgData[p++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n alphaChannel[a++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n\r\n this.imgData = zlib.deflateSync(imgData);\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n loadIndexedAlphaChannel() {\r\n const transparency = this.image.transparency.indexed;\r\n return this.image.decodePixels(pixels => {\r\n const alphaChannel = new Buffer(this.width * this.height);\r\n\r\n let i = 0;\r\n for (let j = 0, end = pixels.length; j < end; j++) {\r\n alphaChannel[i++] = transparency[pixels[j]];\r\n }\r\n\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n}\r\n\r\nexport default PNGImage;\r\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n static open(src, label) {\r\n let data;\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = new Buffer(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:.+;base64,(.*)$/.exec(src))) {\r\n data = new Buffer(match[1], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (data[0] === 0xff && data[1] === 0xd8) {\r\n return new JPEG(data, label);\r\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n return new PNG(data, label);\r\n } else {\r\n throw new Error('Unknown image format.');\r\n }\r\n }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\r\n\r\nexport default {\r\n initImages() {\r\n this._imageRegistry = {};\r\n return (this._imageCount = 0);\r\n },\r\n\r\n image(src, x, y, options) {\r\n let bh, bp, bw, image, ip, left, left1;\r\n if (options == null) {\r\n options = {};\r\n }\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n x = (left = x != null ? x : options.x) != null ? left : this.x;\r\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\r\n\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n if (src.width && src.height) {\r\n image = src;\r\n } else {\r\n image = this.openImage(src);\r\n }\r\n }\r\n\r\n if (!image.obj) {\r\n image.embed(this);\r\n }\r\n\r\n if (this.page.xobjects[image.label] == null) {\r\n this.page.xobjects[image.label] = image.obj;\r\n }\r\n\r\n let w = options.width || image.width;\r\n let h = options.height || image.height;\r\n\r\n if (options.width && !options.height) {\r\n const wp = w / image.width;\r\n w = image.width * wp;\r\n h = image.height * wp;\r\n } else if (options.height && !options.width) {\r\n const hp = h / image.height;\r\n w = image.width * hp;\r\n h = image.height * hp;\r\n } else if (options.scale) {\r\n w = image.width * options.scale;\r\n h = image.height * options.scale;\r\n } else if (options.fit) {\r\n [bw, bh] = options.fit;\r\n bp = bw / bh;\r\n ip = image.width / image.height;\r\n if (ip > bp) {\r\n w = bw;\r\n h = bw / ip;\r\n } else {\r\n h = bh;\r\n w = bh * ip;\r\n }\r\n } else if (options.cover) {\r\n [bw, bh] = options.cover;\r\n bp = bw / bh;\r\n ip = image.width / image.height;\r\n if (ip > bp) {\r\n h = bh;\r\n w = bh * ip;\r\n } else {\r\n w = bw;\r\n h = bw / ip;\r\n }\r\n }\r\n\r\n if (options.fit || options.cover) {\r\n if (options.align === 'center') {\r\n x = x + bw / 2 - w / 2;\r\n } else if (options.align === 'right') {\r\n x = x + bw - w;\r\n }\r\n\r\n if (options.valign === 'center') {\r\n y = y + bh / 2 - h / 2;\r\n } else if (options.valign === 'bottom') {\r\n y = y + bh - h;\r\n }\r\n }\r\n\r\n // Set the current y position to below the image if it is in the document flow\r\n if (this.y === y) {\r\n this.y += h;\r\n }\r\n\r\n this.save();\r\n this.transform(w, 0, 0, -h, x, y + h);\r\n this.addContent(`/${image.label} Do`);\r\n this.restore();\r\n\r\n return this;\r\n },\r\n\r\n openImage(src) {\r\n let image;\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n image = PDFImage.open(src, `I${++this._imageCount}`);\r\n if (typeof src === 'string') {\r\n this._imageRegistry[src] = image;\r\n }\r\n }\r\n\r\n return image;\r\n }\r\n};\r\n","export default {\r\n annotate(x, y, w, h, options) {\r\n options.Type = 'Annot';\r\n options.Rect = this._convertRect(x, y, w, h);\r\n options.Border = [0, 0, 0];\r\n if (options.Subtype !== 'Link') {\r\n if (options.C == null) {\r\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\r\n }\r\n } // convert colors\r\n delete options.color;\r\n\r\n if (typeof options.Dest === 'string') {\r\n options.Dest = new String(options.Dest);\r\n }\r\n\r\n // Capitalize keys\r\n for (let key in options) {\r\n const val = options[key];\r\n options[key[0].toUpperCase() + key.slice(1)] = val;\r\n }\r\n\r\n const ref = this.ref(options);\r\n this.page.annotations.push(ref);\r\n ref.end();\r\n return this;\r\n },\r\n\r\n note(x, y, w, h, contents, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'Text';\r\n options.Contents = new String(contents);\r\n options.Name = 'Comment';\r\n if (options.color == null) {\r\n options.color = [243, 223, 92];\r\n }\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n link(x, y, w, h, url, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'Link';\r\n\r\n if (typeof url === 'number') {\r\n // Link to a page in the document (the page must already exist)\r\n const pages = this._root.data.Pages.data;\r\n if (url >= 0 && url < pages.Kids.length) {\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: [pages.Kids[url], 'XYZ', null, null, null]\r\n });\r\n options.A.end();\r\n } else {\r\n throw new Error(`The document has no page ${url}`);\r\n }\r\n } else {\r\n // Link to an external url\r\n options.A = this.ref({\r\n S: 'URI',\r\n URI: new String(url)\r\n });\r\n options.A.end();\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _markup(x, y, w, h, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\r\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n highlight(x, y, w, h, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'Highlight';\r\n if (options.color == null) {\r\n options.color = [241, 238, 148];\r\n }\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n underline(x, y, w, h, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'Underline';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n strike(x, y, w, h, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'StrikeOut';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n lineAnnotation(x1, y1, x2, y2, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'Line';\r\n options.Contents = new String();\r\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\r\n return this.annotate(x1, y1, x2, y2, options);\r\n },\r\n\r\n rectAnnotation(x, y, w, h, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'Square';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n ellipseAnnotation(x, y, w, h, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'Circle';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n textAnnotation(x, y, w, h, text, options) {\r\n if (options == null) {\r\n options = {};\r\n }\r\n options.Subtype = 'FreeText';\r\n options.Contents = new String(text);\r\n options.DA = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _convertRect(x1, y1, w, h) {\r\n // flip y1 and y2\r\n let y2 = y1;\r\n y1 += h;\r\n\r\n // make x2\r\n let x2 = x1 + w;\r\n\r\n // apply current transformation matrix to points\r\n const [m0, m1, m2, m3, m4, m5] = this._ctm;\r\n x1 = m0 * x1 + m2 * y1 + m4;\r\n y1 = m1 * x1 + m3 * y1 + m5;\r\n x2 = m0 * x2 + m2 * y2 + m4;\r\n y2 = m1 * x2 + m3 * y2 + m5;\r\n\r\n return [x1, y1, x2, y2];\r\n }\r\n};\r\n","class PDFOutline {\r\n constructor(document, parent, title, dest, options) {\r\n this.document = document;\r\n if (options == null) {\r\n options = { expanded: false };\r\n }\r\n this.options = options;\r\n this.outlineData = {};\r\n\r\n if (dest !== null) {\r\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\r\n }\r\n\r\n if (parent !== null) {\r\n this.outlineData['Parent'] = parent;\r\n }\r\n\r\n if (title !== null) {\r\n this.outlineData['Title'] = new String(title);\r\n }\r\n\r\n this.dictionary = this.document.ref(this.outlineData);\r\n this.children = [];\r\n }\r\n\r\n addItem(title, options) {\r\n if (options == null) {\r\n options = { expanded: false };\r\n }\r\n const result = new PDFOutline(\r\n this.document,\r\n this.dictionary,\r\n title,\r\n this.document.page,\r\n options\r\n );\r\n this.children.push(result);\r\n\r\n return result;\r\n }\r\n\r\n endOutline() {\r\n if (this.children.length > 0) {\r\n if (this.options.expanded) {\r\n this.outlineData.Count = this.children.length;\r\n }\r\n\r\n const first = this.children[0],\r\n last = this.children[this.children.length - 1];\r\n this.outlineData.First = first.dictionary;\r\n this.outlineData.Last = last.dictionary;\r\n\r\n for (let i = 0, len = this.children.length; i < len; i++) {\r\n const child = this.children[i];\r\n if (i > 0) {\r\n child.outlineData.Prev = this.children[i - 1].dictionary;\r\n }\r\n if (i < this.children.length - 1) {\r\n child.outlineData.Next = this.children[i + 1].dictionary;\r\n }\r\n child.endOutline();\r\n }\r\n }\r\n\r\n return this.dictionary.end();\r\n }\r\n}\r\n\r\nexport default PDFOutline;\r\n","import PDFOutline from '../outline';\r\n\r\nexport default {\r\n initOutline() {\r\n return (this.outline = new PDFOutline(this, null, null, null));\r\n },\r\n\r\n endOutline() {\r\n this.outline.endOutline();\r\n if (this.outline.children.length > 0) {\r\n this._root.data.Outlines = this.outline.dictionary;\r\n return (this._root.data.PageMode = 'UseOutlines');\r\n }\r\n }\r\n};\r\n","/*\r\nPDFDocument - represents an entire PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nimport stream from 'stream';\r\nimport fs from 'fs';\r\nimport PDFObject from './object';\r\nimport PDFReference from './reference';\r\nimport PDFPage from './page';\r\nimport PDFSecurity from './security';\r\nimport ColorMixin from './mixins/color';\r\nimport VectorMixin from './mixins/vector';\r\nimport FontsMixin from './mixins/fonts';\r\nimport TextMixin from './mixins/text';\r\nimport ImagesMixin from './mixins/images';\r\nimport AnnotationsMixin from './mixins/annotations';\r\nimport OutlineMixin from './mixins/outline';\r\n\r\nclass PDFDocument extends stream.Readable {\r\n constructor(options = {}) {\r\n super(options);\r\n this.options = options;\r\n\r\n // PDF version\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n this.version = 1.4;\r\n break;\r\n case '1.5':\r\n this.version = 1.5;\r\n break;\r\n case '1.6':\r\n this.version = 1.6;\r\n break;\r\n case '1.7':\r\n case '1.7ext3':\r\n this.version = 1.7;\r\n break;\r\n default:\r\n this.version = 1.3;\r\n break;\r\n }\r\n\r\n // Whether streams should be compressed\r\n this.compress =\r\n this.options.compress != null ? this.options.compress : true;\r\n\r\n this._pageBuffer = [];\r\n this._pageBufferStart = 0;\r\n\r\n // The PDF object store\r\n this._offsets = [];\r\n this._waiting = 0;\r\n this._ended = false;\r\n this._offset = 0;\r\n const Pages = this.ref({\r\n Type: 'Pages',\r\n Count: 0,\r\n Kids: []\r\n });\r\n\r\n Pages.finalize = function() {\r\n this.offset = this.document._offset;\r\n this.document._write(this.id + ' ' + this.gen + ' obj');\r\n this.document._write('<<');\r\n this.document._write('/Type /Pages');\r\n this.document._write(`/Count ${this.data.Count}`);\r\n this.document._write(\r\n `/Kids [${Buffer.concat(this.data.Kids)\r\n .slice(0, -1)\r\n .toString()}]`\r\n );\r\n this.document._write('>>');\r\n this.document._write('endobj');\r\n return this.document._refEnd(this);\r\n };\r\n\r\n this._root = this.ref({\r\n Type: 'Catalog',\r\n Pages\r\n });\r\n\r\n // The current page\r\n this.page = null;\r\n\r\n // Initialize mixins\r\n this.initColor();\r\n this.initVector();\r\n this.initFonts(options.font);\r\n this.initText();\r\n this.initImages();\r\n this.initOutline();\r\n\r\n // Initialize the metadata\r\n this.info = {\r\n Producer: 'PDFKit',\r\n Creator: 'PDFKit',\r\n CreationDate: new Date()\r\n };\r\n\r\n if (this.options.info) {\r\n for (let key in this.options.info) {\r\n const val = this.options.info[key];\r\n this.info[key] = val;\r\n }\r\n }\r\n\r\n // Generate file ID\r\n this._id = PDFSecurity.generateFileID(this.info);\r\n\r\n // Initialize security settings\r\n this._security = PDFSecurity.create(this, options);\r\n\r\n // Write the header\r\n // PDF version\r\n this._write(`%PDF-${this.version}`);\r\n\r\n // 4 binary chars, as recommended by the spec\r\n this._write('%\\xFF\\xFF\\xFF\\xFF');\r\n\r\n // Add the first page\r\n if (this.options.autoFirstPage !== false) {\r\n this.addPage();\r\n }\r\n }\r\n\r\n addPage(options) {\r\n // end the current page if needed\r\n if (options == null) {\r\n ({ options } = this);\r\n }\r\n if (!this.options.bufferPages) {\r\n this.flushPages();\r\n }\r\n\r\n // create a page object\r\n this.page = new PDFPage(this, options);\r\n this._pageBuffer.push(this.page);\r\n\r\n // add the page to the object store\r\n const pages = this._root.data.Pages.data;\r\n pages.Kids.push(new Buffer(this.page.dictionary + ' '));\r\n pages.Count++;\r\n\r\n // reset x and y coordinates\r\n this.x = this.page.margins.left;\r\n this.y = this.page.margins.top;\r\n\r\n // flip PDF coordinate system so that the origin is in\r\n // the top left rather than the bottom left\r\n this._ctm = [1, 0, 0, 1, 0, 0];\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n\r\n this.emit('pageAdded');\r\n\r\n return this;\r\n }\r\n\r\n bufferedPageRange() {\r\n return { start: this._pageBufferStart, count: this._pageBuffer.length };\r\n }\r\n\r\n switchToPage(n) {\r\n let page;\r\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\r\n throw new Error(\r\n `switchToPage(${n}) out of bounds, current buffer covers pages ${\r\n this._pageBufferStart\r\n } to ${this._pageBufferStart + this._pageBuffer.length - 1}`\r\n );\r\n }\r\n\r\n return (this.page = page);\r\n }\r\n\r\n flushPages() {\r\n // this local variable exists so we're future-proof against\r\n // reentrant calls to flushPages.\r\n const pages = this._pageBuffer;\r\n this._pageBuffer = [];\r\n this._pageBufferStart += pages.length;\r\n for (let page of pages) {\r\n page.end();\r\n }\r\n }\r\n\r\n ref(data) {\r\n const ref = new PDFReference(this, this._offsets.length + 1, data);\r\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\r\n this._waiting++;\r\n return ref;\r\n }\r\n\r\n _read() {}\r\n // do nothing, but this method is required by node\r\n\r\n _write(data) {\r\n if (!Buffer.isBuffer(data)) {\r\n data = new Buffer(data + '\\n', 'binary');\r\n }\r\n\r\n this.push(data);\r\n return (this._offset += data.length);\r\n }\r\n\r\n addContent(data) {\r\n this.page.write(data);\r\n return this;\r\n }\r\n\r\n _refEnd(ref) {\r\n this._offsets[ref.id - 1] = ref.offset;\r\n if (--this._waiting === 0 && this._ended) {\r\n this._finalize();\r\n return (this._ended = false);\r\n }\r\n }\r\n\r\n write(filename, fn) {\r\n // print a deprecation warning with a stacktrace\r\n const err = new Error(`\\\r\nPDFDocument#write is deprecated, and will be removed in a future version of PDFKit. \\\r\nPlease pipe the document into a Node stream.\\\r\n`);\r\n\r\n console.warn(err.stack);\r\n\r\n this.pipe(fs.createWriteStream(filename));\r\n this.end();\r\n return this.once('end', fn);\r\n }\r\n\r\n output(fn) {\r\n // more difficult to support this. It would involve concatenating all the buffers together\r\n throw new Error(`\\\r\nPDFDocument#output is deprecated, and has been removed from PDFKit. \\\r\nPlease pipe the document into a Node stream.\\\r\n`);\r\n }\r\n\r\n end() {\r\n this.flushPages();\r\n this._info = this.ref();\r\n for (let key in this.info) {\r\n let val = this.info[key];\r\n if (typeof val === 'string') {\r\n val = new String(val);\r\n }\r\n\r\n let entry = this.ref(val);\r\n entry.end();\r\n\r\n this._info.data[key] = entry;\r\n }\r\n\r\n this._info.end();\r\n\r\n for (let name in this._fontFamilies) {\r\n const font = this._fontFamilies[name];\r\n font.finalize();\r\n }\r\n\r\n this.endOutline();\r\n\r\n this._root.end();\r\n this._root.data.Pages.end();\r\n\r\n if (this._security) {\r\n this._security.end();\r\n }\r\n\r\n if (this._waiting === 0) {\r\n return this._finalize();\r\n } else {\r\n return (this._ended = true);\r\n }\r\n }\r\n\r\n _finalize(fn) {\r\n // generate xref\r\n const xRefOffset = this._offset;\r\n this._write('xref');\r\n this._write(`0 ${this._offsets.length + 1}`);\r\n this._write('0000000000 65535 f ');\r\n\r\n for (let offset of this._offsets) {\r\n offset = `0000000000${offset}`.slice(-10);\r\n this._write(offset + ' 00000 n ');\r\n }\r\n\r\n // trailer\r\n const trailer = {\r\n Size: this._offsets.length + 1,\r\n Root: this._root,\r\n Info: this._info,\r\n ID: [this._id, this._id]\r\n };\r\n if (this._security) {\r\n trailer.Encrypt = this._security.dictionary;\r\n }\r\n\r\n this._write('trailer');\r\n this._write(PDFObject.convert(trailer));\r\n\r\n this._write('startxref');\r\n this._write(`${xRefOffset}`);\r\n this._write('%%EOF');\r\n\r\n // end the stream\r\n return this.push(null);\r\n }\r\n\r\n toString() {\r\n return '[object PDFDocument]';\r\n }\r\n}\r\n\r\nconst mixin = methods => {\r\n Object.assign(PDFDocument.prototype, methods);\r\n};\r\n\r\nmixin(ColorMixin);\r\nmixin(VectorMixin);\r\nmixin(FontsMixin);\r\nmixin(TextMixin);\r\nmixin(ImagesMixin);\r\nmixin(AnnotationsMixin);\r\nmixin(OutlineMixin);\r\n\r\nexport default PDFDocument;\r\n"],"names":["PDFAbstractReference","Error","pad","str","length","Array","join","slice","escapableRe","escapable","swapBytes","buff","l","i","end","a","PDFObject","convert","object","encryptFn","String","string","isUnicode","charCodeAt","stringBuffer","Buffer","from","valueOf","toString","replace","c","isBuffer","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isArray","items","map","e","call","out","key","val","push","number","n","Math","round","PDFReference","document","id","data","gen","compress","Filter","uncompressedLength","buffer","chunk","Length","write","finalize","offset","_offset","_security","getEncryptFn","concat","zlib","deflateSync","_write","_refEnd","DEFAULT_MARGINS","SIZES","PDFPage","options","size","layout","margin","margins","dimensions","toUpperCase","width","height","content","ref","resources","dictionary","_root","Pages","fonts","Font","xobjects","XObject","ext_gstates","ExtGState","patterns","Pattern","annotations","Annots","bottom","PDFSecurity","generateFileID","info","infoStr","CreationDate","getTime","hasOwnProperty","wordArrayToBuffer","CryptoJS","MD5","generateRandomWordArray","bytes","lib","WordArray","random","create","ownerPassword","userPassword","_setupEncryption","pdfVersion","version","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","v","r","permissions","keyBits","getPermissionsR2","getPermissionsR3","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","getOwnerPasswordR2R3R4","encryptionKey","getEncryptionKeyR2R3R4","_id","userPasswordEntry","getUserPasswordR2","getUserPasswordR3R4","V","CF","StmF","StrF","R","O","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","getUserPasswordR5","userKeySalt","words","userEncryptionKeyEntry","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerKeySalt","ownerEncryptionKeyEntry","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","obj","digest","clone","sigBytes","min","RC4","encrypt","ciphertext","iv","mode","CBC","Pkcs7","AES","permissionObject","printing","modifying","copying","annotating","fillingForms","contentAccessibility","documentAssembly","documentId","cipher","xorRound","ceil","j","lsbFirstWord","validationSalt","keySalt","SHA256","NoPadding","ECB","password","index","code","PASSWORD_PADDING","unescape","encodeURIComponent","saslprep","wordArray","byteArray","floor","PDFGradient","doc","stops","embedded","transform","pos","color","opacity","_normalizeColor","_colorSpace","max","m11","m12","m21","m22","dx","dy","m","fn","matrix","last","bounds","encode","stopsLength","_gradCount","shader","pattern","some","stop","grad","opacityGradient","embed","pageBBox","page","form","gstate","opacityPattern","op","m0","m1","m2","m3","m4","m5","_ctm","addContent","PDFLinearGradient","x1","y1","x2","y2","PDFRadialGradient","r1","r2","Gradient","_opacityRegistry","_opacityCount","charAt","hex","parseInt","namedColors","part","stroke","_setColorSpace","apply","space","set","_setColor","fillOpacity","_fillColor","strokeOpacity","_doOpacity","name","Type","ca","CA","cx","cy","px","py","sx","sy","parameters","parse","path","cmd","ret","args","curArg","foundDecimal","params","includes","commands","runners","moveTo","bezierCurveTo","quadraticCurveTo","lineTo","closePath","solveArc","x","y","coords","rx","ry","rot","large","sweep","ex","ey","segs","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","th","PI","sin_th","sin","cos_th","cos","abs","pl","sqrt","a00","a01","a10","a11","x0","y0","d","sfactor_sq","sfactor","xc","yc","th0","atan2","th1","th_arc","segments","result","th2","th3","th_half","t","x3","y3","SVGPath","KAPPA","_ctmStack","pop","w","_CAP_STYLES","_JOIN_STYLES","phase","cp1x","cp1y","cp2x","cp2y","cpx","cpy","h","xe","ye","xm","ym","radius","ellipse","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","dir","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","points","shift","point","rule","test","fillColor","_windingRule","strokeColor","isFillRule","values","angle","rad","origin","xFactor","yFactor","WIN_ANSI_MAP","characters","split","AFMFont","open","filename","fs","readFileSync","contents","attributes","glyphWidths","boundingBoxes","kernPairs","charWidths","char","bbox","ascender","descender","xHeight","capHeight","lineGap","section","line","match","value","text","res","len","glyphs","charCode","characterToGlyph","character","glyph","left","right","advances","widthOfGlyph","getKernPair","PDFFont","includeGap","gap","STANDARD_FONTS","__dirname","StandardFont","font","encoded","encodeText","glyphsForString","advancesForGlyphs","positions","advance","scale","isStandardFont","toHex","num","EmbeddedFont","subset","createSubset","unicode","widths","getGlyph","advanceWidth","postscriptName","unitsPerEm","ascent","descent","fontLayoutCache","layoutCache","Object","features","run","position","layoutRun","cached","onlyWidth","needle","layoutCached","gid","includeGlyph","codePoints","isCFF","cff","fontFile","Subtype","encodeStream","on","familyClass","sFamilyClass","undefined","flags","post","isFixedPitch","head","macStyle","italic","tag","fromCharCode","descriptor","minX","minY","maxX","maxY","italicAngle","FontFile3","FontFile2","descendantFont","toUnicodeCmap","cmap","entries","PDFFontFactory","src","family","fontkit","Uint8Array","ArrayBuffer","defaultFont","_fontFamilies","_fontCount","_fontSize","_font","_registeredFonts","cacheKey","fontSize","lineHeight","LineWrapper","EventEmitter","indent","characterSpacing","wordSpacing","columns","columnGap","lineWidth","spaceLeft","startX","startY","column","ellipsis","continuedX","once","continued","align","lastLine","paragraphGap","word","widthOfString","bk","breaker","LineBreaker","wordWidths","nextBreak","shouldContinue","wordWidth","lbk","fbk","mightGrow","mustShrink","required","nextY","currentLineHeight","nextSection","textWidth","wc","lc","emitLine","wordCount","emit","eachWord","lh","addPage","top","_line","bind","_lineGap","lines","lineCallback","_initOptions","wrapper","_wrapper","_textOptions","wrap","_text","Infinity","list","listType","unit","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","flatten","item","label","letter","times","diff","circle","fill","_fragment","assign","lineBreak","trim","spaceWidth","baseline","renderedWidth","link","underline","strike","save","lineY","restore","oblique","skew","tan","encodedWord","positionsWord","xAdvance","hadOffset","addSegment","cur","flush","xOffset","yOffset","MARKERS","COLOR_SPACE_MAP","JPEG","marker","readUInt16BE","bits","channels","colorSpace","PNGImage","image","PNG","imgData","hasAlphaChannel","colors","palette","transparency","grayscale","rgb","mask","indexed","loadIndexedAlphaChannel","splitAlphaChannel","alphaChannel","sMask","decodePixels","pixels","p","colorCount","pixelCount","skipByteCount","colorIndex","PDFImage","exec","_imageRegistry","_imageCount","bh","bp","bw","ip","left1","openImage","wp","hp","fit","cover","valign","Rect","_convertRect","Border","C","Dest","Contents","Name","annotate","url","pages","Kids","A","QuadPoints","_markup","L","DA","PDFOutline","parent","title","dest","expanded","outlineData","children","Count","first","First","Last","child","Prev","Next","endOutline","outline","Outlines","PageMode","PDFDocument","stream","Readable","_pageBuffer","_pageBufferStart","_offsets","_waiting","_ended","initColor","initVector","initFonts","initText","initImages","initOutline","autoFirstPage","bufferPages","flushPages","start","count","_finalize","err","warn","stack","pipe","createWriteStream","_info","entry","xRefOffset","trailer","Encrypt","mixin","methods","prototype","ColorMixin","VectorMixin","FontsMixin","TextMixin","ImagesMixin","AnnotationsMixin","OutlineMixin"],"mappings":"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"}
1
+ {"version":3,"file":"pdfkit.js","sources":["../lib/abstract_reference.js","../lib/name_tree.js","../lib/object.js","../lib/reference.js","../lib/page.js","../lib/saslprep/lib/util.js","../lib/saslprep/lib/code-points.js","../lib/saslprep/index.js","../lib/security.js","../lib/gradient.js","../lib/mixins/color.js","../lib/path.js","../lib/mixins/vector.js","../lib/font/afm.js","../lib/font.js","../lib/font/standard.js","../lib/font/embedded.js","../lib/font_factory.js","../lib/mixins/fonts.js","../lib/line_wrapper.js","../lib/mixins/text.js","../lib/image/jpeg.js","../lib/image/png.js","../lib/image.js","../lib/mixins/images.js","../lib/mixins/annotations.js","../lib/outline.js","../lib/mixins/outline.js","../lib/document.js"],"sourcesContent":["/*\r\nPDFAbstractReference - abstract class for PDF reference\r\n*/\r\n\r\nclass PDFAbstractReference {\r\n toString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFAbstractReference;\r\n","/*\r\nPDFNameTree - represents a name tree object\r\n*/\r\n\r\nimport PDFObject from './object';\r\n\r\nclass PDFNameTree {\r\n\r\n constructor() {\r\n this._items = {};\r\n }\r\n\r\n add(key, val) {\r\n return this._items[key] = val;\r\n }\r\n\r\n get(key) {\r\n return this._items[key];\r\n }\r\n\r\n toString() {\r\n // Needs to be sorted by key\r\n const sortedKeys = (Object.keys(this._items)).sort((a, b) => a.localeCompare(b));\r\n\r\n const out = ['<<'];\r\n if (sortedKeys.length > 1) {\r\n const first = sortedKeys[0], last = sortedKeys[sortedKeys.length - 1];\r\n out.push(` /Limits ${PDFObject.convert([new String(first), new String(last)])}`);\r\n }\r\n out.push(' /Names [');\r\n for (let key of sortedKeys) {\r\n out.push(` ${PDFObject.convert(new String(key))} ${PDFObject.convert(this._items[key])}`);\r\n }\r\n out.push(']');\r\n out.push('>>');\r\n return out.join('\\n');\r\n }\r\n}\r\n\r\nexport default PDFNameTree;","/*\r\nPDFObject - converts JavaScript types into their corresponding PDF types.\r\nBy Devon Govett\r\n*/\r\n\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFNameTree from './name_tree';\r\n\r\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\r\n\r\nconst escapableRe = /[\\n\\r\\t\\b\\f\\(\\)\\\\]/g;\r\nconst escapable = {\r\n '\\n': '\\\\n',\r\n '\\r': '\\\\r',\r\n '\\t': '\\\\t',\r\n '\\b': '\\\\b',\r\n '\\f': '\\\\f',\r\n '\\\\': '\\\\\\\\',\r\n '(': '\\\\(',\r\n ')': '\\\\)'\r\n};\r\n\r\n// Convert little endian UTF-16 to big endian\r\nconst swapBytes = function(buff) {\r\n const l = buff.length;\r\n if (l & 0x01) {\r\n throw new Error('Buffer length must be even');\r\n } else {\r\n for (let i = 0, end = l - 1; i < end; i += 2) {\r\n const a = buff[i];\r\n buff[i] = buff[i + 1];\r\n buff[i + 1] = a;\r\n }\r\n }\r\n\r\n return buff;\r\n};\r\n\r\nclass PDFObject {\r\n static convert(object, encryptFn = null) {\r\n // String literals are converted to the PDF name type\r\n if (typeof object === 'string') {\r\n return `/${object}`;\r\n\r\n // String objects are converted to PDF strings (UTF-16)\r\n } else if (object instanceof String) {\r\n let string = object;\r\n // Detect if this is a unicode string\r\n let isUnicode = false;\r\n for (let i = 0, end = string.length; i < end; i++) {\r\n if (string.charCodeAt(i) > 0x7f) {\r\n isUnicode = true;\r\n break;\r\n }\r\n }\r\n\r\n // If so, encode it as big endian UTF-16\r\n let stringBuffer;\r\n if (isUnicode) {\r\n stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\r\n } else {\r\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\r\n }\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(stringBuffer).toString('binary');\r\n } else {\r\n string = stringBuffer.toString('binary');\r\n }\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n\r\n return `(${string})`;\r\n\r\n // Buffers are converted to PDF hex strings\r\n } else if (Buffer.isBuffer(object)) {\r\n return `<${object.toString('hex')}>`;\r\n } else if (object instanceof PDFAbstractReference || object instanceof PDFNameTree) {\r\n return object.toString();\r\n } else if (object instanceof Date) {\r\n let string =\r\n `D:${pad(object.getUTCFullYear(), 4)}` +\r\n pad(object.getUTCMonth() + 1, 2) +\r\n pad(object.getUTCDate(), 2) +\r\n pad(object.getUTCHours(), 2) +\r\n pad(object.getUTCMinutes(), 2) +\r\n pad(object.getUTCSeconds(), 2) +\r\n 'Z';\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(new Buffer(string, 'ascii')).toString('binary');\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n }\r\n\r\n return `(${string})`;\r\n } else if (Array.isArray(object)) {\r\n const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' ');\r\n return `[${items}]`;\r\n } else if ({}.toString.call(object) === '[object Object]') {\r\n const out = ['<<'];\r\n for (let key in object) {\r\n const val = object[key];\r\n out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\r\n }\r\n\r\n out.push('>>');\r\n return out.join('\\n');\r\n } else if (typeof object === 'number') {\r\n return PDFObject.number(object);\r\n } else {\r\n return `${object}`;\r\n }\r\n }\r\n\r\n static number(n) {\r\n if (n > -1e21 && n < 1e21) {\r\n return Math.round(n * 1e6) / 1e6;\r\n }\r\n\r\n throw new Error(`unsupported number: ${n}`);\r\n }\r\n}\r\n\r\nexport default PDFObject;\r\n","/*\r\nPDFReference - represents a reference to another object in the PDF object heirarchy\r\nBy Devon Govett\r\n*/\r\n\r\nimport zlib from 'zlib';\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFObject from './object';\r\n\r\nclass PDFReference extends PDFAbstractReference {\r\n constructor(document, id, data = {}) {\r\n super();\r\n this.document = document;\r\n this.id = id;\r\n this.data = data;\r\n this.gen = 0;\r\n this.compress = this.document.compress && !this.data.Filter;\r\n this.uncompressedLength = 0;\r\n this.buffer = [];\r\n }\r\n\r\n write(chunk) {\r\n if (!Buffer.isBuffer(chunk)) {\r\n chunk = new Buffer(chunk + '\\n', 'binary');\r\n }\r\n\r\n this.uncompressedLength += chunk.length;\r\n if (this.data.Length == null) {\r\n this.data.Length = 0;\r\n }\r\n this.buffer.push(chunk);\r\n this.data.Length += chunk.length;\r\n if (this.compress) {\r\n return (this.data.Filter = 'FlateDecode');\r\n }\r\n }\r\n\r\n end(chunk) {\r\n if (chunk) {\r\n this.write(chunk);\r\n }\r\n return this.finalize();\r\n }\r\n\r\n finalize() {\r\n this.offset = this.document._offset;\r\n\r\n const encryptFn = this.document._security\r\n ? this.document._security.getEncryptFn(this.id, this.gen)\r\n : null;\r\n\r\n if (this.buffer.length) {\r\n this.buffer = Buffer.concat(this.buffer);\r\n if (this.compress) {\r\n this.buffer = zlib.deflateSync(this.buffer);\r\n }\r\n\r\n if (encryptFn) {\r\n this.buffer = encryptFn(this.buffer);\r\n }\r\n\r\n this.data.Length = this.buffer.length;\r\n }\r\n\r\n this.document._write(`${this.id} ${this.gen} obj`);\r\n this.document._write(PDFObject.convert(this.data, encryptFn));\r\n\r\n if (this.buffer.length) {\r\n this.document._write('stream');\r\n this.document._write(this.buffer);\r\n\r\n this.buffer = []; // free up memory\r\n this.document._write('\\nendstream');\r\n }\r\n\r\n this.document._write('endobj');\r\n this.document._refEnd(this);\r\n }\r\n toString() {\r\n return `${this.id} ${this.gen} R`;\r\n }\r\n}\r\n\r\nexport default PDFReference;\r\n","/*\r\nPDFPage - represents a single page in the PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nconst DEFAULT_MARGINS = {\r\n top: 72,\r\n left: 72,\r\n bottom: 72,\r\n right: 72\r\n};\r\n\r\nconst SIZES = {\r\n '4A0': [4767.87, 6740.79],\r\n '2A0': [3370.39, 4767.87],\r\n A0: [2383.94, 3370.39],\r\n A1: [1683.78, 2383.94],\r\n A2: [1190.55, 1683.78],\r\n A3: [841.89, 1190.55],\r\n A4: [595.28, 841.89],\r\n A5: [419.53, 595.28],\r\n A6: [297.64, 419.53],\r\n A7: [209.76, 297.64],\r\n A8: [147.4, 209.76],\r\n A9: [104.88, 147.4],\r\n A10: [73.7, 104.88],\r\n B0: [2834.65, 4008.19],\r\n B1: [2004.09, 2834.65],\r\n B2: [1417.32, 2004.09],\r\n B3: [1000.63, 1417.32],\r\n B4: [708.66, 1000.63],\r\n B5: [498.9, 708.66],\r\n B6: [354.33, 498.9],\r\n B7: [249.45, 354.33],\r\n B8: [175.75, 249.45],\r\n B9: [124.72, 175.75],\r\n B10: [87.87, 124.72],\r\n C0: [2599.37, 3676.54],\r\n C1: [1836.85, 2599.37],\r\n C2: [1298.27, 1836.85],\r\n C3: [918.43, 1298.27],\r\n C4: [649.13, 918.43],\r\n C5: [459.21, 649.13],\r\n C6: [323.15, 459.21],\r\n C7: [229.61, 323.15],\r\n C8: [161.57, 229.61],\r\n C9: [113.39, 161.57],\r\n C10: [79.37, 113.39],\r\n RA0: [2437.8, 3458.27],\r\n RA1: [1729.13, 2437.8],\r\n RA2: [1218.9, 1729.13],\r\n RA3: [864.57, 1218.9],\r\n RA4: [609.45, 864.57],\r\n SRA0: [2551.18, 3628.35],\r\n SRA1: [1814.17, 2551.18],\r\n SRA2: [1275.59, 1814.17],\r\n SRA3: [907.09, 1275.59],\r\n SRA4: [637.8, 907.09],\r\n EXECUTIVE: [521.86, 756.0],\r\n FOLIO: [612.0, 936.0],\r\n LEGAL: [612.0, 1008.0],\r\n LETTER: [612.0, 792.0],\r\n TABLOID: [792.0, 1224.0]\r\n};\r\n\r\nclass PDFPage {\r\n constructor(document, options = {}) {\r\n this.document = document;\r\n this.size = options.size || 'letter';\r\n this.layout = options.layout || 'portrait';\r\n\r\n // process margins\r\n if (typeof options.margin === 'number') {\r\n this.margins = {\r\n top: options.margin,\r\n left: options.margin,\r\n bottom: options.margin,\r\n right: options.margin\r\n };\r\n\r\n // default to 1 inch margins\r\n } else {\r\n this.margins = options.margins || DEFAULT_MARGINS;\r\n }\r\n\r\n // calculate page dimensions\r\n const dimensions = Array.isArray(this.size)\r\n ? this.size\r\n : SIZES[this.size.toUpperCase()];\r\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\r\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\r\n\r\n this.content = this.document.ref();\r\n\r\n // Initialize the Font, XObject, and ExtGState dictionaries\r\n this.resources = this.document.ref({\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\r\n });\r\n\r\n // The page dictionary\r\n this.dictionary = this.document.ref({\r\n Type: 'Page',\r\n Parent: this.document._root.data.Pages,\r\n MediaBox: [0, 0, this.width, this.height],\r\n Contents: this.content,\r\n Resources: this.resources\r\n });\r\n }\r\n\r\n // Lazily create these dictionaries\r\n get fonts() {\r\n const data = this.resources.data;\r\n return data.Font != null ? data.Font : (data.Font = {});\r\n }\r\n\r\n get xobjects() {\r\n const data = this.resources.data;\r\n return data.XObject != null ? data.XObject : (data.XObject = {});\r\n }\r\n\r\n get ext_gstates() {\r\n const data = this.resources.data;\r\n return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\r\n }\r\n\r\n get patterns() {\r\n const data = this.resources.data;\r\n return data.Pattern != null ? data.Pattern : (data.Pattern = {});\r\n }\r\n\r\n get annotations() {\r\n const data = this.dictionary.data;\r\n return data.Annots != null ? data.Annots : (data.Annots = []);\r\n }\r\n\r\n maxY() {\r\n return this.height - this.margins.bottom;\r\n }\r\n\r\n write(chunk) {\r\n return this.content.write(chunk);\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n this.resources.end();\r\n return this.content.end();\r\n }\r\n}\r\n\r\nexport default PDFPage;\r\n","/**\r\n * Check if value is in a range group.\r\n * @param {number} value\r\n * @param {number[]} rangeGroup\r\n * @returns {boolean}\r\n */\r\nfunction inRange(value, rangeGroup) {\r\n if (value < rangeGroup[0]) return false;\r\n let startRange = 0;\r\n let endRange = rangeGroup.length / 2;\r\n while (startRange <= endRange) {\r\n const middleRange = Math.floor((startRange + endRange) / 2);\r\n\r\n // actual array index\r\n const arrayIndex = middleRange * 2;\r\n\r\n // Check if value is in range pointed by actual index\r\n if (\r\n value >= rangeGroup[arrayIndex] &&\r\n value <= rangeGroup[arrayIndex + 1]\r\n ) {\r\n return true;\r\n }\r\n\r\n if (value > rangeGroup[arrayIndex + 1]) {\r\n // Search Right Side Of Array\r\n startRange = middleRange + 1;\r\n } else {\r\n // Search Left Side Of Array\r\n endRange = middleRange - 1;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport { inRange };\r\n","import { inRange } from './util';\r\n\r\n/* eslint-disable prettier/prettier */\r\n/**\r\n * A.1 Unassigned code points in Unicode 3.2\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\r\n */\r\nconst unassigned_code_points = [\r\n 0x0221,\r\n 0x0221,\r\n 0x0234,\r\n 0x024f,\r\n 0x02ae,\r\n 0x02af,\r\n 0x02ef,\r\n 0x02ff,\r\n 0x0350,\r\n 0x035f,\r\n 0x0370,\r\n 0x0373,\r\n 0x0376,\r\n 0x0379,\r\n 0x037b,\r\n 0x037d,\r\n 0x037f,\r\n 0x0383,\r\n 0x038b,\r\n 0x038b,\r\n 0x038d,\r\n 0x038d,\r\n 0x03a2,\r\n 0x03a2,\r\n 0x03cf,\r\n 0x03cf,\r\n 0x03f7,\r\n 0x03ff,\r\n 0x0487,\r\n 0x0487,\r\n 0x04cf,\r\n 0x04cf,\r\n 0x04f6,\r\n 0x04f7,\r\n 0x04fa,\r\n 0x04ff,\r\n 0x0510,\r\n 0x0530,\r\n 0x0557,\r\n 0x0558,\r\n 0x0560,\r\n 0x0560,\r\n 0x0588,\r\n 0x0588,\r\n 0x058b,\r\n 0x0590,\r\n 0x05a2,\r\n 0x05a2,\r\n 0x05ba,\r\n 0x05ba,\r\n 0x05c5,\r\n 0x05cf,\r\n 0x05eb,\r\n 0x05ef,\r\n 0x05f5,\r\n 0x060b,\r\n 0x060d,\r\n 0x061a,\r\n 0x061c,\r\n 0x061e,\r\n 0x0620,\r\n 0x0620,\r\n 0x063b,\r\n 0x063f,\r\n 0x0656,\r\n 0x065f,\r\n 0x06ee,\r\n 0x06ef,\r\n 0x06ff,\r\n 0x06ff,\r\n 0x070e,\r\n 0x070e,\r\n 0x072d,\r\n 0x072f,\r\n 0x074b,\r\n 0x077f,\r\n 0x07b2,\r\n 0x0900,\r\n 0x0904,\r\n 0x0904,\r\n 0x093a,\r\n 0x093b,\r\n 0x094e,\r\n 0x094f,\r\n 0x0955,\r\n 0x0957,\r\n 0x0971,\r\n 0x0980,\r\n 0x0984,\r\n 0x0984,\r\n 0x098d,\r\n 0x098e,\r\n 0x0991,\r\n 0x0992,\r\n 0x09a9,\r\n 0x09a9,\r\n 0x09b1,\r\n 0x09b1,\r\n 0x09b3,\r\n 0x09b5,\r\n 0x09ba,\r\n 0x09bb,\r\n 0x09bd,\r\n 0x09bd,\r\n 0x09c5,\r\n 0x09c6,\r\n 0x09c9,\r\n 0x09ca,\r\n 0x09ce,\r\n 0x09d6,\r\n 0x09d8,\r\n 0x09db,\r\n 0x09de,\r\n 0x09de,\r\n 0x09e4,\r\n 0x09e5,\r\n 0x09fb,\r\n 0x0a01,\r\n 0x0a03,\r\n 0x0a04,\r\n 0x0a0b,\r\n 0x0a0e,\r\n 0x0a11,\r\n 0x0a12,\r\n 0x0a29,\r\n 0x0a29,\r\n 0x0a31,\r\n 0x0a31,\r\n 0x0a34,\r\n 0x0a34,\r\n 0x0a37,\r\n 0x0a37,\r\n 0x0a3a,\r\n 0x0a3b,\r\n 0x0a3d,\r\n 0x0a3d,\r\n 0x0a43,\r\n 0x0a46,\r\n 0x0a49,\r\n 0x0a4a,\r\n 0x0a4e,\r\n 0x0a58,\r\n 0x0a5d,\r\n 0x0a5d,\r\n 0x0a5f,\r\n 0x0a65,\r\n 0x0a75,\r\n 0x0a80,\r\n 0x0a84,\r\n 0x0a84,\r\n 0x0a8c,\r\n 0x0a8c,\r\n 0x0a8e,\r\n 0x0a8e,\r\n 0x0a92,\r\n 0x0a92,\r\n 0x0aa9,\r\n 0x0aa9,\r\n 0x0ab1,\r\n 0x0ab1,\r\n 0x0ab4,\r\n 0x0ab4,\r\n 0x0aba,\r\n 0x0abb,\r\n 0x0ac6,\r\n 0x0ac6,\r\n 0x0aca,\r\n 0x0aca,\r\n 0x0ace,\r\n 0x0acf,\r\n 0x0ad1,\r\n 0x0adf,\r\n 0x0ae1,\r\n 0x0ae5,\r\n 0x0af0,\r\n 0x0b00,\r\n 0x0b04,\r\n 0x0b04,\r\n 0x0b0d,\r\n 0x0b0e,\r\n 0x0b11,\r\n 0x0b12,\r\n 0x0b29,\r\n 0x0b29,\r\n 0x0b31,\r\n 0x0b31,\r\n 0x0b34,\r\n 0x0b35,\r\n 0x0b3a,\r\n 0x0b3b,\r\n 0x0b44,\r\n 0x0b46,\r\n 0x0b49,\r\n 0x0b4a,\r\n 0x0b4e,\r\n 0x0b55,\r\n 0x0b58,\r\n 0x0b5b,\r\n 0x0b5e,\r\n 0x0b5e,\r\n 0x0b62,\r\n 0x0b65,\r\n 0x0b71,\r\n 0x0b81,\r\n 0x0b84,\r\n 0x0b84,\r\n 0x0b8b,\r\n 0x0b8d,\r\n 0x0b91,\r\n 0x0b91,\r\n 0x0b96,\r\n 0x0b98,\r\n 0x0b9b,\r\n 0x0b9b,\r\n 0x0b9d,\r\n 0x0b9d,\r\n 0x0ba0,\r\n 0x0ba2,\r\n 0x0ba5,\r\n 0x0ba7,\r\n 0x0bab,\r\n 0x0bad,\r\n 0x0bb6,\r\n 0x0bb6,\r\n 0x0bba,\r\n 0x0bbd,\r\n 0x0bc3,\r\n 0x0bc5,\r\n 0x0bc9,\r\n 0x0bc9,\r\n 0x0bce,\r\n 0x0bd6,\r\n 0x0bd8,\r\n 0x0be6,\r\n 0x0bf3,\r\n 0x0c00,\r\n 0x0c04,\r\n 0x0c04,\r\n 0x0c0d,\r\n 0x0c0d,\r\n 0x0c11,\r\n 0x0c11,\r\n 0x0c29,\r\n 0x0c29,\r\n 0x0c34,\r\n 0x0c34,\r\n 0x0c3a,\r\n 0x0c3d,\r\n 0x0c45,\r\n 0x0c45,\r\n 0x0c49,\r\n 0x0c49,\r\n 0x0c4e,\r\n 0x0c54,\r\n 0x0c57,\r\n 0x0c5f,\r\n 0x0c62,\r\n 0x0c65,\r\n 0x0c70,\r\n 0x0c81,\r\n 0x0c84,\r\n 0x0c84,\r\n 0x0c8d,\r\n 0x0c8d,\r\n 0x0c91,\r\n 0x0c91,\r\n 0x0ca9,\r\n 0x0ca9,\r\n 0x0cb4,\r\n 0x0cb4,\r\n 0x0cba,\r\n 0x0cbd,\r\n 0x0cc5,\r\n 0x0cc5,\r\n 0x0cc9,\r\n 0x0cc9,\r\n 0x0cce,\r\n 0x0cd4,\r\n 0x0cd7,\r\n 0x0cdd,\r\n 0x0cdf,\r\n 0x0cdf,\r\n 0x0ce2,\r\n 0x0ce5,\r\n 0x0cf0,\r\n 0x0d01,\r\n 0x0d04,\r\n 0x0d04,\r\n 0x0d0d,\r\n 0x0d0d,\r\n 0x0d11,\r\n 0x0d11,\r\n 0x0d29,\r\n 0x0d29,\r\n 0x0d3a,\r\n 0x0d3d,\r\n 0x0d44,\r\n 0x0d45,\r\n 0x0d49,\r\n 0x0d49,\r\n 0x0d4e,\r\n 0x0d56,\r\n 0x0d58,\r\n 0x0d5f,\r\n 0x0d62,\r\n 0x0d65,\r\n 0x0d70,\r\n 0x0d81,\r\n 0x0d84,\r\n 0x0d84,\r\n 0x0d97,\r\n 0x0d99,\r\n 0x0db2,\r\n 0x0db2,\r\n 0x0dbc,\r\n 0x0dbc,\r\n 0x0dbe,\r\n 0x0dbf,\r\n 0x0dc7,\r\n 0x0dc9,\r\n 0x0dcb,\r\n 0x0dce,\r\n 0x0dd5,\r\n 0x0dd5,\r\n 0x0dd7,\r\n 0x0dd7,\r\n 0x0de0,\r\n 0x0df1,\r\n 0x0df5,\r\n 0x0e00,\r\n 0x0e3b,\r\n 0x0e3e,\r\n 0x0e5c,\r\n 0x0e80,\r\n 0x0e83,\r\n 0x0e83,\r\n 0x0e85,\r\n 0x0e86,\r\n 0x0e89,\r\n 0x0e89,\r\n 0x0e8b,\r\n 0x0e8c,\r\n 0x0e8e,\r\n 0x0e93,\r\n 0x0e98,\r\n 0x0e98,\r\n 0x0ea0,\r\n 0x0ea0,\r\n 0x0ea4,\r\n 0x0ea4,\r\n 0x0ea6,\r\n 0x0ea6,\r\n 0x0ea8,\r\n 0x0ea9,\r\n 0x0eac,\r\n 0x0eac,\r\n 0x0eba,\r\n 0x0eba,\r\n 0x0ebe,\r\n 0x0ebf,\r\n 0x0ec5,\r\n 0x0ec5,\r\n 0x0ec7,\r\n 0x0ec7,\r\n 0x0ece,\r\n 0x0ecf,\r\n 0x0eda,\r\n 0x0edb,\r\n 0x0ede,\r\n 0x0eff,\r\n 0x0f48,\r\n 0x0f48,\r\n 0x0f6b,\r\n 0x0f70,\r\n 0x0f8c,\r\n 0x0f8f,\r\n 0x0f98,\r\n 0x0f98,\r\n 0x0fbd,\r\n 0x0fbd,\r\n 0x0fcd,\r\n 0x0fce,\r\n 0x0fd0,\r\n 0x0fff,\r\n 0x1022,\r\n 0x1022,\r\n 0x1028,\r\n 0x1028,\r\n 0x102b,\r\n 0x102b,\r\n 0x1033,\r\n 0x1035,\r\n 0x103a,\r\n 0x103f,\r\n 0x105a,\r\n 0x109f,\r\n 0x10c6,\r\n 0x10cf,\r\n 0x10f9,\r\n 0x10fa,\r\n 0x10fc,\r\n 0x10ff,\r\n 0x115a,\r\n 0x115e,\r\n 0x11a3,\r\n 0x11a7,\r\n 0x11fa,\r\n 0x11ff,\r\n 0x1207,\r\n 0x1207,\r\n 0x1247,\r\n 0x1247,\r\n 0x1249,\r\n 0x1249,\r\n 0x124e,\r\n 0x124f,\r\n 0x1257,\r\n 0x1257,\r\n 0x1259,\r\n 0x1259,\r\n 0x125e,\r\n 0x125f,\r\n 0x1287,\r\n 0x1287,\r\n 0x1289,\r\n 0x1289,\r\n 0x128e,\r\n 0x128f,\r\n 0x12af,\r\n 0x12af,\r\n 0x12b1,\r\n 0x12b1,\r\n 0x12b6,\r\n 0x12b7,\r\n 0x12bf,\r\n 0x12bf,\r\n 0x12c1,\r\n 0x12c1,\r\n 0x12c6,\r\n 0x12c7,\r\n 0x12cf,\r\n 0x12cf,\r\n 0x12d7,\r\n 0x12d7,\r\n 0x12ef,\r\n 0x12ef,\r\n 0x130f,\r\n 0x130f,\r\n 0x1311,\r\n 0x1311,\r\n 0x1316,\r\n 0x1317,\r\n 0x131f,\r\n 0x131f,\r\n 0x1347,\r\n 0x1347,\r\n 0x135b,\r\n 0x1360,\r\n 0x137d,\r\n 0x139f,\r\n 0x13f5,\r\n 0x1400,\r\n 0x1677,\r\n 0x167f,\r\n 0x169d,\r\n 0x169f,\r\n 0x16f1,\r\n 0x16ff,\r\n 0x170d,\r\n 0x170d,\r\n 0x1715,\r\n 0x171f,\r\n 0x1737,\r\n 0x173f,\r\n 0x1754,\r\n 0x175f,\r\n 0x176d,\r\n 0x176d,\r\n 0x1771,\r\n 0x1771,\r\n 0x1774,\r\n 0x177f,\r\n 0x17dd,\r\n 0x17df,\r\n 0x17ea,\r\n 0x17ff,\r\n 0x180f,\r\n 0x180f,\r\n 0x181a,\r\n 0x181f,\r\n 0x1878,\r\n 0x187f,\r\n 0x18aa,\r\n 0x1dff,\r\n 0x1e9c,\r\n 0x1e9f,\r\n 0x1efa,\r\n 0x1eff,\r\n 0x1f16,\r\n 0x1f17,\r\n 0x1f1e,\r\n 0x1f1f,\r\n 0x1f46,\r\n 0x1f47,\r\n 0x1f4e,\r\n 0x1f4f,\r\n 0x1f58,\r\n 0x1f58,\r\n 0x1f5a,\r\n 0x1f5a,\r\n 0x1f5c,\r\n 0x1f5c,\r\n 0x1f5e,\r\n 0x1f5e,\r\n 0x1f7e,\r\n 0x1f7f,\r\n 0x1fb5,\r\n 0x1fb5,\r\n 0x1fc5,\r\n 0x1fc5,\r\n 0x1fd4,\r\n 0x1fd5,\r\n 0x1fdc,\r\n 0x1fdc,\r\n 0x1ff0,\r\n 0x1ff1,\r\n 0x1ff5,\r\n 0x1ff5,\r\n 0x1fff,\r\n 0x1fff,\r\n 0x2053,\r\n 0x2056,\r\n 0x2058,\r\n 0x205e,\r\n 0x2064,\r\n 0x2069,\r\n 0x2072,\r\n 0x2073,\r\n 0x208f,\r\n 0x209f,\r\n 0x20b2,\r\n 0x20cf,\r\n 0x20eb,\r\n 0x20ff,\r\n 0x213b,\r\n 0x213c,\r\n 0x214c,\r\n 0x2152,\r\n 0x2184,\r\n 0x218f,\r\n 0x23cf,\r\n 0x23ff,\r\n 0x2427,\r\n 0x243f,\r\n 0x244b,\r\n 0x245f,\r\n 0x24ff,\r\n 0x24ff,\r\n 0x2614,\r\n 0x2615,\r\n 0x2618,\r\n 0x2618,\r\n 0x267e,\r\n 0x267f,\r\n 0x268a,\r\n 0x2700,\r\n 0x2705,\r\n 0x2705,\r\n 0x270a,\r\n 0x270b,\r\n 0x2728,\r\n 0x2728,\r\n 0x274c,\r\n 0x274c,\r\n 0x274e,\r\n 0x274e,\r\n 0x2753,\r\n 0x2755,\r\n 0x2757,\r\n 0x2757,\r\n 0x275f,\r\n 0x2760,\r\n 0x2795,\r\n 0x2797,\r\n 0x27b0,\r\n 0x27b0,\r\n 0x27bf,\r\n 0x27cf,\r\n 0x27ec,\r\n 0x27ef,\r\n 0x2b00,\r\n 0x2e7f,\r\n 0x2e9a,\r\n 0x2e9a,\r\n 0x2ef4,\r\n 0x2eff,\r\n 0x2fd6,\r\n 0x2fef,\r\n 0x2ffc,\r\n 0x2fff,\r\n 0x3040,\r\n 0x3040,\r\n 0x3097,\r\n 0x3098,\r\n 0x3100,\r\n 0x3104,\r\n 0x312d,\r\n 0x3130,\r\n 0x318f,\r\n 0x318f,\r\n 0x31b8,\r\n 0x31ef,\r\n 0x321d,\r\n 0x321f,\r\n 0x3244,\r\n 0x3250,\r\n 0x327c,\r\n 0x327e,\r\n 0x32cc,\r\n 0x32cf,\r\n 0x32ff,\r\n 0x32ff,\r\n 0x3377,\r\n 0x337a,\r\n 0x33de,\r\n 0x33df,\r\n 0x33ff,\r\n 0x33ff,\r\n 0x4db6,\r\n 0x4dff,\r\n 0x9fa6,\r\n 0x9fff,\r\n 0xa48d,\r\n 0xa48f,\r\n 0xa4c7,\r\n 0xabff,\r\n 0xd7a4,\r\n 0xd7ff,\r\n 0xfa2e,\r\n 0xfa2f,\r\n 0xfa6b,\r\n 0xfaff,\r\n 0xfb07,\r\n 0xfb12,\r\n 0xfb18,\r\n 0xfb1c,\r\n 0xfb37,\r\n 0xfb37,\r\n 0xfb3d,\r\n 0xfb3d,\r\n 0xfb3f,\r\n 0xfb3f,\r\n 0xfb42,\r\n 0xfb42,\r\n 0xfb45,\r\n 0xfb45,\r\n 0xfbb2,\r\n 0xfbd2,\r\n 0xfd40,\r\n 0xfd4f,\r\n 0xfd90,\r\n 0xfd91,\r\n 0xfdc8,\r\n 0xfdcf,\r\n 0xfdfd,\r\n 0xfdff,\r\n 0xfe10,\r\n 0xfe1f,\r\n 0xfe24,\r\n 0xfe2f,\r\n 0xfe47,\r\n 0xfe48,\r\n 0xfe53,\r\n 0xfe53,\r\n 0xfe67,\r\n 0xfe67,\r\n 0xfe6c,\r\n 0xfe6f,\r\n 0xfe75,\r\n 0xfe75,\r\n 0xfefd,\r\n 0xfefe,\r\n 0xff00,\r\n 0xff00,\r\n 0xffbf,\r\n 0xffc1,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffd0,\r\n 0xffd1,\r\n 0xffd8,\r\n 0xffd9,\r\n 0xffdd,\r\n 0xffdf,\r\n 0xffe7,\r\n 0xffe7,\r\n 0xffef,\r\n 0xfff8,\r\n 0x10000,\r\n 0x102ff,\r\n 0x1031f,\r\n 0x1031f,\r\n 0x10324,\r\n 0x1032f,\r\n 0x1034b,\r\n 0x103ff,\r\n 0x10426,\r\n 0x10427,\r\n 0x1044e,\r\n 0x1cfff,\r\n 0x1d0f6,\r\n 0x1d0ff,\r\n 0x1d127,\r\n 0x1d129,\r\n 0x1d1de,\r\n 0x1d3ff,\r\n 0x1d455,\r\n 0x1d455,\r\n 0x1d49d,\r\n 0x1d49d,\r\n 0x1d4a0,\r\n 0x1d4a1,\r\n 0x1d4a3,\r\n 0x1d4a4,\r\n 0x1d4a7,\r\n 0x1d4a8,\r\n 0x1d4ad,\r\n 0x1d4ad,\r\n 0x1d4ba,\r\n 0x1d4ba,\r\n 0x1d4bc,\r\n 0x1d4bc,\r\n 0x1d4c1,\r\n 0x1d4c1,\r\n 0x1d4c4,\r\n 0x1d4c4,\r\n 0x1d506,\r\n 0x1d506,\r\n 0x1d50b,\r\n 0x1d50c,\r\n 0x1d515,\r\n 0x1d515,\r\n 0x1d51d,\r\n 0x1d51d,\r\n 0x1d53a,\r\n 0x1d53a,\r\n 0x1d53f,\r\n 0x1d53f,\r\n 0x1d545,\r\n 0x1d545,\r\n 0x1d547,\r\n 0x1d549,\r\n 0x1d551,\r\n 0x1d551,\r\n 0x1d6a4,\r\n 0x1d6a7,\r\n 0x1d7ca,\r\n 0x1d7cd,\r\n 0x1d800,\r\n 0x1fffd,\r\n 0x2a6d7,\r\n 0x2f7ff,\r\n 0x2fa1e,\r\n 0x2fffd,\r\n 0x30000,\r\n 0x3fffd,\r\n 0x40000,\r\n 0x4fffd,\r\n 0x50000,\r\n 0x5fffd,\r\n 0x60000,\r\n 0x6fffd,\r\n 0x70000,\r\n 0x7fffd,\r\n 0x80000,\r\n 0x8fffd,\r\n 0x90000,\r\n 0x9fffd,\r\n 0xa0000,\r\n 0xafffd,\r\n 0xb0000,\r\n 0xbfffd,\r\n 0xc0000,\r\n 0xcfffd,\r\n 0xd0000,\r\n 0xdfffd,\r\n 0xe0000,\r\n 0xe0000,\r\n 0xe0002,\r\n 0xe001f,\r\n 0xe0080,\r\n 0xefffd\r\n];\r\n/* eslint-enable */\r\n\r\nconst isUnassignedCodePoint = character =>\r\n inRange(character, unassigned_code_points);\r\n\r\n/* eslint-disable prettier/prettier */\r\n/**\r\n * B.1 Commonly mapped to nothing\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\r\n */\r\nconst commonly_mapped_to_nothing = [\r\n 0x00ad,\r\n 0x00ad,\r\n 0x034f,\r\n 0x034f,\r\n 0x1806,\r\n 0x1806,\r\n 0x180b,\r\n 0x180b,\r\n 0x180c,\r\n 0x180c,\r\n 0x180d,\r\n 0x180d,\r\n 0x200b,\r\n 0x200b,\r\n 0x200c,\r\n 0x200c,\r\n 0x200d,\r\n 0x200d,\r\n 0x2060,\r\n 0x2060,\r\n 0xfe00,\r\n 0xfe00,\r\n 0xfe01,\r\n 0xfe01,\r\n 0xfe02,\r\n 0xfe02,\r\n 0xfe03,\r\n 0xfe03,\r\n 0xfe04,\r\n 0xfe04,\r\n 0xfe05,\r\n 0xfe05,\r\n 0xfe06,\r\n 0xfe06,\r\n 0xfe07,\r\n 0xfe07,\r\n 0xfe08,\r\n 0xfe08,\r\n 0xfe09,\r\n 0xfe09,\r\n 0xfe0a,\r\n 0xfe0a,\r\n 0xfe0b,\r\n 0xfe0b,\r\n 0xfe0c,\r\n 0xfe0c,\r\n 0xfe0d,\r\n 0xfe0d,\r\n 0xfe0e,\r\n 0xfe0e,\r\n 0xfe0f,\r\n 0xfe0f,\r\n 0xfeff,\r\n 0xfeff\r\n];\r\n/* eslint-enable */\r\n\r\nconst isCommonlyMappedToNothing = character =>\r\n inRange(character, commonly_mapped_to_nothing);\r\n\r\n/* eslint-disable prettier/prettier */\r\n/**\r\n * C.1.2 Non-ASCII space characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\r\n */\r\nconst non_ASCII_space_characters = [\r\n 0x00a0,\r\n 0x00a0 /* NO-BREAK SPACE */,\r\n 0x1680,\r\n 0x1680 /* OGHAM SPACE MARK */,\r\n 0x2000,\r\n 0x2000 /* EN QUAD */,\r\n 0x2001,\r\n 0x2001 /* EM QUAD */,\r\n 0x2002,\r\n 0x2002 /* EN SPACE */,\r\n 0x2003,\r\n 0x2003 /* EM SPACE */,\r\n 0x2004,\r\n 0x2004 /* THREE-PER-EM SPACE */,\r\n 0x2005,\r\n 0x2005 /* FOUR-PER-EM SPACE */,\r\n 0x2006,\r\n 0x2006 /* SIX-PER-EM SPACE */,\r\n 0x2007,\r\n 0x2007 /* FIGURE SPACE */,\r\n 0x2008,\r\n 0x2008 /* PUNCTUATION SPACE */,\r\n 0x2009,\r\n 0x2009 /* THIN SPACE */,\r\n 0x200a,\r\n 0x200a /* HAIR SPACE */,\r\n 0x200b,\r\n 0x200b /* ZERO WIDTH SPACE */,\r\n 0x202f,\r\n 0x202f /* NARROW NO-BREAK SPACE */,\r\n 0x205f,\r\n 0x205f /* MEDIUM MATHEMATICAL SPACE */,\r\n 0x3000,\r\n 0x3000 /* IDEOGRAPHIC SPACE */\r\n];\r\n/* eslint-enable */\r\n\r\nconst isNonASCIISpaceCharacter = character =>\r\n inRange(character, non_ASCII_space_characters);\r\n\r\n/* eslint-disable prettier/prettier */\r\nconst non_ASCII_controls_characters = [\r\n /**\r\n * C.2.2 Non-ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\r\n */\r\n 0x0080,\r\n 0x009f /* [CONTROL CHARACTERS] */,\r\n 0x06dd,\r\n 0x06dd /* ARABIC END OF AYAH */,\r\n 0x070f,\r\n 0x070f /* SYRIAC ABBREVIATION MARK */,\r\n 0x180e,\r\n 0x180e /* MONGOLIAN VOWEL SEPARATOR */,\r\n 0x200c,\r\n 0x200c /* ZERO WIDTH NON-JOINER */,\r\n 0x200d,\r\n 0x200d /* ZERO WIDTH JOINER */,\r\n 0x2028,\r\n 0x2028 /* LINE SEPARATOR */,\r\n 0x2029,\r\n 0x2029 /* PARAGRAPH SEPARATOR */,\r\n 0x2060,\r\n 0x2060 /* WORD JOINER */,\r\n 0x2061,\r\n 0x2061 /* FUNCTION APPLICATION */,\r\n 0x2062,\r\n 0x2062 /* INVISIBLE TIMES */,\r\n 0x2063,\r\n 0x2063 /* INVISIBLE SEPARATOR */,\r\n 0x206a,\r\n 0x206f /* [CONTROL CHARACTERS] */,\r\n 0xfeff,\r\n 0xfeff /* ZERO WIDTH NO-BREAK SPACE */,\r\n 0xfff9,\r\n 0xfffc /* [CONTROL CHARACTERS] */,\r\n 0x1d173,\r\n 0x1d17a /* [MUSICAL CONTROL CHARACTERS] */\r\n];\r\n\r\nconst non_character_codepoints = [\r\n /**\r\n * C.4 Non-character code points\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\r\n */\r\n 0xfdd0,\r\n 0xfdef /* [NONCHARACTER CODE POINTS] */,\r\n 0xfffe,\r\n 0xffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x1fffe,\r\n 0x1ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x2fffe,\r\n 0x2ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x3fffe,\r\n 0x3ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x4fffe,\r\n 0x4ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x5fffe,\r\n 0x5ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x6fffe,\r\n 0x6ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x7fffe,\r\n 0x7ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x8fffe,\r\n 0x8ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x9fffe,\r\n 0x9ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xafffe,\r\n 0xaffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xbfffe,\r\n 0xbffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xcfffe,\r\n 0xcffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xdfffe,\r\n 0xdffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xefffe,\r\n 0xeffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x10fffe,\r\n 0x10ffff /* [NONCHARACTER CODE POINTS] */\r\n];\r\n\r\n/**\r\n * 2.3. Prohibited Output\r\n */\r\nconst prohibited_characters = [\r\n /**\r\n * C.2.1 ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\r\n */\r\n 0,\r\n 0x001f /* [CONTROL CHARACTERS] */,\r\n 0x007f,\r\n 0x007f /* DELETE */,\r\n\r\n /**\r\n * C.8 Change display properties or are deprecated\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\r\n */\r\n 0x0340,\r\n 0x0340 /* COMBINING GRAVE TONE MARK */,\r\n 0x0341,\r\n 0x0341 /* COMBINING ACUTE TONE MARK */,\r\n 0x200e,\r\n 0x200e /* LEFT-TO-RIGHT MARK */,\r\n 0x200f,\r\n 0x200f /* RIGHT-TO-LEFT MARK */,\r\n 0x202a,\r\n 0x202a /* LEFT-TO-RIGHT EMBEDDING */,\r\n 0x202b,\r\n 0x202b /* RIGHT-TO-LEFT EMBEDDING */,\r\n 0x202c,\r\n 0x202c /* POP DIRECTIONAL FORMATTING */,\r\n 0x202d,\r\n 0x202d /* LEFT-TO-RIGHT OVERRIDE */,\r\n 0x202e,\r\n 0x202e /* RIGHT-TO-LEFT OVERRIDE */,\r\n 0x206a,\r\n 0x206a /* INHIBIT SYMMETRIC SWAPPING */,\r\n 0x206b,\r\n 0x206b /* ACTIVATE SYMMETRIC SWAPPING */,\r\n 0x206c,\r\n 0x206c /* INHIBIT ARABIC FORM SHAPING */,\r\n 0x206d,\r\n 0x206d /* ACTIVATE ARABIC FORM SHAPING */,\r\n 0x206e,\r\n 0x206e /* NATIONAL DIGIT SHAPES */,\r\n 0x206f,\r\n 0x206f /* NOMINAL DIGIT SHAPES */,\r\n\r\n /**\r\n * C.7 Inappropriate for canonical representation\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\r\n */\r\n 0x2ff0,\r\n 0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\r\n\r\n /**\r\n * C.5 Surrogate codes\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\r\n */\r\n 0xd800,\r\n 0xdfff,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n 0xe000,\r\n 0xf8ff /* [PRIVATE USE, PLANE 0] */,\r\n\r\n /**\r\n * C.6 Inappropriate for plain text\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\r\n */\r\n 0xfff9,\r\n 0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */,\r\n 0xfffa,\r\n 0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */,\r\n 0xfffb,\r\n 0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */,\r\n 0xfffc,\r\n 0xfffc /* OBJECT REPLACEMENT CHARACTER */,\r\n 0xfffd,\r\n 0xfffd /* REPLACEMENT CHARACTER */,\r\n\r\n /**\r\n * C.9 Tagging characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\r\n */\r\n 0xe0001,\r\n 0xe0001 /* LANGUAGE TAG */,\r\n 0xe0020,\r\n 0xe007f /* [TAGGING CHARACTERS] */,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n\r\n 0xf0000,\r\n 0xffffd /* [PRIVATE USE, PLANE 15] */,\r\n 0x100000,\r\n 0x10fffd /* [PRIVATE USE, PLANE 16] */\r\n];\r\n/* eslint-enable */\r\n\r\nconst isProhibitedCharacter = character =>\r\n inRange(character, non_ASCII_space_characters) ||\r\n inRange(character, prohibited_characters) ||\r\n inRange(character, non_ASCII_controls_characters) ||\r\n inRange(character, non_character_codepoints);\r\n\r\n/* eslint-disable prettier/prettier */\r\n/**\r\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\r\n */\r\nconst bidirectional_r_al = [\r\n 0x05be,\r\n 0x05be,\r\n 0x05c0,\r\n 0x05c0,\r\n 0x05c3,\r\n 0x05c3,\r\n 0x05d0,\r\n 0x05ea,\r\n 0x05f0,\r\n 0x05f4,\r\n 0x061b,\r\n 0x061b,\r\n 0x061f,\r\n 0x061f,\r\n 0x0621,\r\n 0x063a,\r\n 0x0640,\r\n 0x064a,\r\n 0x066d,\r\n 0x066f,\r\n 0x0671,\r\n 0x06d5,\r\n 0x06dd,\r\n 0x06dd,\r\n 0x06e5,\r\n 0x06e6,\r\n 0x06fa,\r\n 0x06fe,\r\n 0x0700,\r\n 0x070d,\r\n 0x0710,\r\n 0x0710,\r\n 0x0712,\r\n 0x072c,\r\n 0x0780,\r\n 0x07a5,\r\n 0x07b1,\r\n 0x07b1,\r\n 0x200f,\r\n 0x200f,\r\n 0xfb1d,\r\n 0xfb1d,\r\n 0xfb1f,\r\n 0xfb28,\r\n 0xfb2a,\r\n 0xfb36,\r\n 0xfb38,\r\n 0xfb3c,\r\n 0xfb3e,\r\n 0xfb3e,\r\n 0xfb40,\r\n 0xfb41,\r\n 0xfb43,\r\n 0xfb44,\r\n 0xfb46,\r\n 0xfbb1,\r\n 0xfbd3,\r\n 0xfd3d,\r\n 0xfd50,\r\n 0xfd8f,\r\n 0xfd92,\r\n 0xfdc7,\r\n 0xfdf0,\r\n 0xfdfc,\r\n 0xfe70,\r\n 0xfe74,\r\n 0xfe76,\r\n 0xfefc\r\n];\r\n/* eslint-enable */\r\n\r\nconst isBidirectionalRAL = character => inRange(character, bidirectional_r_al);\r\n\r\n/* eslint-disable prettier/prettier */\r\n/**\r\n * D.2 Characters with bidirectional property \"L\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\r\n */\r\nconst bidirectional_l = [\r\n 0x0041,\r\n 0x005a,\r\n 0x0061,\r\n 0x007a,\r\n 0x00aa,\r\n 0x00aa,\r\n 0x00b5,\r\n 0x00b5,\r\n 0x00ba,\r\n 0x00ba,\r\n 0x00c0,\r\n 0x00d6,\r\n 0x00d8,\r\n 0x00f6,\r\n 0x00f8,\r\n 0x0220,\r\n 0x0222,\r\n 0x0233,\r\n 0x0250,\r\n 0x02ad,\r\n 0x02b0,\r\n 0x02b8,\r\n 0x02bb,\r\n 0x02c1,\r\n 0x02d0,\r\n 0x02d1,\r\n 0x02e0,\r\n 0x02e4,\r\n 0x02ee,\r\n 0x02ee,\r\n 0x037a,\r\n 0x037a,\r\n 0x0386,\r\n 0x0386,\r\n 0x0388,\r\n 0x038a,\r\n 0x038c,\r\n 0x038c,\r\n 0x038e,\r\n 0x03a1,\r\n 0x03a3,\r\n 0x03ce,\r\n 0x03d0,\r\n 0x03f5,\r\n 0x0400,\r\n 0x0482,\r\n 0x048a,\r\n 0x04ce,\r\n 0x04d0,\r\n 0x04f5,\r\n 0x04f8,\r\n 0x04f9,\r\n 0x0500,\r\n 0x050f,\r\n 0x0531,\r\n 0x0556,\r\n 0x0559,\r\n 0x055f,\r\n 0x0561,\r\n 0x0587,\r\n 0x0589,\r\n 0x0589,\r\n 0x0903,\r\n 0x0903,\r\n 0x0905,\r\n 0x0939,\r\n 0x093d,\r\n 0x0940,\r\n 0x0949,\r\n 0x094c,\r\n 0x0950,\r\n 0x0950,\r\n 0x0958,\r\n 0x0961,\r\n 0x0964,\r\n 0x0970,\r\n 0x0982,\r\n 0x0983,\r\n 0x0985,\r\n 0x098c,\r\n 0x098f,\r\n 0x0990,\r\n 0x0993,\r\n 0x09a8,\r\n 0x09aa,\r\n 0x09b0,\r\n 0x09b2,\r\n 0x09b2,\r\n 0x09b6,\r\n 0x09b9,\r\n 0x09be,\r\n 0x09c0,\r\n 0x09c7,\r\n 0x09c8,\r\n 0x09cb,\r\n 0x09cc,\r\n 0x09d7,\r\n 0x09d7,\r\n 0x09dc,\r\n 0x09dd,\r\n 0x09df,\r\n 0x09e1,\r\n 0x09e6,\r\n 0x09f1,\r\n 0x09f4,\r\n 0x09fa,\r\n 0x0a05,\r\n 0x0a0a,\r\n 0x0a0f,\r\n 0x0a10,\r\n 0x0a13,\r\n 0x0a28,\r\n 0x0a2a,\r\n 0x0a30,\r\n 0x0a32,\r\n 0x0a33,\r\n 0x0a35,\r\n 0x0a36,\r\n 0x0a38,\r\n 0x0a39,\r\n 0x0a3e,\r\n 0x0a40,\r\n 0x0a59,\r\n 0x0a5c,\r\n 0x0a5e,\r\n 0x0a5e,\r\n 0x0a66,\r\n 0x0a6f,\r\n 0x0a72,\r\n 0x0a74,\r\n 0x0a83,\r\n 0x0a83,\r\n 0x0a85,\r\n 0x0a8b,\r\n 0x0a8d,\r\n 0x0a8d,\r\n 0x0a8f,\r\n 0x0a91,\r\n 0x0a93,\r\n 0x0aa8,\r\n 0x0aaa,\r\n 0x0ab0,\r\n 0x0ab2,\r\n 0x0ab3,\r\n 0x0ab5,\r\n 0x0ab9,\r\n 0x0abd,\r\n 0x0ac0,\r\n 0x0ac9,\r\n 0x0ac9,\r\n 0x0acb,\r\n 0x0acc,\r\n 0x0ad0,\r\n 0x0ad0,\r\n 0x0ae0,\r\n 0x0ae0,\r\n 0x0ae6,\r\n 0x0aef,\r\n 0x0b02,\r\n 0x0b03,\r\n 0x0b05,\r\n 0x0b0c,\r\n 0x0b0f,\r\n 0x0b10,\r\n 0x0b13,\r\n 0x0b28,\r\n 0x0b2a,\r\n 0x0b30,\r\n 0x0b32,\r\n 0x0b33,\r\n 0x0b36,\r\n 0x0b39,\r\n 0x0b3d,\r\n 0x0b3e,\r\n 0x0b40,\r\n 0x0b40,\r\n 0x0b47,\r\n 0x0b48,\r\n 0x0b4b,\r\n 0x0b4c,\r\n 0x0b57,\r\n 0x0b57,\r\n 0x0b5c,\r\n 0x0b5d,\r\n 0x0b5f,\r\n 0x0b61,\r\n 0x0b66,\r\n 0x0b70,\r\n 0x0b83,\r\n 0x0b83,\r\n 0x0b85,\r\n 0x0b8a,\r\n 0x0b8e,\r\n 0x0b90,\r\n 0x0b92,\r\n 0x0b95,\r\n 0x0b99,\r\n 0x0b9a,\r\n 0x0b9c,\r\n 0x0b9c,\r\n 0x0b9e,\r\n 0x0b9f,\r\n 0x0ba3,\r\n 0x0ba4,\r\n 0x0ba8,\r\n 0x0baa,\r\n 0x0bae,\r\n 0x0bb5,\r\n 0x0bb7,\r\n 0x0bb9,\r\n 0x0bbe,\r\n 0x0bbf,\r\n 0x0bc1,\r\n 0x0bc2,\r\n 0x0bc6,\r\n 0x0bc8,\r\n 0x0bca,\r\n 0x0bcc,\r\n 0x0bd7,\r\n 0x0bd7,\r\n 0x0be7,\r\n 0x0bf2,\r\n 0x0c01,\r\n 0x0c03,\r\n 0x0c05,\r\n 0x0c0c,\r\n 0x0c0e,\r\n 0x0c10,\r\n 0x0c12,\r\n 0x0c28,\r\n 0x0c2a,\r\n 0x0c33,\r\n 0x0c35,\r\n 0x0c39,\r\n 0x0c41,\r\n 0x0c44,\r\n 0x0c60,\r\n 0x0c61,\r\n 0x0c66,\r\n 0x0c6f,\r\n 0x0c82,\r\n 0x0c83,\r\n 0x0c85,\r\n 0x0c8c,\r\n 0x0c8e,\r\n 0x0c90,\r\n 0x0c92,\r\n 0x0ca8,\r\n 0x0caa,\r\n 0x0cb3,\r\n 0x0cb5,\r\n 0x0cb9,\r\n 0x0cbe,\r\n 0x0cbe,\r\n 0x0cc0,\r\n 0x0cc4,\r\n 0x0cc7,\r\n 0x0cc8,\r\n 0x0cca,\r\n 0x0ccb,\r\n 0x0cd5,\r\n 0x0cd6,\r\n 0x0cde,\r\n 0x0cde,\r\n 0x0ce0,\r\n 0x0ce1,\r\n 0x0ce6,\r\n 0x0cef,\r\n 0x0d02,\r\n 0x0d03,\r\n 0x0d05,\r\n 0x0d0c,\r\n 0x0d0e,\r\n 0x0d10,\r\n 0x0d12,\r\n 0x0d28,\r\n 0x0d2a,\r\n 0x0d39,\r\n 0x0d3e,\r\n 0x0d40,\r\n 0x0d46,\r\n 0x0d48,\r\n 0x0d4a,\r\n 0x0d4c,\r\n 0x0d57,\r\n 0x0d57,\r\n 0x0d60,\r\n 0x0d61,\r\n 0x0d66,\r\n 0x0d6f,\r\n 0x0d82,\r\n 0x0d83,\r\n 0x0d85,\r\n 0x0d96,\r\n 0x0d9a,\r\n 0x0db1,\r\n 0x0db3,\r\n 0x0dbb,\r\n 0x0dbd,\r\n 0x0dbd,\r\n 0x0dc0,\r\n 0x0dc6,\r\n 0x0dcf,\r\n 0x0dd1,\r\n 0x0dd8,\r\n 0x0ddf,\r\n 0x0df2,\r\n 0x0df4,\r\n 0x0e01,\r\n 0x0e30,\r\n 0x0e32,\r\n 0x0e33,\r\n 0x0e40,\r\n 0x0e46,\r\n 0x0e4f,\r\n 0x0e5b,\r\n 0x0e81,\r\n 0x0e82,\r\n 0x0e84,\r\n 0x0e84,\r\n 0x0e87,\r\n 0x0e88,\r\n 0x0e8a,\r\n 0x0e8a,\r\n 0x0e8d,\r\n 0x0e8d,\r\n 0x0e94,\r\n 0x0e97,\r\n 0x0e99,\r\n 0x0e9f,\r\n 0x0ea1,\r\n 0x0ea3,\r\n 0x0ea5,\r\n 0x0ea5,\r\n 0x0ea7,\r\n 0x0ea7,\r\n 0x0eaa,\r\n 0x0eab,\r\n 0x0ead,\r\n 0x0eb0,\r\n 0x0eb2,\r\n 0x0eb3,\r\n 0x0ebd,\r\n 0x0ebd,\r\n 0x0ec0,\r\n 0x0ec4,\r\n 0x0ec6,\r\n 0x0ec6,\r\n 0x0ed0,\r\n 0x0ed9,\r\n 0x0edc,\r\n 0x0edd,\r\n 0x0f00,\r\n 0x0f17,\r\n 0x0f1a,\r\n 0x0f34,\r\n 0x0f36,\r\n 0x0f36,\r\n 0x0f38,\r\n 0x0f38,\r\n 0x0f3e,\r\n 0x0f47,\r\n 0x0f49,\r\n 0x0f6a,\r\n 0x0f7f,\r\n 0x0f7f,\r\n 0x0f85,\r\n 0x0f85,\r\n 0x0f88,\r\n 0x0f8b,\r\n 0x0fbe,\r\n 0x0fc5,\r\n 0x0fc7,\r\n 0x0fcc,\r\n 0x0fcf,\r\n 0x0fcf,\r\n 0x1000,\r\n 0x1021,\r\n 0x1023,\r\n 0x1027,\r\n 0x1029,\r\n 0x102a,\r\n 0x102c,\r\n 0x102c,\r\n 0x1031,\r\n 0x1031,\r\n 0x1038,\r\n 0x1038,\r\n 0x1040,\r\n 0x1057,\r\n 0x10a0,\r\n 0x10c5,\r\n 0x10d0,\r\n 0x10f8,\r\n 0x10fb,\r\n 0x10fb,\r\n 0x1100,\r\n 0x1159,\r\n 0x115f,\r\n 0x11a2,\r\n 0x11a8,\r\n 0x11f9,\r\n 0x1200,\r\n 0x1206,\r\n 0x1208,\r\n 0x1246,\r\n 0x1248,\r\n 0x1248,\r\n 0x124a,\r\n 0x124d,\r\n 0x1250,\r\n 0x1256,\r\n 0x1258,\r\n 0x1258,\r\n 0x125a,\r\n 0x125d,\r\n 0x1260,\r\n 0x1286,\r\n 0x1288,\r\n 0x1288,\r\n 0x128a,\r\n 0x128d,\r\n 0x1290,\r\n 0x12ae,\r\n 0x12b0,\r\n 0x12b0,\r\n 0x12b2,\r\n 0x12b5,\r\n 0x12b8,\r\n 0x12be,\r\n 0x12c0,\r\n 0x12c0,\r\n 0x12c2,\r\n 0x12c5,\r\n 0x12c8,\r\n 0x12ce,\r\n 0x12d0,\r\n 0x12d6,\r\n 0x12d8,\r\n 0x12ee,\r\n 0x12f0,\r\n 0x130e,\r\n 0x1310,\r\n 0x1310,\r\n 0x1312,\r\n 0x1315,\r\n 0x1318,\r\n 0x131e,\r\n 0x1320,\r\n 0x1346,\r\n 0x1348,\r\n 0x135a,\r\n 0x1361,\r\n 0x137c,\r\n 0x13a0,\r\n 0x13f4,\r\n 0x1401,\r\n 0x1676,\r\n 0x1681,\r\n 0x169a,\r\n 0x16a0,\r\n 0x16f0,\r\n 0x1700,\r\n 0x170c,\r\n 0x170e,\r\n 0x1711,\r\n 0x1720,\r\n 0x1731,\r\n 0x1735,\r\n 0x1736,\r\n 0x1740,\r\n 0x1751,\r\n 0x1760,\r\n 0x176c,\r\n 0x176e,\r\n 0x1770,\r\n 0x1780,\r\n 0x17b6,\r\n 0x17be,\r\n 0x17c5,\r\n 0x17c7,\r\n 0x17c8,\r\n 0x17d4,\r\n 0x17da,\r\n 0x17dc,\r\n 0x17dc,\r\n 0x17e0,\r\n 0x17e9,\r\n 0x1810,\r\n 0x1819,\r\n 0x1820,\r\n 0x1877,\r\n 0x1880,\r\n 0x18a8,\r\n 0x1e00,\r\n 0x1e9b,\r\n 0x1ea0,\r\n 0x1ef9,\r\n 0x1f00,\r\n 0x1f15,\r\n 0x1f18,\r\n 0x1f1d,\r\n 0x1f20,\r\n 0x1f45,\r\n 0x1f48,\r\n 0x1f4d,\r\n 0x1f50,\r\n 0x1f57,\r\n 0x1f59,\r\n 0x1f59,\r\n 0x1f5b,\r\n 0x1f5b,\r\n 0x1f5d,\r\n 0x1f5d,\r\n 0x1f5f,\r\n 0x1f7d,\r\n 0x1f80,\r\n 0x1fb4,\r\n 0x1fb6,\r\n 0x1fbc,\r\n 0x1fbe,\r\n 0x1fbe,\r\n 0x1fc2,\r\n 0x1fc4,\r\n 0x1fc6,\r\n 0x1fcc,\r\n 0x1fd0,\r\n 0x1fd3,\r\n 0x1fd6,\r\n 0x1fdb,\r\n 0x1fe0,\r\n 0x1fec,\r\n 0x1ff2,\r\n 0x1ff4,\r\n 0x1ff6,\r\n 0x1ffc,\r\n 0x200e,\r\n 0x200e,\r\n 0x2071,\r\n 0x2071,\r\n 0x207f,\r\n 0x207f,\r\n 0x2102,\r\n 0x2102,\r\n 0x2107,\r\n 0x2107,\r\n 0x210a,\r\n 0x2113,\r\n 0x2115,\r\n 0x2115,\r\n 0x2119,\r\n 0x211d,\r\n 0x2124,\r\n 0x2124,\r\n 0x2126,\r\n 0x2126,\r\n 0x2128,\r\n 0x2128,\r\n 0x212a,\r\n 0x212d,\r\n 0x212f,\r\n 0x2131,\r\n 0x2133,\r\n 0x2139,\r\n 0x213d,\r\n 0x213f,\r\n 0x2145,\r\n 0x2149,\r\n 0x2160,\r\n 0x2183,\r\n 0x2336,\r\n 0x237a,\r\n 0x2395,\r\n 0x2395,\r\n 0x249c,\r\n 0x24e9,\r\n 0x3005,\r\n 0x3007,\r\n 0x3021,\r\n 0x3029,\r\n 0x3031,\r\n 0x3035,\r\n 0x3038,\r\n 0x303c,\r\n 0x3041,\r\n 0x3096,\r\n 0x309d,\r\n 0x309f,\r\n 0x30a1,\r\n 0x30fa,\r\n 0x30fc,\r\n 0x30ff,\r\n 0x3105,\r\n 0x312c,\r\n 0x3131,\r\n 0x318e,\r\n 0x3190,\r\n 0x31b7,\r\n 0x31f0,\r\n 0x321c,\r\n 0x3220,\r\n 0x3243,\r\n 0x3260,\r\n 0x327b,\r\n 0x327f,\r\n 0x32b0,\r\n 0x32c0,\r\n 0x32cb,\r\n 0x32d0,\r\n 0x32fe,\r\n 0x3300,\r\n 0x3376,\r\n 0x337b,\r\n 0x33dd,\r\n 0x33e0,\r\n 0x33fe,\r\n 0x3400,\r\n 0x4db5,\r\n 0x4e00,\r\n 0x9fa5,\r\n 0xa000,\r\n 0xa48c,\r\n 0xac00,\r\n 0xd7a3,\r\n 0xd800,\r\n 0xfa2d,\r\n 0xfa30,\r\n 0xfa6a,\r\n 0xfb00,\r\n 0xfb06,\r\n 0xfb13,\r\n 0xfb17,\r\n 0xff21,\r\n 0xff3a,\r\n 0xff41,\r\n 0xff5a,\r\n 0xff66,\r\n 0xffbe,\r\n 0xffc2,\r\n 0xffc7,\r\n 0xffca,\r\n 0xffcf,\r\n 0xffd2,\r\n 0xffd7,\r\n 0xffda,\r\n 0xffdc,\r\n 0x10300,\r\n 0x1031e,\r\n 0x10320,\r\n 0x10323,\r\n 0x10330,\r\n 0x1034a,\r\n 0x10400,\r\n 0x10425,\r\n 0x10428,\r\n 0x1044d,\r\n 0x1d000,\r\n 0x1d0f5,\r\n 0x1d100,\r\n 0x1d126,\r\n 0x1d12a,\r\n 0x1d166,\r\n 0x1d16a,\r\n 0x1d172,\r\n 0x1d183,\r\n 0x1d184,\r\n 0x1d18c,\r\n 0x1d1a9,\r\n 0x1d1ae,\r\n 0x1d1dd,\r\n 0x1d400,\r\n 0x1d454,\r\n 0x1d456,\r\n 0x1d49c,\r\n 0x1d49e,\r\n 0x1d49f,\r\n 0x1d4a2,\r\n 0x1d4a2,\r\n 0x1d4a5,\r\n 0x1d4a6,\r\n 0x1d4a9,\r\n 0x1d4ac,\r\n 0x1d4ae,\r\n 0x1d4b9,\r\n 0x1d4bb,\r\n 0x1d4bb,\r\n 0x1d4bd,\r\n 0x1d4c0,\r\n 0x1d4c2,\r\n 0x1d4c3,\r\n 0x1d4c5,\r\n 0x1d505,\r\n 0x1d507,\r\n 0x1d50a,\r\n 0x1d50d,\r\n 0x1d514,\r\n 0x1d516,\r\n 0x1d51c,\r\n 0x1d51e,\r\n 0x1d539,\r\n 0x1d53b,\r\n 0x1d53e,\r\n 0x1d540,\r\n 0x1d544,\r\n 0x1d546,\r\n 0x1d546,\r\n 0x1d54a,\r\n 0x1d550,\r\n 0x1d552,\r\n 0x1d6a3,\r\n 0x1d6a8,\r\n 0x1d7c9,\r\n 0x20000,\r\n 0x2a6d6,\r\n 0x2f800,\r\n 0x2fa1d,\r\n 0xf0000,\r\n 0xffffd,\r\n 0x100000,\r\n 0x10fffd\r\n];\r\n/* eslint-enable */\r\n\r\nconst isBidirectionalL = character => inRange(character, bidirectional_l);\r\n\r\nexport {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n};\r\n","import {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n} from './lib/code-points';\r\n\r\n// 2.1. Mapping\r\n\r\n/**\r\n * non-ASCII space characters [StringPrep, C.1.2] that can be\r\n * mapped to SPACE (U+0020)\r\n */\r\nconst mapping2space = isNonASCIISpaceCharacter;\r\n\r\n/**\r\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\r\n * that can be mapped to nothing.\r\n */\r\nconst mapping2nothing = isCommonlyMappedToNothing;\r\n\r\n// utils\r\nconst getCodePoint = character => character.codePointAt(0);\r\nconst first = x => x[0];\r\nconst last = x => x[x.length - 1];\r\n\r\n/**\r\n * Convert provided string into an array of Unicode Code Points.\r\n * Based on https://stackoverflow.com/a/21409165/1556249\r\n * and https://www.npmjs.com/package/code-point-at.\r\n * @param {string} input\r\n * @returns {number[]}\r\n */\r\nfunction toCodePoints(input) {\r\n const codepoints = [];\r\n const size = input.length;\r\n\r\n for (let i = 0; i < size; i += 1) {\r\n const before = input.charCodeAt(i);\r\n\r\n if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\r\n const next = input.charCodeAt(i + 1);\r\n\r\n if (next >= 0xdc00 && next <= 0xdfff) {\r\n codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\r\n i += 1;\r\n continue;\r\n }\r\n }\r\n\r\n codepoints.push(before);\r\n }\r\n\r\n return codepoints;\r\n}\r\n\r\n/**\r\n * SASLprep.\r\n * @param {string} input\r\n * @param {Object} opts\r\n * @param {boolean} opts.allowUnassigned\r\n * @returns {string}\r\n */\r\nfunction saslprep(input, opts = {}) {\r\n if (typeof input !== 'string') {\r\n throw new TypeError('Expected string.');\r\n }\r\n\r\n if (input.length === 0) {\r\n return '';\r\n }\r\n\r\n // 1. Map\r\n const mapped_input = toCodePoints(input)\r\n // 1.1 mapping to space\r\n .map(character => (mapping2space(character) ? 0x20 : character))\r\n // 1.2 mapping to nothing\r\n .filter(character => !mapping2nothing(character));\r\n\r\n // 2. Normalize\r\n const normalized_input = String.fromCodePoint\r\n .apply(null, mapped_input)\r\n .normalize('NFKC');\r\n\r\n const normalized_map = toCodePoints(normalized_input);\r\n\r\n // 3. Prohibit\r\n const hasProhibited = normalized_map.some(isProhibitedCharacter);\r\n\r\n if (hasProhibited) {\r\n throw new Error(\r\n 'Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'\r\n );\r\n }\r\n\r\n // Unassigned Code Points\r\n if (opts.allowUnassigned !== true) {\r\n const hasUnassigned = normalized_map.some(isUnassignedCodePoint);\r\n\r\n if (hasUnassigned) {\r\n throw new Error(\r\n 'Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'\r\n );\r\n }\r\n }\r\n\r\n // 4. check bidi\r\n\r\n const hasBidiRAL = normalized_map.some(isBidirectionalRAL);\r\n\r\n const hasBidiL = normalized_map.some(isBidirectionalL);\r\n\r\n // 4.1 If a string contains any RandALCat character, the string MUST NOT\r\n // contain any LCat character.\r\n if (hasBidiRAL && hasBidiL) {\r\n throw new Error(\r\n 'String must not contain RandALCat and LCat at the same time,' +\r\n ' see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n /**\r\n * 4.2 If a string contains any RandALCat character, a RandALCat\r\n * character MUST be the first character of the string, and a\r\n * RandALCat character MUST be the last character of the string.\r\n */\r\n\r\n const isFirstBidiRAL = isBidirectionalRAL(\r\n getCodePoint(first(normalized_input))\r\n );\r\n const isLastBidiRAL = isBidirectionalRAL(\r\n getCodePoint(last(normalized_input))\r\n );\r\n\r\n if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\r\n throw new Error(\r\n 'Bidirectional RandALCat character must be the first and the last' +\r\n ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n return normalized_input;\r\n}\r\n\r\nexport default saslprep;\r\n","/*\r\n PDFSecurity - represents PDF security settings\r\n By Yang Liu <hi@zesik.com>\r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nimport saslprep from './saslprep/index';\r\n\r\nclass PDFSecurity {\r\n static generateFileID(info = {}) {\r\n let infoStr = `${info.CreationDate.getTime()}\\n`;\r\n\r\n for (let key in info) {\r\n if (!info.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n infoStr += `${key}: ${info[key].toString()}\\n`;\r\n }\r\n\r\n return wordArrayToBuffer(CryptoJS.MD5(infoStr));\r\n }\r\n\r\n static generateRandomWordArray(bytes) {\r\n return CryptoJS.lib.WordArray.random(bytes);\r\n }\r\n\r\n static create(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n return null;\r\n }\r\n return new PDFSecurity(document, options);\r\n }\r\n\r\n constructor(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n throw new Error('None of owner password and user password is defined.');\r\n }\r\n\r\n this.document = document;\r\n this._setupEncryption(options);\r\n }\r\n\r\n _setupEncryption(options) {\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n case '1.5':\r\n this.version = 2;\r\n break;\r\n case '1.6':\r\n case '1.7':\r\n this.version = 4;\r\n break;\r\n case '1.7ext3':\r\n this.version = 5;\r\n break;\r\n default:\r\n this.version = 1;\r\n break;\r\n }\r\n\r\n const encDict = {\r\n Filter: 'Standard'\r\n };\r\n\r\n switch (this.version) {\r\n case 1:\r\n case 2:\r\n case 4:\r\n this._setupEncryptionV1V2V4(this.version, encDict, options);\r\n break;\r\n case 5:\r\n this._setupEncryptionV5(encDict, options);\r\n break;\r\n }\r\n\r\n this.dictionary = this.document.ref(encDict);\r\n }\r\n\r\n _setupEncryptionV1V2V4(v, encDict, options) {\r\n let r, permissions;\r\n switch (v) {\r\n case 1:\r\n r = 2;\r\n this.keyBits = 40;\r\n permissions = getPermissionsR2(options.permissions);\r\n break;\r\n case 2:\r\n r = 3;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n case 4:\r\n r = 4;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n }\r\n\r\n const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\r\n const paddedOwnerPassword = options.ownerPassword\r\n ? processPasswordR2R3R4(options.ownerPassword)\r\n : paddedUserPassword;\r\n\r\n const ownerPasswordEntry = getOwnerPasswordR2R3R4(\r\n r,\r\n this.keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n );\r\n this.encryptionKey = getEncryptionKeyR2R3R4(\r\n r,\r\n this.keyBits,\r\n this.document._id,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n );\r\n let userPasswordEntry;\r\n if (r === 2) {\r\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\r\n } else {\r\n userPasswordEntry = getUserPasswordR3R4(\r\n this.document._id,\r\n this.encryptionKey\r\n );\r\n }\r\n\r\n encDict.V = v;\r\n if (v >= 2) {\r\n encDict.Length = this.keyBits;\r\n }\r\n if (v === 4) {\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV2',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n }\r\n encDict.R = r;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.P = permissions;\r\n }\r\n\r\n _setupEncryptionV5(encDict, options) {\r\n this.keyBits = 256;\r\n const permissions = getPermissionsR3(options);\r\n\r\n const processedUserPassword = processPasswordR5(options.userPassword);\r\n const processedOwnerPassword = options.ownerPassword\r\n ? processPasswordR5(options.ownerPassword)\r\n : processedUserPassword;\r\n\r\n this.encryptionKey = getEncryptionKeyR5(\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userPasswordEntry = getUserPasswordR5(\r\n processedUserPassword,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userKeySalt = CryptoJS.lib.WordArray.create(\r\n userPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const userEncryptionKeyEntry = getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n this.encryptionKey\r\n );\r\n const ownerPasswordEntry = getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const ownerKeySalt = CryptoJS.lib.WordArray.create(\r\n ownerPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n this.encryptionKey\r\n );\r\n const permsEntry = getEncryptedPermissionsR5(\r\n permissions,\r\n this.encryptionKey,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n\r\n encDict.V = 5;\r\n encDict.Length = this.keyBits;\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV3',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n encDict.R = 5;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\r\n encDict.P = permissions;\r\n encDict.Perms = wordArrayToBuffer(permsEntry);\r\n }\r\n\r\n getEncryptFn(obj, gen) {\r\n let digest;\r\n if (this.version < 5) {\r\n digest = this.encryptionKey\r\n .clone()\r\n .concat(\r\n CryptoJS.lib.WordArray.create(\r\n [\r\n ((obj & 0xff) << 24) |\r\n ((obj & 0xff00) << 8) |\r\n ((obj >> 8) & 0xff00) |\r\n (gen & 0xff),\r\n (gen & 0xff00) << 16\r\n ],\r\n 5\r\n )\r\n );\r\n }\r\n\r\n if (this.version === 1 || this.version === 2) {\r\n let key = CryptoJS.MD5(digest);\r\n key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\r\n return buffer =>\r\n wordArrayToBuffer(\r\n CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\r\n .ciphertext\r\n );\r\n }\r\n\r\n let key;\r\n if (this.version === 4) {\r\n key = CryptoJS.MD5(\r\n digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))\r\n );\r\n } else {\r\n key = this.encryptionKey;\r\n }\r\n\r\n const iv = PDFSecurity.generateRandomWordArray(16);\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7,\r\n iv\r\n };\r\n\r\n return buffer =>\r\n wordArrayToBuffer(\r\n iv\r\n .clone()\r\n .concat(\r\n CryptoJS.AES.encrypt(\r\n CryptoJS.lib.WordArray.create(buffer),\r\n key,\r\n options\r\n ).ciphertext\r\n )\r\n );\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n }\r\n}\r\n\r\nfunction getPermissionsR2(permissionObject = {}) {\r\n let permissions = 0xffffffc0 >> 0;\r\n if (permissionObject.printing) {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getPermissionsR3(permissionObject = {}) {\r\n let permissions = 0xfffff0c0 >> 0;\r\n if (permissionObject.printing === 'lowResolution') {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.printing === 'highResolution') {\r\n permissions |= 0b100000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n if (permissionObject.fillingForms) {\r\n permissions |= 0b000100000000;\r\n }\r\n if (permissionObject.contentAccessibility) {\r\n permissions |= 0b001000000000;\r\n }\r\n if (permissionObject.documentAssembly) {\r\n permissions |= 0b010000000000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getUserPasswordR2(encryptionKey) {\r\n return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\r\n .ciphertext;\r\n}\r\n\r\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\r\n const key = encryptionKey.clone();\r\n let cipher = CryptoJS.MD5(\r\n processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))\r\n );\r\n for (let i = 0; i < 20; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] =\r\n encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\r\n}\r\n\r\nfunction getOwnerPasswordR2R3R4(\r\n r,\r\n keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let digest = paddedOwnerPassword;\r\n let round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n digest = CryptoJS.MD5(digest);\r\n }\r\n\r\n const key = digest.clone();\r\n key.sigBytes = keyBits / 8;\r\n let cipher = paddedUserPassword;\r\n round = r >= 3 ? 20 : 1;\r\n for (let i = 0; i < round; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher;\r\n}\r\n\r\nfunction getEncryptionKeyR2R3R4(\r\n r,\r\n keyBits,\r\n documentId,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n) {\r\n let key = paddedUserPassword\r\n .clone()\r\n .concat(ownerPasswordEntry)\r\n .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\r\n .concat(CryptoJS.lib.WordArray.create(documentId));\r\n const round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n key = CryptoJS.MD5(key);\r\n key.sigBytes = keyBits / 8;\r\n }\r\n return key;\r\n}\r\n\r\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedUserPassword.clone().concat(userKeySalt)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n generateRandomWordArray\r\n) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(validationSalt)\r\n .concat(userPasswordEntry)\r\n )\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(ownerKeySalt)\r\n .concat(userPasswordEntry)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getEncryptionKeyR5(generateRandomWordArray) {\r\n return generateRandomWordArray(32);\r\n}\r\n\r\nfunction getEncryptedPermissionsR5(\r\n permissions,\r\n encryptionKey,\r\n generateRandomWordArray\r\n) {\r\n const cipher = CryptoJS.lib.WordArray.create(\r\n [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\r\n 12\r\n ).concat(generateRandomWordArray(4));\r\n const options = {\r\n mode: CryptoJS.mode.ECB,\r\n padding: CryptoJS.pad.NoPadding\r\n };\r\n return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\r\n}\r\n\r\nfunction processPasswordR2R3R4(password = '') {\r\n const out = new Buffer(32);\r\n const length = password.length;\r\n let index = 0;\r\n while (index < length && index < 32) {\r\n const code = password.charCodeAt(index);\r\n if (code > 0xff) {\r\n throw new Error('Password contains one or more invalid characters.');\r\n }\r\n out[index] = code;\r\n index++;\r\n }\r\n while (index < 32) {\r\n out[index] = PASSWORD_PADDING[index - length];\r\n index++;\r\n }\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction processPasswordR5(password = '') {\r\n password = unescape(encodeURIComponent(saslprep(password)));\r\n const length = Math.min(127, password.length);\r\n const out = new Buffer(length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n out[i] = password.charCodeAt(i);\r\n }\r\n\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction lsbFirstWord(data) {\r\n return (\r\n ((data & 0xff) << 24) |\r\n ((data & 0xff00) << 8) |\r\n ((data >> 8) & 0xff00) |\r\n ((data >> 24) & 0xff)\r\n );\r\n}\r\n\r\nfunction wordArrayToBuffer(wordArray) {\r\n const byteArray = [];\r\n for (let i = 0; i < wordArray.sigBytes; i++) {\r\n byteArray.push(\r\n (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff\r\n );\r\n }\r\n return Buffer.from(byteArray);\r\n}\r\n\r\nconst PASSWORD_PADDING = [\r\n 0x28,\r\n 0xbf,\r\n 0x4e,\r\n 0x5e,\r\n 0x4e,\r\n 0x75,\r\n 0x8a,\r\n 0x41,\r\n 0x64,\r\n 0x00,\r\n 0x4e,\r\n 0x56,\r\n 0xff,\r\n 0xfa,\r\n 0x01,\r\n 0x08,\r\n 0x2e,\r\n 0x2e,\r\n 0x00,\r\n 0xb6,\r\n 0xd0,\r\n 0x68,\r\n 0x3e,\r\n 0x80,\r\n 0x2f,\r\n 0x0c,\r\n 0xa9,\r\n 0xfe,\r\n 0x64,\r\n 0x53,\r\n 0x69,\r\n 0x7a\r\n];\r\n\r\nexport default PDFSecurity;\r\n","import PDFObject from './object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nclass PDFGradient {\r\n constructor(doc) {\r\n this.doc = doc;\r\n this.stops = [];\r\n this.embedded = false;\r\n this.transform = [1, 0, 0, 1, 0, 0];\r\n }\r\n\r\n stop(pos, color, opacity) {\r\n if (opacity == null) {\r\n opacity = 1;\r\n }\r\n color = this.doc._normalizeColor(color);\r\n\r\n if (this.stops.length === 0) {\r\n if (color.length === 3) {\r\n this._colorSpace = 'DeviceRGB';\r\n } else if (color.length === 4) {\r\n this._colorSpace = 'DeviceCMYK';\r\n } else if (color.length === 1) {\r\n this._colorSpace = 'DeviceGray';\r\n } else {\r\n throw new Error('Unknown color space');\r\n }\r\n } else if (\r\n (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\r\n (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\r\n (this._colorSpace === 'DeviceGray' && color.length !== 1)\r\n ) {\r\n throw new Error('All gradient stops must use the same color space');\r\n }\r\n\r\n opacity = Math.max(0, Math.min(1, opacity));\r\n this.stops.push([pos, color, opacity]);\r\n return this;\r\n }\r\n\r\n setTransform(m11, m12, m21, m22, dx, dy) {\r\n this.transform = [m11, m12, m21, m22, dx, dy];\r\n return this;\r\n }\r\n\r\n embed(m) {\r\n let fn;\r\n if (this.stops.length === 0) {\r\n return;\r\n }\r\n this.embedded = true;\r\n this.matrix = m;\r\n\r\n // if the last stop comes before 100%, add a copy at 100%\r\n const last = this.stops[this.stops.length - 1];\r\n if (last[0] < 1) {\r\n this.stops.push([1, last[1], last[2]]);\r\n }\r\n\r\n const bounds = [];\r\n const encode = [];\r\n const stops = [];\r\n\r\n for (let i = 0, stopsLength = this.stops.length - 1; i < stopsLength; i++) {\r\n encode.push(0, 1);\r\n if (i + 2 !== stopsLength) {\r\n bounds.push(this.stops[i + 1][0]);\r\n }\r\n\r\n fn = this.doc.ref({\r\n FunctionType: 2,\r\n Domain: [0, 1],\r\n C0: this.stops[i + 0][1],\r\n C1: this.stops[i + 1][1],\r\n N: 1\r\n });\r\n\r\n stops.push(fn);\r\n fn.end();\r\n }\r\n\r\n // if there are only two stops, we don't need a stitching function\r\n if (stops.length === 1) {\r\n fn = stops[0];\r\n } else {\r\n fn = this.doc.ref({\r\n FunctionType: 3, // stitching function\r\n Domain: [0, 1],\r\n Functions: stops,\r\n Bounds: bounds,\r\n Encode: encode\r\n });\r\n\r\n fn.end();\r\n }\r\n\r\n this.id = `Sh${++this.doc._gradCount}`;\r\n\r\n const shader = this.shader(fn);\r\n shader.end();\r\n\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 2,\r\n Shading: shader,\r\n Matrix: this.matrix.map(v => number(v))\r\n });\r\n\r\n pattern.end();\r\n\r\n if (this.stops.some(stop => stop[2] < 1)) {\r\n let grad = this.opacityGradient();\r\n grad._colorSpace = 'DeviceGray';\r\n\r\n for (let stop of this.stops) {\r\n grad.stop(stop[0], [stop[2]]);\r\n }\r\n\r\n grad = grad.embed(this.matrix);\r\n\r\n const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\r\n\r\n const form = this.doc.ref({\r\n Type: 'XObject',\r\n Subtype: 'Form',\r\n FormType: 1,\r\n BBox: pageBBox,\r\n Group: {\r\n Type: 'Group',\r\n S: 'Transparency',\r\n CS: 'DeviceGray'\r\n },\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: grad\r\n }\r\n }\r\n });\r\n\r\n form.write('/Pattern cs /Sh1 scn');\r\n form.end(`${pageBBox.join(' ')} re f`);\r\n\r\n const gstate = this.doc.ref({\r\n Type: 'ExtGState',\r\n SMask: {\r\n Type: 'Mask',\r\n S: 'Luminosity',\r\n G: form\r\n }\r\n });\r\n\r\n gstate.end();\r\n\r\n const opacityPattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1,\r\n PaintType: 1,\r\n TilingType: 2,\r\n BBox: pageBBox,\r\n XStep: pageBBox[2],\r\n YStep: pageBBox[3],\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: pattern\r\n },\r\n ExtGState: {\r\n Gs1: gstate\r\n }\r\n }\r\n });\r\n\r\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\r\n opacityPattern.end(`${pageBBox.join(' ')} re f`);\r\n\r\n this.doc.page.patterns[this.id] = opacityPattern;\r\n } else {\r\n this.doc.page.patterns[this.id] = pattern;\r\n }\r\n\r\n return pattern;\r\n }\r\n\r\n apply(op) {\r\n // apply gradient transform to existing document ctm\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = this.transform;\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n\r\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\r\n this.embed(m);\r\n }\r\n return this.doc.addContent(`/${this.id} ${op}`);\r\n }\r\n}\r\n\r\nclass PDFLinearGradient extends PDFGradient {\r\n constructor(doc, x1, y1, x2, y2) {\r\n super(doc);\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 2,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.x2, this.y2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\r\n }\r\n}\r\n\r\nclass PDFRadialGradient extends PDFGradient {\r\n constructor(doc, x1, y1, r1, x2, y2, r2) {\r\n super(doc);\r\n this.doc = doc;\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.r1 = r1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n this.r2 = r2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 3,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFRadialGradient(\r\n this.doc,\r\n this.x1,\r\n this.y1,\r\n this.r1,\r\n this.x2,\r\n this.y2,\r\n this.r2\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\r\n","import Gradient from '../gradient';\r\n\r\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\r\n\r\nexport default {\r\n initColor() {\r\n // The opacity dictionaries\r\n this._opacityRegistry = {};\r\n this._opacityCount = 0;\r\n return (this._gradCount = 0);\r\n },\r\n\r\n _normalizeColor(color) {\r\n if (color instanceof PDFGradient) {\r\n return color;\r\n }\r\n\r\n if (typeof color === 'string') {\r\n if (color.charAt(0) === '#') {\r\n if (color.length === 4) {\r\n color = color.replace(\r\n /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\r\n '#$1$1$2$2$3$3'\r\n );\r\n }\r\n const hex = parseInt(color.slice(1), 16);\r\n color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\r\n } else if (namedColors[color]) {\r\n color = namedColors[color];\r\n }\r\n }\r\n\r\n if (Array.isArray(color)) {\r\n // RGB\r\n if (color.length === 3) {\r\n color = color.map(part => part / 255);\r\n // CMYK\r\n } else if (color.length === 4) {\r\n color = color.map(part => part / 100);\r\n }\r\n return color;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n _setColor(color, stroke) {\r\n color = this._normalizeColor(color);\r\n if (!color) {\r\n return false;\r\n }\r\n\r\n const op = stroke ? 'SCN' : 'scn';\r\n\r\n if (color instanceof PDFGradient) {\r\n this._setColorSpace('Pattern', stroke);\r\n color.apply(op);\r\n } else {\r\n const space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\r\n this._setColorSpace(space, stroke);\r\n\r\n color = color.join(' ');\r\n this.addContent(`${color} ${op}`);\r\n }\r\n\r\n return true;\r\n },\r\n\r\n _setColorSpace(space, stroke) {\r\n const op = stroke ? 'CS' : 'cs';\r\n return this.addContent(`/${space} ${op}`);\r\n },\r\n\r\n fillColor(color, opacity) {\r\n const set = this._setColor(color, false);\r\n if (set) {\r\n this.fillOpacity(opacity);\r\n }\r\n\r\n // save this for text wrapper, which needs to reset\r\n // the fill color on new pages\r\n this._fillColor = [color, opacity];\r\n return this;\r\n },\r\n\r\n strokeColor(color, opacity) {\r\n const set = this._setColor(color, true);\r\n if (set) {\r\n this.strokeOpacity(opacity);\r\n }\r\n return this;\r\n },\r\n\r\n opacity(opacity) {\r\n this._doOpacity(opacity, opacity);\r\n return this;\r\n },\r\n\r\n fillOpacity(opacity) {\r\n this._doOpacity(opacity, null);\r\n return this;\r\n },\r\n\r\n strokeOpacity(opacity) {\r\n this._doOpacity(null, opacity);\r\n return this;\r\n },\r\n\r\n _doOpacity(fillOpacity, strokeOpacity) {\r\n let dictionary, name;\r\n if (fillOpacity == null && strokeOpacity == null) {\r\n return;\r\n }\r\n\r\n if (fillOpacity != null) {\r\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\r\n }\r\n if (strokeOpacity != null) {\r\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\r\n }\r\n const key = `${fillOpacity}_${strokeOpacity}`;\r\n\r\n if (this._opacityRegistry[key]) {\r\n [dictionary, name] = this._opacityRegistry[key];\r\n } else {\r\n dictionary = { Type: 'ExtGState' };\r\n\r\n if (fillOpacity != null) {\r\n dictionary.ca = fillOpacity;\r\n }\r\n if (strokeOpacity != null) {\r\n dictionary.CA = strokeOpacity;\r\n }\r\n\r\n dictionary = this.ref(dictionary);\r\n dictionary.end();\r\n const id = ++this._opacityCount;\r\n name = `Gs${id}`;\r\n this._opacityRegistry[key] = [dictionary, name];\r\n }\r\n\r\n this.page.ext_gstates[name] = dictionary;\r\n return this.addContent(`/${name} gs`);\r\n },\r\n\r\n linearGradient(x1, y1, x2, y2) {\r\n return new PDFLinearGradient(this, x1, y1, x2, y2);\r\n },\r\n\r\n radialGradient(x1, y1, r1, x2, y2, r2) {\r\n return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\r\n }\r\n};\r\n\r\nvar namedColors = {\r\n aliceblue: [240, 248, 255],\r\n antiquewhite: [250, 235, 215],\r\n aqua: [0, 255, 255],\r\n aquamarine: [127, 255, 212],\r\n azure: [240, 255, 255],\r\n beige: [245, 245, 220],\r\n bisque: [255, 228, 196],\r\n black: [0, 0, 0],\r\n blanchedalmond: [255, 235, 205],\r\n blue: [0, 0, 255],\r\n blueviolet: [138, 43, 226],\r\n brown: [165, 42, 42],\r\n burlywood: [222, 184, 135],\r\n cadetblue: [95, 158, 160],\r\n chartreuse: [127, 255, 0],\r\n chocolate: [210, 105, 30],\r\n coral: [255, 127, 80],\r\n cornflowerblue: [100, 149, 237],\r\n cornsilk: [255, 248, 220],\r\n crimson: [220, 20, 60],\r\n cyan: [0, 255, 255],\r\n darkblue: [0, 0, 139],\r\n darkcyan: [0, 139, 139],\r\n darkgoldenrod: [184, 134, 11],\r\n darkgray: [169, 169, 169],\r\n darkgreen: [0, 100, 0],\r\n darkgrey: [169, 169, 169],\r\n darkkhaki: [189, 183, 107],\r\n darkmagenta: [139, 0, 139],\r\n darkolivegreen: [85, 107, 47],\r\n darkorange: [255, 140, 0],\r\n darkorchid: [153, 50, 204],\r\n darkred: [139, 0, 0],\r\n darksalmon: [233, 150, 122],\r\n darkseagreen: [143, 188, 143],\r\n darkslateblue: [72, 61, 139],\r\n darkslategray: [47, 79, 79],\r\n darkslategrey: [47, 79, 79],\r\n darkturquoise: [0, 206, 209],\r\n darkviolet: [148, 0, 211],\r\n deeppink: [255, 20, 147],\r\n deepskyblue: [0, 191, 255],\r\n dimgray: [105, 105, 105],\r\n dimgrey: [105, 105, 105],\r\n dodgerblue: [30, 144, 255],\r\n firebrick: [178, 34, 34],\r\n floralwhite: [255, 250, 240],\r\n forestgreen: [34, 139, 34],\r\n fuchsia: [255, 0, 255],\r\n gainsboro: [220, 220, 220],\r\n ghostwhite: [248, 248, 255],\r\n gold: [255, 215, 0],\r\n goldenrod: [218, 165, 32],\r\n gray: [128, 128, 128],\r\n grey: [128, 128, 128],\r\n green: [0, 128, 0],\r\n greenyellow: [173, 255, 47],\r\n honeydew: [240, 255, 240],\r\n hotpink: [255, 105, 180],\r\n indianred: [205, 92, 92],\r\n indigo: [75, 0, 130],\r\n ivory: [255, 255, 240],\r\n khaki: [240, 230, 140],\r\n lavender: [230, 230, 250],\r\n lavenderblush: [255, 240, 245],\r\n lawngreen: [124, 252, 0],\r\n lemonchiffon: [255, 250, 205],\r\n lightblue: [173, 216, 230],\r\n lightcoral: [240, 128, 128],\r\n lightcyan: [224, 255, 255],\r\n lightgoldenrodyellow: [250, 250, 210],\r\n lightgray: [211, 211, 211],\r\n lightgreen: [144, 238, 144],\r\n lightgrey: [211, 211, 211],\r\n lightpink: [255, 182, 193],\r\n lightsalmon: [255, 160, 122],\r\n lightseagreen: [32, 178, 170],\r\n lightskyblue: [135, 206, 250],\r\n lightslategray: [119, 136, 153],\r\n lightslategrey: [119, 136, 153],\r\n lightsteelblue: [176, 196, 222],\r\n lightyellow: [255, 255, 224],\r\n lime: [0, 255, 0],\r\n limegreen: [50, 205, 50],\r\n linen: [250, 240, 230],\r\n magenta: [255, 0, 255],\r\n maroon: [128, 0, 0],\r\n mediumaquamarine: [102, 205, 170],\r\n mediumblue: [0, 0, 205],\r\n mediumorchid: [186, 85, 211],\r\n mediumpurple: [147, 112, 219],\r\n mediumseagreen: [60, 179, 113],\r\n mediumslateblue: [123, 104, 238],\r\n mediumspringgreen: [0, 250, 154],\r\n mediumturquoise: [72, 209, 204],\r\n mediumvioletred: [199, 21, 133],\r\n midnightblue: [25, 25, 112],\r\n mintcream: [245, 255, 250],\r\n mistyrose: [255, 228, 225],\r\n moccasin: [255, 228, 181],\r\n navajowhite: [255, 222, 173],\r\n navy: [0, 0, 128],\r\n oldlace: [253, 245, 230],\r\n olive: [128, 128, 0],\r\n olivedrab: [107, 142, 35],\r\n orange: [255, 165, 0],\r\n orangered: [255, 69, 0],\r\n orchid: [218, 112, 214],\r\n palegoldenrod: [238, 232, 170],\r\n palegreen: [152, 251, 152],\r\n paleturquoise: [175, 238, 238],\r\n palevioletred: [219, 112, 147],\r\n papayawhip: [255, 239, 213],\r\n peachpuff: [255, 218, 185],\r\n peru: [205, 133, 63],\r\n pink: [255, 192, 203],\r\n plum: [221, 160, 221],\r\n powderblue: [176, 224, 230],\r\n purple: [128, 0, 128],\r\n red: [255, 0, 0],\r\n rosybrown: [188, 143, 143],\r\n royalblue: [65, 105, 225],\r\n saddlebrown: [139, 69, 19],\r\n salmon: [250, 128, 114],\r\n sandybrown: [244, 164, 96],\r\n seagreen: [46, 139, 87],\r\n seashell: [255, 245, 238],\r\n sienna: [160, 82, 45],\r\n silver: [192, 192, 192],\r\n skyblue: [135, 206, 235],\r\n slateblue: [106, 90, 205],\r\n slategray: [112, 128, 144],\r\n slategrey: [112, 128, 144],\r\n snow: [255, 250, 250],\r\n springgreen: [0, 255, 127],\r\n steelblue: [70, 130, 180],\r\n tan: [210, 180, 140],\r\n teal: [0, 128, 128],\r\n thistle: [216, 191, 216],\r\n tomato: [255, 99, 71],\r\n turquoise: [64, 224, 208],\r\n violet: [238, 130, 238],\r\n wheat: [245, 222, 179],\r\n white: [255, 255, 255],\r\n whitesmoke: [245, 245, 245],\r\n yellow: [255, 255, 0],\r\n yellowgreen: [154, 205, 50]\r\n};\r\n","let cx, cy, px, py, sx, sy;\r\n\r\ncx = cy = px = py = sx = sy = 0;\r\n\r\nconst parameters = {\r\n A: 7,\r\n a: 7,\r\n C: 6,\r\n c: 6,\r\n H: 1,\r\n h: 1,\r\n L: 2,\r\n l: 2,\r\n M: 2,\r\n m: 2,\r\n Q: 4,\r\n q: 4,\r\n S: 4,\r\n s: 4,\r\n T: 2,\r\n t: 2,\r\n V: 1,\r\n v: 1,\r\n Z: 0,\r\n z: 0\r\n};\r\n\r\nconst parse = function(path) {\r\n let cmd;\r\n const ret = [];\r\n let args = [];\r\n let curArg = '';\r\n let foundDecimal = false;\r\n let params = 0;\r\n\r\n for (let c of path) {\r\n if (parameters[c] != null) {\r\n params = parameters[c];\r\n if (cmd) {\r\n // save existing command\r\n if (curArg.length > 0) {\r\n args[args.length] = +curArg;\r\n }\r\n ret[ret.length] = { cmd, args };\r\n\r\n args = [];\r\n curArg = '';\r\n foundDecimal = false;\r\n }\r\n\r\n cmd = c;\r\n } else if (\r\n [' ', ','].includes(c) ||\r\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\r\n (c === '.' && foundDecimal)\r\n ) {\r\n if (curArg.length === 0) {\r\n continue;\r\n }\r\n\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n\r\n foundDecimal = c === '.';\r\n\r\n // fix for negative numbers or repeated decimals with no delimeter between commands\r\n curArg = ['-', '.'].includes(c) ? c : '';\r\n } else {\r\n curArg += c;\r\n if (c === '.') {\r\n foundDecimal = true;\r\n }\r\n }\r\n }\r\n\r\n // add the last command\r\n if (curArg.length > 0) {\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n }\r\n\r\n ret[ret.length] = { cmd, args };\r\n\r\n return ret;\r\n};\r\n\r\nconst apply = function(commands, doc) {\r\n // current point, control point, and subpath starting point\r\n cx = cy = px = py = sx = sy = 0;\r\n\r\n // run the commands\r\n for (let i = 0; i < commands.length; i++) {\r\n const c = commands[i];\r\n if (typeof runners[c.cmd] === 'function') {\r\n runners[c.cmd](doc, c.args);\r\n }\r\n }\r\n};\r\n\r\nconst runners = {\r\n M(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n m(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n C(doc, a) {\r\n cx = a[4];\r\n cy = a[5];\r\n px = a[2];\r\n py = a[3];\r\n return doc.bezierCurveTo(...(a || []));\r\n },\r\n\r\n c(doc, a) {\r\n doc.bezierCurveTo(\r\n a[0] + cx,\r\n a[1] + cy,\r\n a[2] + cx,\r\n a[3] + cy,\r\n a[4] + cx,\r\n a[5] + cy\r\n );\r\n px = cx + a[2];\r\n py = cy + a[3];\r\n cx += a[4];\r\n return (cy += a[5]);\r\n },\r\n\r\n S(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n return (cy = a[3]);\r\n },\r\n\r\n s(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(\r\n cx - (px - cx),\r\n cy - (py - cy),\r\n cx + a[0],\r\n cy + a[1],\r\n cx + a[2],\r\n cy + a[3]\r\n );\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n Q(doc, a) {\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n cy = a[3];\r\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\r\n },\r\n\r\n q(doc, a) {\r\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n T(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, a[0], a[1]);\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n cx = a[0];\r\n return (cy = a[1]);\r\n },\r\n\r\n t(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\r\n cx += a[0];\r\n return (cy += a[1]);\r\n },\r\n\r\n A(doc, a) {\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n a(doc, a) {\r\n a[5] += cx;\r\n a[6] += cy;\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n L(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n l(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n H(doc, a) {\r\n cx = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n h(doc, a) {\r\n cx += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n V(doc, a) {\r\n cy = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n v(doc, a) {\r\n cy += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n Z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n },\r\n\r\n z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n }\r\n};\r\n\r\nconst solveArc = function(doc, x, y, coords) {\r\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\r\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\r\n\r\n for (let seg of segs) {\r\n const bez = segmentToBezier(...(seg || []));\r\n doc.bezierCurveTo(...(bez || []));\r\n }\r\n};\r\n\r\n// from Inkscape svgtopdf, thanks!\r\nconst arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\r\n const th = rotateX * (Math.PI / 180);\r\n const sin_th = Math.sin(th);\r\n const cos_th = Math.cos(th);\r\n rx = Math.abs(rx);\r\n ry = Math.abs(ry);\r\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\r\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\r\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\r\n if (pl > 1) {\r\n pl = Math.sqrt(pl);\r\n rx *= pl;\r\n ry *= pl;\r\n }\r\n\r\n const a00 = cos_th / rx;\r\n const a01 = sin_th / rx;\r\n const a10 = -sin_th / ry;\r\n const a11 = cos_th / ry;\r\n const x0 = a00 * ox + a01 * oy;\r\n const y0 = a10 * ox + a11 * oy;\r\n const x1 = a00 * x + a01 * y;\r\n const y1 = a10 * x + a11 * y;\r\n\r\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\r\n let sfactor_sq = 1 / d - 0.25;\r\n if (sfactor_sq < 0) {\r\n sfactor_sq = 0;\r\n }\r\n let sfactor = Math.sqrt(sfactor_sq);\r\n if (sweep === large) {\r\n sfactor = -sfactor;\r\n }\r\n\r\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\r\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\r\n\r\n const th0 = Math.atan2(y0 - yc, x0 - xc);\r\n const th1 = Math.atan2(y1 - yc, x1 - xc);\r\n\r\n let th_arc = th1 - th0;\r\n if (th_arc < 0 && sweep === 1) {\r\n th_arc += 2 * Math.PI;\r\n } else if (th_arc > 0 && sweep === 0) {\r\n th_arc -= 2 * Math.PI;\r\n }\r\n\r\n const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\r\n const result = [];\r\n\r\n for (let i = 0; i < segments; i++) {\r\n const th2 = th0 + (i * th_arc) / segments;\r\n const th3 = th0 + ((i + 1) * th_arc) / segments;\r\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\r\n const a00 = cos_th * rx;\r\n const a01 = -sin_th * ry;\r\n const a10 = sin_th * rx;\r\n const a11 = cos_th * ry;\r\n\r\n const th_half = 0.5 * (th1 - th0);\r\n const t =\r\n ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\r\n Math.sin(th_half);\r\n const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\r\n const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\r\n const x3 = cx + Math.cos(th1);\r\n const y3 = cy + Math.sin(th1);\r\n const x2 = x3 + t * Math.sin(th1);\r\n const y2 = y3 - t * Math.cos(th1);\r\n\r\n return [\r\n a00 * x1 + a01 * y1,\r\n a10 * x1 + a11 * y1,\r\n a00 * x2 + a01 * y2,\r\n a10 * x2 + a11 * y2,\r\n a00 * x3 + a01 * y3,\r\n a10 * x3 + a11 * y3\r\n ];\r\n};\r\n\r\nclass SVGPath {\r\n static apply(doc, path) {\r\n const commands = parse(path);\r\n apply(commands, doc);\r\n }\r\n}\r\n\r\nexport default SVGPath;\r\n","import SVGPath from '../path';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\n// This constant is used to approximate a symmetrical arc using a cubic\r\n// Bezier curve.\r\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\r\nexport default {\r\n initVector() {\r\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\r\n return (this._ctmStack = []);\r\n },\r\n\r\n save() {\r\n this._ctmStack.push(this._ctm.slice());\r\n // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\r\n return this.addContent('q');\r\n },\r\n\r\n restore() {\r\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\r\n return this.addContent('Q');\r\n },\r\n\r\n closePath() {\r\n return this.addContent('h');\r\n },\r\n\r\n lineWidth(w) {\r\n return this.addContent(`${number(w)} w`);\r\n },\r\n\r\n _CAP_STYLES: {\r\n BUTT: 0,\r\n ROUND: 1,\r\n SQUARE: 2\r\n },\r\n\r\n lineCap(c) {\r\n if (typeof c === 'string') {\r\n c = this._CAP_STYLES[c.toUpperCase()];\r\n }\r\n return this.addContent(`${c} J`);\r\n },\r\n\r\n _JOIN_STYLES: {\r\n MITER: 0,\r\n ROUND: 1,\r\n BEVEL: 2\r\n },\r\n\r\n lineJoin(j) {\r\n if (typeof j === 'string') {\r\n j = this._JOIN_STYLES[j.toUpperCase()];\r\n }\r\n return this.addContent(`${j} j`);\r\n },\r\n\r\n miterLimit(m) {\r\n return this.addContent(`${number(m)} M`);\r\n },\r\n\r\n dash(length, options = {}) {\r\n const originalLength = length;\r\n if (!Array.isArray(length)) {\r\n length = [length, options.space || length];\r\n }\r\n\r\n const valid = length.every(x => Number.isFinite(x) && x > 0);\r\n if(!valid) {\r\n throw new Error(`dash(${JSON.stringify(originalLength)}, ${JSON.stringify(options)}) invalid, lengths must be numeric and greater than zero`);\r\n }\r\n\r\n length = length.map(number).join(' ');\r\n return this.addContent(`[${length}] ${number(options.phase || 0)} d`);\r\n },\r\n\r\n undash() {\r\n return this.addContent('[] 0 d');\r\n },\r\n\r\n moveTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} m`);\r\n },\r\n\r\n lineTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} l`);\r\n },\r\n\r\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n return this.addContent(\r\n `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\r\n x\r\n )} ${number(y)} c`\r\n );\r\n },\r\n\r\n quadraticCurveTo(cpx, cpy, x, y) {\r\n return this.addContent(\r\n `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`\r\n );\r\n },\r\n\r\n rect(x, y, w, h) {\r\n return this.addContent(\r\n `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`\r\n );\r\n },\r\n\r\n roundedRect(x, y, w, h, r) {\r\n if (r == null) {\r\n r = 0;\r\n }\r\n r = Math.min(r, 0.5 * w, 0.5 * h);\r\n\r\n // amount to inset control points from corners (see `ellipse`)\r\n const c = r * (1.0 - KAPPA);\r\n\r\n this.moveTo(x + r, y);\r\n this.lineTo(x + w - r, y);\r\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\r\n this.lineTo(x + w, y + h - r);\r\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\r\n this.lineTo(x + r, y + h);\r\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\r\n this.lineTo(x, y + r);\r\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\r\n return this.closePath();\r\n },\r\n\r\n ellipse(x, y, r1, r2) {\r\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\r\n if (r2 == null) {\r\n r2 = r1;\r\n }\r\n x -= r1;\r\n y -= r2;\r\n const ox = r1 * KAPPA;\r\n const oy = r2 * KAPPA;\r\n const xe = x + r1 * 2;\r\n const ye = y + r2 * 2;\r\n const xm = x + r1;\r\n const ym = y + r2;\r\n\r\n this.moveTo(x, ym);\r\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\r\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\r\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\r\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\r\n return this.closePath();\r\n },\r\n\r\n circle(x, y, radius) {\r\n return this.ellipse(x, y, radius);\r\n },\r\n\r\n arc(x, y, radius, startAngle, endAngle, anticlockwise) {\r\n if (anticlockwise == null) {\r\n anticlockwise = false;\r\n }\r\n const TWO_PI = 2.0 * Math.PI;\r\n const HALF_PI = 0.5 * Math.PI;\r\n\r\n let deltaAng = endAngle - startAngle;\r\n\r\n if (Math.abs(deltaAng) > TWO_PI) {\r\n // draw only full circle if more than that is specified\r\n deltaAng = TWO_PI;\r\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\r\n // necessary to flip direction of rendering\r\n const dir = anticlockwise ? -1 : 1;\r\n deltaAng = dir * TWO_PI + deltaAng;\r\n }\r\n\r\n const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\r\n const segAng = deltaAng / numSegs;\r\n const handleLen = (segAng / HALF_PI) * KAPPA * radius;\r\n let curAng = startAngle;\r\n\r\n // component distances between anchor point and control point\r\n let deltaCx = -Math.sin(curAng) * handleLen;\r\n let deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // anchor point\r\n let ax = x + Math.cos(curAng) * radius;\r\n let ay = y + Math.sin(curAng) * radius;\r\n\r\n // calculate and render segments\r\n this.moveTo(ax, ay);\r\n\r\n for (let segIdx = 0; segIdx < numSegs; segIdx++) {\r\n // starting control point\r\n const cp1x = ax + deltaCx;\r\n const cp1y = ay + deltaCy;\r\n\r\n // step angle\r\n curAng += segAng;\r\n\r\n // next anchor point\r\n ax = x + Math.cos(curAng) * radius;\r\n ay = y + Math.sin(curAng) * radius;\r\n\r\n // next control point delta\r\n deltaCx = -Math.sin(curAng) * handleLen;\r\n deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // ending control point\r\n const cp2x = ax - deltaCx;\r\n const cp2y = ay - deltaCy;\r\n\r\n // render segment\r\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n polygon(...points) {\r\n this.moveTo(...(points.shift() || []));\r\n for (let point of points) {\r\n this.lineTo(...(point || []));\r\n }\r\n return this.closePath();\r\n },\r\n\r\n path(path) {\r\n SVGPath.apply(this, path);\r\n return this;\r\n },\r\n\r\n _windingRule(rule) {\r\n if (/even-?odd/.test(rule)) {\r\n return '*';\r\n }\r\n\r\n return '';\r\n },\r\n\r\n fill(color, rule) {\r\n if (/(even-?odd)|(non-?zero)/.test(color)) {\r\n rule = color;\r\n color = null;\r\n }\r\n\r\n if (color) {\r\n this.fillColor(color);\r\n }\r\n return this.addContent(`f${this._windingRule(rule)}`);\r\n },\r\n\r\n stroke(color) {\r\n if (color) {\r\n this.strokeColor(color);\r\n }\r\n return this.addContent('S');\r\n },\r\n\r\n fillAndStroke(fillColor, strokeColor, rule) {\r\n if (strokeColor == null) {\r\n strokeColor = fillColor;\r\n }\r\n const isFillRule = /(even-?odd)|(non-?zero)/;\r\n if (isFillRule.test(fillColor)) {\r\n rule = fillColor;\r\n fillColor = null;\r\n }\r\n\r\n if (isFillRule.test(strokeColor)) {\r\n rule = strokeColor;\r\n strokeColor = fillColor;\r\n }\r\n\r\n if (fillColor) {\r\n this.fillColor(fillColor);\r\n this.strokeColor(strokeColor);\r\n }\r\n\r\n return this.addContent(`B${this._windingRule(rule)}`);\r\n },\r\n\r\n clip(rule) {\r\n return this.addContent(`W${this._windingRule(rule)} n`);\r\n },\r\n\r\n transform(m11, m12, m21, m22, dx, dy) {\r\n // keep track of the current transformation matrix\r\n const m = this._ctm;\r\n const [m0, m1, m2, m3, m4, m5] = m;\r\n m[0] = m0 * m11 + m2 * m12;\r\n m[1] = m1 * m11 + m3 * m12;\r\n m[2] = m0 * m21 + m2 * m22;\r\n m[3] = m1 * m21 + m3 * m22;\r\n m[4] = m0 * dx + m2 * dy + m4;\r\n m[5] = m1 * dx + m3 * dy + m5;\r\n\r\n const values = [m11, m12, m21, m22, dx, dy].map(v => number(v)).join(' ');\r\n return this.addContent(`${values} cm`);\r\n },\r\n\r\n translate(x, y) {\r\n return this.transform(1, 0, 0, 1, x, y);\r\n },\r\n\r\n rotate(angle, options = {}) {\r\n let y;\r\n const rad = (angle * Math.PI) / 180;\r\n const cos = Math.cos(rad);\r\n const sin = Math.sin(rad);\r\n let x = (y = 0);\r\n\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n const x1 = x * cos - y * sin;\r\n const y1 = x * sin + y * cos;\r\n x -= x1;\r\n y -= y1;\r\n }\r\n\r\n return this.transform(cos, sin, -sin, cos, x, y);\r\n },\r\n\r\n scale(xFactor, yFactor, options = {}) {\r\n let y;\r\n if (yFactor == null) {\r\n yFactor = xFactor;\r\n }\r\n if (typeof yFactor === 'object') {\r\n options = yFactor;\r\n yFactor = xFactor;\r\n }\r\n\r\n let x = (y = 0);\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n x -= xFactor * x;\r\n y -= yFactor * y;\r\n }\r\n\r\n return this.transform(xFactor, 0, 0, yFactor, x, y);\r\n }\r\n};\r\n","import fs from 'fs';\r\n\r\nconst WIN_ANSI_MAP = {\r\n 402: 131,\r\n 8211: 150,\r\n 8212: 151,\r\n 8216: 145,\r\n 8217: 146,\r\n 8218: 130,\r\n 8220: 147,\r\n 8221: 148,\r\n 8222: 132,\r\n 8224: 134,\r\n 8225: 135,\r\n 8226: 149,\r\n 8230: 133,\r\n 8364: 128,\r\n 8240: 137,\r\n 8249: 139,\r\n 8250: 155,\r\n 710: 136,\r\n 8482: 153,\r\n 338: 140,\r\n 339: 156,\r\n 732: 152,\r\n 352: 138,\r\n 353: 154,\r\n 376: 159,\r\n 381: 142,\r\n 382: 158\r\n};\r\n\r\nconst characters = `\\\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n \r\nspace exclam quotedbl numbersign\r\ndollar percent ampersand quotesingle\r\nparenleft parenright asterisk plus\r\ncomma hyphen period slash\r\nzero one two three\r\nfour five six seven\r\neight nine colon semicolon\r\nless equal greater question\r\n \r\nat A B C\r\nD E F G\r\nH I J K\r\nL M N O\r\nP Q R S\r\nT U V W\r\nX Y Z bracketleft\r\nbackslash bracketright asciicircum underscore\r\n \r\ngrave a b c\r\nd e f g\r\nh i j k\r\nl m n o\r\np q r s\r\nt u v w\r\nx y z braceleft\r\nbar braceright asciitilde .notdef\r\n \r\nEuro .notdef quotesinglbase florin\r\nquotedblbase ellipsis dagger daggerdbl\r\ncircumflex perthousand Scaron guilsinglleft\r\nOE .notdef Zcaron .notdef\r\n.notdef quoteleft quoteright quotedblleft\r\nquotedblright bullet endash emdash\r\ntilde trademark scaron guilsinglright\r\noe .notdef zcaron ydieresis\r\n \r\nspace exclamdown cent sterling\r\ncurrency yen brokenbar section\r\ndieresis copyright ordfeminine guillemotleft\r\nlogicalnot hyphen registered macron\r\ndegree plusminus twosuperior threesuperior\r\nacute mu paragraph periodcentered\r\ncedilla onesuperior ordmasculine guillemotright\r\nonequarter onehalf threequarters questiondown\r\n \r\nAgrave Aacute Acircumflex Atilde\r\nAdieresis Aring AE Ccedilla\r\nEgrave Eacute Ecircumflex Edieresis\r\nIgrave Iacute Icircumflex Idieresis\r\nEth Ntilde Ograve Oacute\r\nOcircumflex Otilde Odieresis multiply\r\nOslash Ugrave Uacute Ucircumflex\r\nUdieresis Yacute Thorn germandbls\r\n \r\nagrave aacute acircumflex atilde\r\nadieresis aring ae ccedilla\r\negrave eacute ecircumflex edieresis\r\nigrave iacute icircumflex idieresis\r\neth ntilde ograve oacute\r\nocircumflex otilde odieresis divide\r\noslash ugrave uacute ucircumflex\r\nudieresis yacute thorn ydieresis\\\r\n`.split(/\\s+/);\r\n\r\nclass AFMFont {\r\n static open(filename) {\r\n return new AFMFont(fs.readFileSync(filename, 'utf8'));\r\n }\r\n\r\n constructor(contents) {\r\n this.contents = contents;\r\n this.attributes = {};\r\n this.glyphWidths = {};\r\n this.boundingBoxes = {};\r\n this.kernPairs = {};\r\n\r\n this.parse();\r\n // todo: remove charWidths since appears to not be used\r\n this.charWidths = new Array(256);\r\n for (let char = 0; char <= 255; char++) {\r\n this.charWidths[char] = this.glyphWidths[characters[char]];\r\n }\r\n\r\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(e => +e);\r\n this.ascender = +(this.attributes['Ascender'] || 0);\r\n this.descender = +(this.attributes['Descender'] || 0);\r\n this.xHeight = +(this.attributes['XHeight'] || 0);\r\n this.capHeight = +(this.attributes['CapHeight'] || 0);\r\n this.lineGap =\r\n this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\r\n }\r\n\r\n parse() {\r\n let section = '';\r\n for (let line of this.contents.split('\\n')) {\r\n var match;\r\n var a;\r\n if ((match = line.match(/^Start(\\w+)/))) {\r\n section = match[1];\r\n continue;\r\n } else if ((match = line.match(/^End(\\w+)/))) {\r\n section = '';\r\n continue;\r\n }\r\n\r\n switch (section) {\r\n case 'FontMetrics':\r\n match = line.match(/(^\\w+)\\s+(.*)/);\r\n var key = match[1];\r\n var value = match[2];\r\n\r\n if ((a = this.attributes[key])) {\r\n if (!Array.isArray(a)) {\r\n a = this.attributes[key] = [a];\r\n }\r\n a.push(value);\r\n } else {\r\n this.attributes[key] = value;\r\n }\r\n break;\r\n\r\n case 'CharMetrics':\r\n if (!/^CH?\\s/.test(line)) {\r\n continue;\r\n }\r\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\r\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\r\n break;\r\n\r\n case 'KernPairs':\r\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\r\n if (match) {\r\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n encodeText(text) {\r\n const res = [];\r\n for (let i = 0, len = text.length; i < len; i++) {\r\n let char = text.charCodeAt(i);\r\n char = WIN_ANSI_MAP[char] || char;\r\n res.push(char.toString(16));\r\n }\r\n\r\n return res;\r\n }\r\n\r\n glyphsForString(string) {\r\n const glyphs = [];\r\n\r\n for (let i = 0, len = string.length; i < len; i++) {\r\n const charCode = string.charCodeAt(i);\r\n glyphs.push(this.characterToGlyph(charCode));\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n characterToGlyph(character) {\r\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\r\n }\r\n\r\n widthOfGlyph(glyph) {\r\n return this.glyphWidths[glyph] || 0;\r\n }\r\n\r\n getKernPair(left, right) {\r\n return this.kernPairs[left + '\\0' + right] || 0;\r\n }\r\n\r\n advancesForGlyphs(glyphs) {\r\n const advances = [];\r\n\r\n for (let index = 0; index < glyphs.length; index++) {\r\n const left = glyphs[index];\r\n const right = glyphs[index + 1];\r\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\r\n }\r\n\r\n return advances;\r\n }\r\n}\r\n\r\nexport default AFMFont;\r\n","class PDFFont {\r\n constructor() {}\r\n\r\n encode() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n widthOfString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n ref() {\r\n return this.dictionary != null\r\n ? this.dictionary\r\n : (this.dictionary = this.document.ref());\r\n }\r\n\r\n finalize() {\r\n if (this.embedded || this.dictionary == null) {\r\n return;\r\n }\r\n\r\n this.embed();\r\n return (this.embedded = true);\r\n }\r\n\r\n embed() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n lineHeight(size, includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n const gap = includeGap ? this.lineGap : 0;\r\n return ((this.ascender + gap - this.descender) / 1000) * size;\r\n }\r\n}\r\n\r\nexport default PDFFont;\r\n","import AFMFont from './afm';\r\nimport PDFFont from '../font';\r\nimport fs from 'fs';\r\n\r\n// This insanity is so bundlers can inline the font files\r\nconst STANDARD_FONTS = {\r\n Courier() {\r\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\r\n },\r\n 'Courier-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\r\n },\r\n 'Courier-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\r\n },\r\n 'Courier-BoldOblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\r\n },\r\n Helvetica() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\r\n },\r\n 'Helvetica-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\r\n },\r\n 'Helvetica-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\r\n },\r\n 'Helvetica-BoldOblique'() {\r\n return fs.readFileSync(\r\n __dirname + '/data/Helvetica-BoldOblique.afm',\r\n 'utf8'\r\n );\r\n },\r\n 'Times-Roman'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\r\n },\r\n 'Times-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\r\n },\r\n 'Times-Italic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\r\n },\r\n 'Times-BoldItalic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\r\n },\r\n Symbol() {\r\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\r\n },\r\n ZapfDingbats() {\r\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\r\n }\r\n};\r\n\r\nclass StandardFont extends PDFFont {\r\n constructor(document, name, id) {\r\n super();\r\n this.document = document;\r\n this.name = name;\r\n this.id = id;\r\n this.font = new AFMFont(STANDARD_FONTS[this.name]());\r\n ({\r\n ascender: this.ascender,\r\n descender: this.descender,\r\n bbox: this.bbox,\r\n lineGap: this.lineGap,\r\n xHeight: this.xHeight,\r\n capHeight: this.capHeight\r\n } = this.font);\r\n }\r\n\r\n embed() {\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n BaseFont: this.name,\r\n Subtype: 'Type1',\r\n Encoding: 'WinAnsiEncoding'\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n encode(text) {\r\n const encoded = this.font.encodeText(text);\r\n const glyphs = this.font.glyphsForString(`${text}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n const positions = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n positions.push({\r\n xAdvance: advances[i],\r\n yAdvance: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n advanceWidth: this.font.widthOfGlyph(glyph)\r\n });\r\n }\r\n\r\n return [encoded, positions];\r\n }\r\n\r\n widthOfString(string, size) {\r\n const glyphs = this.font.glyphsForString(`${string}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n\r\n let width = 0;\r\n for (let advance of advances) {\r\n width += advance;\r\n }\r\n\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n static isStandardFont(name) {\r\n return name in STANDARD_FONTS;\r\n }\r\n}\r\n\r\nexport default StandardFont;\r\n","import PDFFont from '../font';\r\n\r\nconst toHex = function(num) {\r\n return `0000${num.toString(16)}`.slice(-4);\r\n};\r\n\r\nclass EmbeddedFont extends PDFFont {\r\n constructor(document, font, id) {\r\n super();\r\n this.document = document;\r\n this.font = font;\r\n this.id = id;\r\n this.subset = this.font.createSubset();\r\n this.unicode = [[0]];\r\n this.widths = [this.font.getGlyph(0).advanceWidth];\r\n\r\n this.name = this.font.postscriptName;\r\n this.scale = 1000 / this.font.unitsPerEm;\r\n this.ascender = this.font.ascent * this.scale;\r\n this.descender = this.font.descent * this.scale;\r\n this.xHeight = this.font.xHeight * this.scale;\r\n this.capHeight = this.font.capHeight * this.scale;\r\n this.lineGap = this.font.lineGap * this.scale;\r\n this.bbox = this.font.bbox;\r\n\r\n if (document.options.fontLayoutCache !== false) {\r\n this.layoutCache = Object.create(null);\r\n }\r\n }\r\n\r\n layoutRun(text, features) {\r\n const run = this.font.layout(text, features);\r\n\r\n // Normalize position values\r\n for (let i = 0; i < run.positions.length; i++) {\r\n const position = run.positions[i];\r\n for (let key in position) {\r\n position[key] *= this.scale;\r\n }\r\n\r\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\r\n }\r\n\r\n return run;\r\n }\r\n\r\n layoutCached(text) {\r\n if (!this.layoutCache) {\r\n return this.layoutRun(text);\r\n }\r\n let cached;\r\n if ((cached = this.layoutCache[text])) {\r\n return cached;\r\n }\r\n\r\n const run = this.layoutRun(text);\r\n this.layoutCache[text] = run;\r\n return run;\r\n }\r\n\r\n layout(text, features, onlyWidth) {\r\n // Skip the cache if any user defined features are applied\r\n if (features) {\r\n return this.layoutRun(text, features);\r\n }\r\n\r\n let glyphs = onlyWidth ? null : [];\r\n let positions = onlyWidth ? null : [];\r\n let advanceWidth = 0;\r\n\r\n // Split the string by words to increase cache efficiency.\r\n // For this purpose, spaces and tabs are a good enough delimeter.\r\n let last = 0;\r\n let index = 0;\r\n while (index <= text.length) {\r\n var needle;\r\n if (\r\n (index === text.length && last < index) ||\r\n ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\r\n ) {\r\n const run = this.layoutCached(text.slice(last, ++index));\r\n if (!onlyWidth) {\r\n glyphs = glyphs.concat(run.glyphs);\r\n positions = positions.concat(run.positions);\r\n }\r\n\r\n advanceWidth += run.advanceWidth;\r\n last = index;\r\n } else {\r\n index++;\r\n }\r\n }\r\n\r\n return { glyphs, positions, advanceWidth };\r\n }\r\n\r\n encode(text, features) {\r\n const { glyphs, positions } = this.layout(text, features);\r\n\r\n const res = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n const gid = this.subset.includeGlyph(glyph.id);\r\n res.push(`0000${gid.toString(16)}`.slice(-4));\r\n\r\n if (this.widths[gid] == null) {\r\n this.widths[gid] = glyph.advanceWidth * this.scale;\r\n }\r\n if (this.unicode[gid] == null) {\r\n this.unicode[gid] = glyph.codePoints;\r\n }\r\n }\r\n\r\n return [res, positions];\r\n }\r\n\r\n widthOfString(string, size, features) {\r\n const width = this.layout(string, features, true).advanceWidth;\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n embed() {\r\n const isCFF = this.subset.cff != null;\r\n const fontFile = this.document.ref();\r\n\r\n if (isCFF) {\r\n fontFile.data.Subtype = 'CIDFontType0C';\r\n }\r\n\r\n this.subset\r\n .encodeStream()\r\n .on('data', data => fontFile.write(data))\r\n .on('end', () => fontFile.end());\r\n\r\n const familyClass =\r\n ((this.font['OS/2'] != null\r\n ? this.font['OS/2'].sFamilyClass\r\n : undefined) || 0) >> 8;\r\n let flags = 0;\r\n if (this.font.post.isFixedPitch) {\r\n flags |= 1 << 0;\r\n }\r\n if (1 <= familyClass && familyClass <= 7) {\r\n flags |= 1 << 1;\r\n }\r\n flags |= 1 << 2; // assume the font uses non-latin characters\r\n if (familyClass === 10) {\r\n flags |= 1 << 3;\r\n }\r\n if (this.font.head.macStyle.italic) {\r\n flags |= 1 << 6;\r\n }\r\n\r\n // generate a tag (6 uppercase letters. 16 is the char code offset from '1' to 'A'. 74 will map to 'Z')\r\n const tag = [1, 2, 3, 4, 5, 6]\r\n .map(i => String.fromCharCode((this.id.charCodeAt(i) || 74) + 16))\r\n .join('');\r\n const name = tag + '+' + this.font.postscriptName;\r\n\r\n const { bbox } = this.font;\r\n const descriptor = this.document.ref({\r\n Type: 'FontDescriptor',\r\n FontName: name,\r\n Flags: flags,\r\n FontBBox: [\r\n bbox.minX * this.scale,\r\n bbox.minY * this.scale,\r\n bbox.maxX * this.scale,\r\n bbox.maxY * this.scale\r\n ],\r\n ItalicAngle: this.font.italicAngle,\r\n Ascent: this.ascender,\r\n Descent: this.descender,\r\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\r\n XHeight: (this.font.xHeight || 0) * this.scale,\r\n StemV: 0\r\n }); // not sure how to calculate this\r\n\r\n if (isCFF) {\r\n descriptor.data.FontFile3 = fontFile;\r\n } else {\r\n descriptor.data.FontFile2 = fontFile;\r\n }\r\n\r\n descriptor.end();\r\n\r\n const descendantFont = this.document.ref({\r\n Type: 'Font',\r\n Subtype: isCFF ? 'CIDFontType0' : 'CIDFontType2',\r\n BaseFont: name,\r\n CIDSystemInfo: {\r\n Registry: new String('Adobe'),\r\n Ordering: new String('Identity'),\r\n Supplement: 0\r\n },\r\n FontDescriptor: descriptor,\r\n W: [0, this.widths]\r\n });\r\n\r\n descendantFont.end();\r\n\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n Subtype: 'Type0',\r\n BaseFont: name,\r\n Encoding: 'Identity-H',\r\n DescendantFonts: [descendantFont],\r\n ToUnicode: this.toUnicodeCmap()\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n // Maps the glyph ids encoded in the PDF back to unicode strings\r\n // Because of ligature substitutions and the like, there may be one or more\r\n // unicode characters represented by each glyph.\r\n toUnicodeCmap() {\r\n const cmap = this.document.ref();\r\n\r\n const entries = [];\r\n for (let codePoints of this.unicode) {\r\n const encoded = [];\r\n\r\n // encode codePoints to utf16\r\n for (let value of codePoints) {\r\n if (value > 0xffff) {\r\n value -= 0x10000;\r\n encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\r\n value = 0xdc00 | (value & 0x3ff);\r\n }\r\n\r\n encoded.push(toHex(value));\r\n }\r\n\r\n entries.push(`<${encoded.join(' ')}>`);\r\n }\r\n\r\n cmap.end(`\\\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo <<\r\n /Registry (Adobe)\r\n /Ordering (UCS)\r\n /Supplement 0\r\n>> def\r\n/CMapName /Adobe-Identity-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000><ffff>\r\nendcodespacerange\r\n1 beginbfrange\r\n<0000> <${toHex(entries.length - 1)}> [${entries.join(' ')}]\r\nendbfrange\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\\\r\n`);\r\n\r\n return cmap;\r\n }\r\n}\r\n\r\nexport default EmbeddedFont;\r\n","import fs from 'fs';\r\nimport fontkit from 'fontkit';\r\nimport StandardFont from './font/standard';\r\nimport EmbeddedFont from './font/embedded';\r\n\r\nclass PDFFontFactory {\r\n static open(document, src, family, id) {\r\n let font;\r\n if (typeof src === 'string') {\r\n if (StandardFont.isStandardFont(src)) {\r\n return new StandardFont(document, src, id);\r\n }\r\n\r\n src = fs.readFileSync(src);\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n font = fontkit.create(src, family);\r\n } else if (src instanceof Uint8Array) {\r\n font = fontkit.create(new Buffer(src), family);\r\n } else if (src instanceof ArrayBuffer) {\r\n font = fontkit.create(new Buffer(new Uint8Array(src)), family);\r\n }\r\n\r\n if (font == null) {\r\n throw new Error('Not a supported font format or standard PDF font.');\r\n }\r\n\r\n return new EmbeddedFont(document, font, id);\r\n }\r\n}\r\n\r\nexport default PDFFontFactory;\r\n","import PDFFontFactory from '../font_factory';\r\n\r\nexport default {\r\n initFonts(defaultFont = 'Helvetica') {\r\n // Lookup table for embedded fonts\r\n this._fontFamilies = {};\r\n this._fontCount = 0;\r\n\r\n // Font state\r\n this._fontSize = 12;\r\n this._font = null;\r\n\r\n this._registeredFonts = {};\r\n\r\n // Set the default font\r\n if (defaultFont) {\r\n this.font(defaultFont);\r\n }\r\n },\r\n\r\n font(src, family, size) {\r\n let cacheKey, font;\r\n if (typeof family === 'number') {\r\n size = family;\r\n family = null;\r\n }\r\n\r\n // check registered fonts if src is a string\r\n if (typeof src === 'string' && this._registeredFonts[src]) {\r\n cacheKey = src;\r\n ({ src, family } = this._registeredFonts[src]);\r\n } else {\r\n cacheKey = family || src;\r\n if (typeof cacheKey !== 'string') {\r\n cacheKey = null;\r\n }\r\n }\r\n\r\n if (size != null) {\r\n this.fontSize(size);\r\n }\r\n\r\n // fast path: check if the font is already in the PDF\r\n if ((font = this._fontFamilies[cacheKey])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // load the font\r\n const id = `F${++this._fontCount}`;\r\n this._font = PDFFontFactory.open(this, src, family, id);\r\n\r\n // check for existing font familes with the same name already in the PDF\r\n // useful if the font was passed as a buffer\r\n if ((font = this._fontFamilies[this._font.name])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // save the font for reuse later\r\n if (cacheKey) {\r\n this._fontFamilies[cacheKey] = this._font;\r\n }\r\n\r\n if (this._font.name) {\r\n this._fontFamilies[this._font.name] = this._font;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n fontSize(_fontSize) {\r\n this._fontSize = _fontSize;\r\n return this;\r\n },\r\n\r\n currentLineHeight(includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n return this._font.lineHeight(this._fontSize, includeGap);\r\n },\r\n\r\n registerFont(name, src, family) {\r\n this._registeredFonts[name] = {\r\n src,\r\n family\r\n };\r\n\r\n return this;\r\n }\r\n};\r\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from 'linebreak';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n constructor(document, options) {\r\n super();\r\n this.document = document;\r\n this.indent = options.indent || 0;\r\n this.characterSpacing = options.characterSpacing || 0;\r\n this.wordSpacing = options.wordSpacing === 0;\r\n this.columns = options.columns || 1;\r\n this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\r\n this.lineWidth =\r\n (options.width - this.columnGap * (this.columns - 1)) / this.columns;\r\n this.spaceLeft = this.lineWidth;\r\n this.startX = this.document.x;\r\n this.startY = this.document.y;\r\n this.column = 1;\r\n this.ellipsis = options.ellipsis;\r\n this.continuedX = 0;\r\n this.features = options.features;\r\n\r\n // calculate the maximum Y position the text can appear at\r\n if (options.height != null) {\r\n this.height = options.height;\r\n this.maxY = this.startY + options.height;\r\n } else {\r\n this.maxY = this.document.page.maxY();\r\n }\r\n\r\n // handle paragraph indents\r\n this.on('firstLine', options => {\r\n // if this is the first line of the text segment, and\r\n // we're continuing where we left off, indent that much\r\n // otherwise use the user specified indent option\r\n const indent = this.continuedX || this.indent;\r\n this.document.x += indent;\r\n this.lineWidth -= indent;\r\n\r\n return this.once('line', () => {\r\n this.document.x -= indent;\r\n this.lineWidth += indent;\r\n if (options.continued && !this.continuedX) {\r\n this.continuedX = this.indent;\r\n }\r\n if (!options.continued) {\r\n return (this.continuedX = 0);\r\n }\r\n });\r\n });\r\n\r\n // handle left aligning last lines of paragraphs\r\n this.on('lastLine', options => {\r\n const { align } = options;\r\n if (align === 'justify') {\r\n options.align = 'left';\r\n }\r\n this.lastLine = true;\r\n\r\n return this.once('line', () => {\r\n this.document.y += options.paragraphGap || 0;\r\n options.align = align;\r\n return (this.lastLine = false);\r\n });\r\n });\r\n }\r\n\r\n wordWidth(word) {\r\n return (\r\n this.document.widthOfString(word, this) +\r\n this.characterSpacing +\r\n this.wordSpacing\r\n );\r\n }\r\n\r\n eachWord(text, fn) {\r\n // setup a unicode line breaker\r\n let bk;\r\n const breaker = new LineBreaker(text);\r\n let last = null;\r\n const wordWidths = Object.create(null);\r\n\r\n while ((bk = breaker.nextBreak())) {\r\n var shouldContinue;\r\n let word = text.slice(\r\n (last != null ? last.position : undefined) || 0,\r\n bk.position\r\n );\r\n let w =\r\n wordWidths[word] != null\r\n ? wordWidths[word]\r\n : (wordWidths[word] = this.wordWidth(word));\r\n\r\n // if the word is longer than the whole line, chop it up\r\n // TODO: break by grapheme clusters, not JS string characters\r\n if (w > this.lineWidth + this.continuedX) {\r\n // make some fake break objects\r\n let lbk = last;\r\n const fbk = {};\r\n\r\n while (word.length) {\r\n // fit as much of the word as possible into the space we have\r\n var l, mightGrow;\r\n if (w > this.spaceLeft) {\r\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n // an issue with long loops when processing massive words, such as a huge number of spaces\r\n l = Math.ceil(this.spaceLeft / (w / word.length));\r\n w = this.wordWidth(word.slice(0, l));\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n } else {\r\n l = word.length;\r\n }\r\n let mustShrink = w > this.spaceLeft && l > 0;\r\n // shrink or grow word as necessary after our near-guess above\r\n while (mustShrink || mightGrow) {\r\n if (mustShrink) {\r\n w = this.wordWidth(word.slice(0, --l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n } else {\r\n w = this.wordWidth(word.slice(0, ++l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n }\r\n }\r\n\r\n // send a required break unless this is the last piece and a linebreak is not specified\r\n fbk.required = bk.required || l < word.length;\r\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n lbk = { required: false };\r\n\r\n // get the remaining piece of the word\r\n word = word.slice(l);\r\n w = this.wordWidth(word);\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n // otherwise just emit the break as it was given to us\r\n shouldContinue = fn(word, w, bk, last);\r\n }\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n last = bk;\r\n }\r\n }\r\n\r\n wrap(text, options) {\r\n // override options from previous continued fragments\r\n if (options.indent != null) {\r\n this.indent = options.indent;\r\n }\r\n if (options.characterSpacing != null) {\r\n this.characterSpacing = options.characterSpacing;\r\n }\r\n if (options.wordSpacing != null) {\r\n this.wordSpacing = options.wordSpacing;\r\n }\r\n if (options.ellipsis != null) {\r\n this.ellipsis = options.ellipsis;\r\n }\r\n\r\n // make sure we're actually on the page\r\n // and that the first line of is never by\r\n // itself at the bottom of a page (orphans)\r\n const nextY = this.document.y + this.document.currentLineHeight(true);\r\n if (this.document.y > this.maxY || nextY > this.maxY) {\r\n this.nextSection();\r\n }\r\n\r\n let buffer = '';\r\n let textWidth = 0;\r\n let wc = 0;\r\n let lc = 0;\r\n\r\n let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n const emitLine = () => {\r\n options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n options.wordCount = wc;\r\n options.lineWidth = this.lineWidth;\r\n ({ y } = this.document);\r\n this.emit('line', buffer, options, this);\r\n return lc++;\r\n };\r\n\r\n this.emit('sectionStart', options, this);\r\n\r\n this.eachWord(text, (word, w, bk, last) => {\r\n if (last == null || last.required) {\r\n this.emit('firstLine', options, this);\r\n this.spaceLeft = this.lineWidth;\r\n }\r\n\r\n if (w <= this.spaceLeft) {\r\n buffer += word;\r\n textWidth += w;\r\n wc++;\r\n }\r\n\r\n if (bk.required || w > this.spaceLeft) {\r\n // if the user specified a max height and an ellipsis, and is about to pass the\r\n // max height and max columns after the next line, append the ellipsis\r\n const lh = this.document.currentLineHeight(true);\r\n if (\r\n this.height != null &&\r\n this.ellipsis &&\r\n this.document.y + lh * 2 > this.maxY &&\r\n this.column >= this.columns\r\n ) {\r\n if (this.ellipsis === true) {\r\n this.ellipsis = '…';\r\n } // map default ellipsis character\r\n buffer = buffer.replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n // remove characters from the buffer until the ellipsis fits\r\n // to avoid inifinite loop need to stop while-loop if buffer is empty string\r\n while (buffer && textWidth > this.lineWidth) {\r\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n }\r\n // need to add ellipsis only if there is enough space for it\r\n if (textWidth <= this.lineWidth) {\r\n buffer = buffer + this.ellipsis;\r\n }\r\n\r\n textWidth = this.wordWidth(buffer);\r\n }\r\n\r\n if (bk.required) {\r\n if (w > this.spaceLeft) {\r\n emitLine();\r\n buffer = word;\r\n textWidth = w;\r\n wc = 1;\r\n }\r\n\r\n this.emit('lastLine', options, this);\r\n }\r\n\r\n emitLine();\r\n\r\n // if we've reached the edge of the page,\r\n // continue on a new page or column\r\n if (this.document.y + lh > this.maxY) {\r\n const shouldContinue = this.nextSection();\r\n\r\n // stop if we reached the maximum height\r\n if (!shouldContinue) {\r\n wc = 0;\r\n buffer = '';\r\n return false;\r\n }\r\n }\r\n\r\n // reset the space left and buffer\r\n if (bk.required) {\r\n this.spaceLeft = this.lineWidth;\r\n buffer = '';\r\n textWidth = 0;\r\n return (wc = 0);\r\n } else {\r\n // reset the space left and buffer\r\n this.spaceLeft = this.lineWidth - w;\r\n buffer = word;\r\n textWidth = w;\r\n return (wc = 1);\r\n }\r\n } else {\r\n return (this.spaceLeft -= w);\r\n }\r\n });\r\n\r\n if (wc > 0) {\r\n this.emit('lastLine', options, this);\r\n emitLine();\r\n }\r\n\r\n this.emit('sectionEnd', options, this);\r\n\r\n // if the wrap is set to be continued, save the X position\r\n // to start the first line of the next segment at, and reset\r\n // the y position\r\n if (options.continued === true) {\r\n if (lc > 1) {\r\n this.continuedX = 0;\r\n }\r\n this.continuedX += options.textWidth || 0;\r\n return (this.document.y = y);\r\n } else {\r\n return (this.document.x = this.startX);\r\n }\r\n }\r\n\r\n nextSection(options) {\r\n this.emit('sectionEnd', options, this);\r\n\r\n if (++this.column > this.columns) {\r\n // if a max height was specified by the user, we're done.\r\n // otherwise, the default is to make a new page at the bottom.\r\n if (this.height != null) {\r\n return false;\r\n }\r\n\r\n this.document.addPage();\r\n this.column = 1;\r\n this.startY = this.document.page.margins.top;\r\n this.maxY = this.document.page.maxY();\r\n this.document.x = this.startX;\r\n if (this.document._fillColor) {\r\n this.document.fillColor(...(this.document._fillColor || []));\r\n }\r\n this.emit('pageBreak', options, this);\r\n } else {\r\n this.document.x += this.lineWidth + this.columnGap;\r\n this.document.y = this.startY;\r\n this.emit('columnBreak', options, this);\r\n }\r\n\r\n this.emit('sectionStart', options, this);\r\n return true;\r\n }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nexport default {\r\n initText() {\r\n this._line = this._line.bind(this);\r\n // Current coordinates\r\n this.x = 0;\r\n this.y = 0;\r\n return (this._lineGap = 0);\r\n },\r\n\r\n lineGap(_lineGap) {\r\n this._lineGap = _lineGap;\r\n return this;\r\n },\r\n\r\n moveDown(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n moveUp(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n _text(text, x, y, options, lineCallback) {\r\n options = this._initOptions(x, y, options);\r\n\r\n // Convert text to a string\r\n text = text == null ? '' : `${text}`;\r\n\r\n // if the wordSpacing option is specified, remove multiple consecutive spaces\r\n if (options.wordSpacing) {\r\n text = text.replace(/\\s{2,}/g, ' ');\r\n }\r\n\r\n // word wrapping\r\n if (options.width) {\r\n let wrapper = this._wrapper;\r\n if (!wrapper) {\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', lineCallback);\r\n }\r\n\r\n this._wrapper = options.continued ? wrapper : null;\r\n this._textOptions = options.continued ? options : null;\r\n wrapper.wrap(text, options);\r\n\r\n // render paragraphs as single lines\r\n } else {\r\n for (let line of text.split('\\n')) {\r\n lineCallback(line, options);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n text(text, x, y, options) {\r\n return this._text(text, x, y, options, this._line);\r\n },\r\n\r\n widthOfString(string, options = {}) {\r\n return (\r\n this._font.widthOfString(string, this._fontSize, options.features) +\r\n (options.characterSpacing || 0) * (string.length - 1)\r\n );\r\n },\r\n\r\n heightOfString(text, options) {\r\n const { x, y } = this;\r\n\r\n options = this._initOptions(options);\r\n options.height = Infinity; // don't break pages\r\n\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n this._text(text, this.x, this.y, options, () => {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n });\r\n\r\n const height = this.y - y;\r\n this.x = x;\r\n this.y = y;\r\n\r\n return height;\r\n },\r\n\r\n list(list, x, y, options, wrapper) {\r\n options = this._initOptions(x, y, options);\r\n\r\n const listType = options.listType || 'bullet';\r\n const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\r\n const midLine = unit / 2;\r\n const r = options.bulletRadius || unit / 3;\r\n const indent =\r\n options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\r\n const itemIndent =\r\n options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\r\n\r\n let level = 1;\r\n const items = [];\r\n const levels = [];\r\n const numbers = [];\r\n\r\n var flatten = function(list) {\r\n let n = 1;\r\n for (let i = 0; i < list.length; i++) {\r\n const item = list[i];\r\n if (Array.isArray(item)) {\r\n level++;\r\n flatten(item);\r\n level--;\r\n } else {\r\n items.push(item);\r\n levels.push(level);\r\n if (listType !== 'bullet') {\r\n numbers.push(n++);\r\n }\r\n }\r\n }\r\n };\r\n\r\n flatten(list);\r\n\r\n const label = function(n) {\r\n switch (listType) {\r\n case 'numbered':\r\n return `${n}.`;\r\n case 'lettered':\r\n var letter = String.fromCharCode(((n - 1) % 26) + 65);\r\n var times = Math.floor((n - 1) / 26 + 1);\r\n var text = Array(times + 1).join(letter);\r\n return `${text}.`;\r\n }\r\n };\r\n\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', this._line);\r\n\r\n level = 1;\r\n let i = 0;\r\n wrapper.on('firstLine', () => {\r\n let l;\r\n if ((l = levels[i++]) !== level) {\r\n const diff = itemIndent * (l - level);\r\n this.x += diff;\r\n wrapper.lineWidth -= diff;\r\n level = l;\r\n }\r\n\r\n switch (listType) {\r\n case 'bullet':\r\n this.circle(this.x - indent + r, this.y + midLine, r);\r\n return this.fill();\r\n case 'numbered':\r\n case 'lettered':\r\n var text = label(numbers[i - 1]);\r\n return this._fragment(text, this.x - indent, this.y, options);\r\n }\r\n });\r\n\r\n wrapper.on('sectionStart', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x += pos;\r\n return (wrapper.lineWidth -= pos);\r\n });\r\n\r\n wrapper.on('sectionEnd', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x -= pos;\r\n return (wrapper.lineWidth += pos);\r\n });\r\n\r\n wrapper.wrap(items.join('\\n'), options);\r\n\r\n return this;\r\n },\r\n\r\n _initOptions(x = {}, y, options = {}) {\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n // clone options object\r\n const result = Object.assign({}, options);\r\n\r\n // extend options with previous values for continued text\r\n if (this._textOptions) {\r\n for (let key in this._textOptions) {\r\n const val = this._textOptions[key];\r\n if (key !== 'continued') {\r\n if (result[key] == null) {\r\n result[key] = val;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Update the current position\r\n if (x != null) {\r\n this.x = x;\r\n }\r\n if (y != null) {\r\n this.y = y;\r\n }\r\n\r\n // wrap to margins if no x or y position passed\r\n if (result.lineBreak !== false) {\r\n if (result.width == null) {\r\n result.width = this.page.width - this.x - this.page.margins.right;\r\n }\r\n }\r\n\r\n if (!result.columns) {\r\n result.columns = 0;\r\n }\r\n if (result.columnGap == null) {\r\n result.columnGap = 18;\r\n } // 1/4 inch\r\n\r\n return result;\r\n },\r\n\r\n _line(text, options = {}, wrapper) {\r\n this._fragment(text, this.x, this.y, options);\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n\r\n if (!wrapper) {\r\n return (this.x += this.widthOfString(text));\r\n } else {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n }\r\n },\r\n\r\n _fragment(text, x, y, options) {\r\n let dy, encoded, i, positions, textWidth, words;\r\n text = `${text}`.replace(/\\n/g, '');\r\n if (text.length === 0) {\r\n return;\r\n }\r\n\r\n // handle options\r\n const align = options.align || 'left';\r\n let wordSpacing = options.wordSpacing || 0;\r\n const characterSpacing = options.characterSpacing || 0;\r\n\r\n // text alignments\r\n if (options.width) {\r\n switch (align) {\r\n case 'right':\r\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\r\n x += options.lineWidth - textWidth;\r\n break;\r\n\r\n case 'center':\r\n x += options.lineWidth / 2 - options.textWidth / 2;\r\n break;\r\n\r\n case 'justify':\r\n // calculate the word spacing value\r\n words = text.trim().split(/\\s+/);\r\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\r\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\r\n wordSpacing = Math.max(\r\n 0,\r\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\r\n spaceWidth\r\n );\r\n break;\r\n }\r\n }\r\n\r\n // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\r\n if (typeof options.baseline === 'number') {\r\n dy = -options.baseline;\r\n } else {\r\n switch (options.baseline) {\r\n case 'svg-middle':\r\n dy = 0.5 * this._font.xHeight;\r\n break;\r\n case 'middle':\r\n case 'svg-central':\r\n dy = 0.5 * (this._font.descender + this._font.ascender);\r\n break;\r\n case 'bottom':\r\n case 'ideographic':\r\n dy = this._font.descender;\r\n break;\r\n case 'alphabetic':\r\n dy = 0;\r\n break;\r\n case 'mathematical':\r\n dy = 0.5 * this._font.ascender;\r\n break;\r\n case 'hanging':\r\n dy = 0.8 * this._font.ascender;\r\n break;\r\n case 'top':\r\n dy = this._font.ascender;\r\n break;\r\n default:\r\n dy = this._font.ascender;\r\n }\r\n dy = (dy / 1000) * this._fontSize;\r\n }\r\n\r\n // calculate the actual rendered width of the string after word and character spacing\r\n const renderedWidth =\r\n options.textWidth +\r\n wordSpacing * (options.wordCount - 1) +\r\n characterSpacing * (text.length - 1);\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // create underline or strikethrough line\r\n if (options.underline || options.strike) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n const d = options.underline ? 1 : 2;\r\n let lineY = y + this.currentLineHeight() / d;\r\n if (options.underline) {\r\n lineY -= lineWidth;\r\n }\r\n\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n\r\n this.save();\r\n\r\n // oblique (angle in degrees or boolean)\r\n if (options.oblique) {\r\n let skew;\r\n if (typeof options.oblique === 'number') {\r\n skew = -Math.tan((options.oblique * Math.PI) / 180);\r\n } else {\r\n skew = -0.25;\r\n }\r\n this.transform(1, 0, 0, 1, x, y);\r\n this.transform(1, 0, skew, 1, -skew * dy, 0);\r\n this.transform(1, 0, 0, 1, -x, -y);\r\n }\r\n\r\n // flip coordinate system\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n y = this.page.height - y - dy;\r\n\r\n // add current font to page if necessary\r\n if (this.page.fonts[this._font.id] == null) {\r\n this.page.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // begin the text object\r\n this.addContent('BT');\r\n\r\n // text position\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n\r\n // font and font size\r\n this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\r\n\r\n // rendering mode\r\n const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\r\n if (mode) {\r\n this.addContent(`${mode} Tr`);\r\n }\r\n\r\n // Character spacing\r\n if (characterSpacing) {\r\n this.addContent(`${number(characterSpacing)} Tc`);\r\n }\r\n\r\n // Add the actual text\r\n // If we have a word spacing value, we need to encode each word separately\r\n // since the normal Tw operator only works on character code 32, which isn't\r\n // used for embedded fonts.\r\n if (wordSpacing) {\r\n words = text.trim().split(/\\s+/);\r\n wordSpacing += this.widthOfString(' ') + characterSpacing;\r\n wordSpacing *= 1000 / this._fontSize;\r\n\r\n encoded = [];\r\n positions = [];\r\n for (let word of words) {\r\n const [encodedWord, positionsWord] = this._font.encode(\r\n word,\r\n options.features\r\n );\r\n encoded = encoded.concat(encodedWord);\r\n positions = positions.concat(positionsWord);\r\n\r\n // add the word spacing to the end of the word\r\n // clone object because of cache\r\n const space = {};\r\n const object = positions[positions.length - 1];\r\n for (let key in object) {\r\n const val = object[key];\r\n space[key] = val;\r\n }\r\n space.xAdvance += wordSpacing;\r\n positions[positions.length - 1] = space;\r\n }\r\n } else {\r\n [encoded, positions] = this._font.encode(text, options.features);\r\n }\r\n\r\n const scale = this._fontSize / 1000;\r\n const commands = [];\r\n let last = 0;\r\n let hadOffset = false;\r\n\r\n // Adds a segment of text to the TJ command buffer\r\n const addSegment = cur => {\r\n if (last < cur) {\r\n const hex = encoded.slice(last, cur).join('');\r\n const advance =\r\n positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\r\n commands.push(`<${hex}> ${number(-advance)}`);\r\n }\r\n\r\n return (last = cur);\r\n };\r\n\r\n // Flushes the current TJ commands to the output stream\r\n const flush = i => {\r\n addSegment(i);\r\n\r\n if (commands.length > 0) {\r\n this.addContent(`[${commands.join(' ')}] TJ`);\r\n return (commands.length = 0);\r\n }\r\n };\r\n\r\n for (i = 0; i < positions.length; i++) {\r\n // If we have an x or y offset, we have to break out of the current TJ command\r\n // so we can move the text position.\r\n const pos = positions[i];\r\n if (pos.xOffset || pos.yOffset) {\r\n // Flush the current buffer\r\n flush(i);\r\n\r\n // Move the text position and flush just the current character\r\n this.addContent(\r\n `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\r\n y + pos.yOffset * scale\r\n )} Tm`\r\n );\r\n flush(i + 1);\r\n\r\n hadOffset = true;\r\n } else {\r\n // If the last character had an offset, reset the text position\r\n if (hadOffset) {\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n hadOffset = false;\r\n }\r\n\r\n // Group segments that don't have any advance adjustments\r\n if (pos.xAdvance - pos.advanceWidth !== 0) {\r\n addSegment(i + 1);\r\n }\r\n }\r\n\r\n x += pos.xAdvance * scale;\r\n }\r\n\r\n // Flush any remaining commands\r\n flush(i);\r\n\r\n // end the text object\r\n this.addContent('ET');\r\n\r\n // restore flipped coordinate system\r\n return this.restore();\r\n }\r\n};\r\n","const MARKERS = [\r\n 0xffc0,\r\n 0xffc1,\r\n 0xffc2,\r\n 0xffc3,\r\n 0xffc5,\r\n 0xffc6,\r\n 0xffc7,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffca,\r\n 0xffcb,\r\n 0xffcc,\r\n 0xffcd,\r\n 0xffce,\r\n 0xffcf\r\n];\r\n\r\nconst COLOR_SPACE_MAP = {\r\n 1: 'DeviceGray',\r\n 3: 'DeviceRGB',\r\n 4: 'DeviceCMYK'\r\n};\r\n\r\nclass JPEG {\r\n constructor(data, label) {\r\n let marker;\r\n this.data = data;\r\n this.label = label;\r\n if (this.data.readUInt16BE(0) !== 0xffd8) {\r\n throw 'SOI not found in JPEG';\r\n }\r\n\r\n let pos = 2;\r\n while (pos < this.data.length) {\r\n marker = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n if (MARKERS.includes(marker)) {\r\n break;\r\n }\r\n pos += this.data.readUInt16BE(pos);\r\n }\r\n\r\n if (!MARKERS.includes(marker)) {\r\n throw 'Invalid JPEG.';\r\n }\r\n pos += 2;\r\n\r\n this.bits = this.data[pos++];\r\n this.height = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n this.width = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n const channels = this.data[pos++];\r\n this.colorSpace = COLOR_SPACE_MAP[channels];\r\n\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n this.obj = document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: this.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n ColorSpace: this.colorSpace,\r\n Filter: 'DCTDecode'\r\n });\r\n\r\n // add extra decode params for CMYK images. By swapping the\r\n // min and max values from the default, we invert the colors. See\r\n // section 4.8.4 of the spec.\r\n if (this.colorSpace === 'DeviceCMYK') {\r\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\r\n }\r\n\r\n this.obj.end(this.data);\r\n\r\n // free memory\r\n return (this.data = null);\r\n }\r\n}\r\n\r\nexport default JPEG;\r\n","import zlib from 'zlib';\r\nimport PNG from 'png-js';\r\n\r\nclass PNGImage {\r\n constructor(data, label) {\r\n this.label = label;\r\n this.image = new PNG(data);\r\n this.width = this.image.width;\r\n this.height = this.image.height;\r\n this.imgData = this.image.imgData;\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n this.document = document;\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n const hasAlphaChannel = this.image.hasAlphaChannel;\r\n\r\n this.obj = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n Filter: 'FlateDecode'\r\n });\r\n\r\n if (!hasAlphaChannel) {\r\n const params = this.document.ref({\r\n Predictor: 15,\r\n Colors: this.image.colors,\r\n BitsPerComponent: this.image.bits,\r\n Columns: this.width\r\n });\r\n\r\n this.obj.data['DecodeParms'] = params;\r\n params.end();\r\n }\r\n\r\n if (this.image.palette.length === 0) {\r\n this.obj.data['ColorSpace'] = this.image.colorSpace;\r\n } else {\r\n // embed the color palette in the PDF as an object stream\r\n const palette = this.document.ref();\r\n palette.end(new Buffer(this.image.palette));\r\n\r\n // build the color space array for the image\r\n this.obj.data['ColorSpace'] = [\r\n 'Indexed',\r\n 'DeviceRGB',\r\n this.image.palette.length / 3 - 1,\r\n palette\r\n ];\r\n }\r\n\r\n // For PNG color types 0, 2 and 3, the transparency data is stored in\r\n // a dedicated PNG chunk.\r\n if (this.image.transparency.grayscale != null) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const val = this.image.transparency.grayscale;\r\n this.obj.data['Mask'] = [val, val];\r\n } else if (this.image.transparency.rgb) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const { rgb } = this.image.transparency;\r\n const mask = [];\r\n for (let x of rgb) {\r\n mask.push(x, x);\r\n }\r\n\r\n this.obj.data['Mask'] = mask;\r\n } else if (this.image.transparency.indexed) {\r\n // Create a transparency SMask for the image based on the data\r\n // in the PLTE and tRNS sections. See below for details on SMasks.\r\n return this.loadIndexedAlphaChannel();\r\n } else if (hasAlphaChannel) {\r\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\r\n // channel mixed in with the main image data. Separate this data out into an\r\n // SMask object and store it separately in the PDF.\r\n return this.splitAlphaChannel();\r\n }\r\n this.finalize();\r\n }\r\n\r\n finalize() {\r\n if (this.alphaChannel) {\r\n const sMask = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n Height: this.height,\r\n Width: this.width,\r\n BitsPerComponent: 8,\r\n Filter: 'FlateDecode',\r\n ColorSpace: 'DeviceGray',\r\n Decode: [0, 1]\r\n });\r\n\r\n sMask.end(this.alphaChannel);\r\n this.obj.data['SMask'] = sMask;\r\n }\r\n\r\n // add the actual image data\r\n this.obj.end(this.imgData);\r\n\r\n // free memory\r\n this.image = null;\r\n return (this.imgData = null);\r\n }\r\n\r\n splitAlphaChannel() {\r\n return this.image.decodePixels(pixels => {\r\n let a, p;\r\n const colorCount = this.image.colors;\r\n const pixelCount = this.width * this.height;\r\n const imgData = new Buffer(pixelCount * colorCount);\r\n const alphaChannel = new Buffer(pixelCount);\r\n\r\n let i = (p = a = 0);\r\n const len = pixels.length;\r\n // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\r\n const skipByteCount = this.image.bits === 16 ? 1 : 0;\r\n while (i < len) {\r\n for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\r\n imgData[p++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n alphaChannel[a++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n\r\n this.imgData = zlib.deflateSync(imgData);\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n loadIndexedAlphaChannel() {\r\n const transparency = this.image.transparency.indexed;\r\n return this.image.decodePixels(pixels => {\r\n const alphaChannel = new Buffer(this.width * this.height);\r\n\r\n let i = 0;\r\n for (let j = 0, end = pixels.length; j < end; j++) {\r\n alphaChannel[i++] = transparency[pixels[j]];\r\n }\r\n\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n}\r\n\r\nexport default PNGImage;\r\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n static open(src, label) {\r\n let data;\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = new Buffer(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:.+;base64,(.*)$/.exec(src))) {\r\n data = new Buffer(match[1], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (data[0] === 0xff && data[1] === 0xd8) {\r\n return new JPEG(data, label);\r\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n return new PNG(data, label);\r\n } else {\r\n throw new Error('Unknown image format.');\r\n }\r\n }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\r\n\r\nexport default {\r\n initImages() {\r\n this._imageRegistry = {};\r\n return (this._imageCount = 0);\r\n },\r\n\r\n image(src, x, y, options = {}) {\r\n let bh, bp, bw, image, ip, left, left1;\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n x = (left = x != null ? x : options.x) != null ? left : this.x;\r\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\r\n\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n if (src.width && src.height) {\r\n image = src;\r\n } else {\r\n image = this.openImage(src);\r\n }\r\n }\r\n\r\n if (!image.obj) {\r\n image.embed(this);\r\n }\r\n\r\n if (this.page.xobjects[image.label] == null) {\r\n this.page.xobjects[image.label] = image.obj;\r\n }\r\n\r\n let w = options.width || image.width;\r\n let h = options.height || image.height;\r\n\r\n if (options.width && !options.height) {\r\n const wp = w / image.width;\r\n w = image.width * wp;\r\n h = image.height * wp;\r\n } else if (options.height && !options.width) {\r\n const hp = h / image.height;\r\n w = image.width * hp;\r\n h = image.height * hp;\r\n } else if (options.scale) {\r\n w = image.width * options.scale;\r\n h = image.height * options.scale;\r\n } else if (options.fit) {\r\n [bw, bh] = options.fit;\r\n bp = bw / bh;\r\n ip = image.width / image.height;\r\n if (ip > bp) {\r\n w = bw;\r\n h = bw / ip;\r\n } else {\r\n h = bh;\r\n w = bh * ip;\r\n }\r\n } else if (options.cover) {\r\n [bw, bh] = options.cover;\r\n bp = bw / bh;\r\n ip = image.width / image.height;\r\n if (ip > bp) {\r\n h = bh;\r\n w = bh * ip;\r\n } else {\r\n w = bw;\r\n h = bw / ip;\r\n }\r\n }\r\n\r\n if (options.fit || options.cover) {\r\n if (options.align === 'center') {\r\n x = x + bw / 2 - w / 2;\r\n } else if (options.align === 'right') {\r\n x = x + bw - w;\r\n }\r\n\r\n if (options.valign === 'center') {\r\n y = y + bh / 2 - h / 2;\r\n } else if (options.valign === 'bottom') {\r\n y = y + bh - h;\r\n }\r\n }\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, w, h, options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, w, h, options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // Set the current y position to below the image if it is in the document flow\r\n if (this.y === y) {\r\n this.y += h;\r\n }\r\n\r\n this.save();\r\n this.transform(w, 0, 0, -h, x, y + h);\r\n this.addContent(`/${image.label} Do`);\r\n this.restore();\r\n\r\n return this;\r\n },\r\n\r\n openImage(src) {\r\n let image;\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n image = PDFImage.open(src, `I${++this._imageCount}`);\r\n if (typeof src === 'string') {\r\n this._imageRegistry[src] = image;\r\n }\r\n }\r\n\r\n return image;\r\n }\r\n};\r\n","export default {\r\n annotate(x, y, w, h, options) {\r\n options.Type = 'Annot';\r\n options.Rect = this._convertRect(x, y, w, h);\r\n options.Border = [0, 0, 0];\r\n if (options.Subtype !== 'Link') {\r\n if (options.C == null) {\r\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\r\n }\r\n } // convert colors\r\n delete options.color;\r\n\r\n if (typeof options.Dest === 'string') {\r\n options.Dest = new String(options.Dest);\r\n }\r\n\r\n // Capitalize keys\r\n for (let key in options) {\r\n const val = options[key];\r\n options[key[0].toUpperCase() + key.slice(1)] = val;\r\n }\r\n\r\n const ref = this.ref(options);\r\n this.page.annotations.push(ref);\r\n ref.end();\r\n return this;\r\n },\r\n\r\n note(x, y, w, h, contents, options = {}) {\r\n options.Subtype = 'Text';\r\n options.Contents = new String(contents);\r\n options.Name = 'Comment';\r\n if (options.color == null) {\r\n options.color = [243, 223, 92];\r\n }\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n goTo(x, y, w, h, name, options = {}) {\r\n options.Subtype = 'Link';\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: new String(name)\r\n });\r\n options.A.end();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n link(x, y, w, h, url, options = {}) {\r\n options.Subtype = 'Link';\r\n\r\n if (typeof url === 'number') {\r\n // Link to a page in the document (the page must already exist)\r\n const pages = this._root.data.Pages.data;\r\n if (url >= 0 && url < pages.Kids.length) {\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: [pages.Kids[url], 'XYZ', null, null, null]\r\n });\r\n options.A.end();\r\n } else {\r\n throw new Error(`The document has no page ${url}`);\r\n }\r\n } else {\r\n // Link to an external url\r\n options.A = this.ref({\r\n S: 'URI',\r\n URI: new String(url)\r\n });\r\n options.A.end();\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _markup(x, y, w, h, options = {}) {\r\n const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\r\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n highlight(x, y, w, h, options = {}) {\r\n options.Subtype = 'Highlight';\r\n if (options.color == null) {\r\n options.color = [241, 238, 148];\r\n }\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n underline(x, y, w, h, options = {}) {\r\n options.Subtype = 'Underline';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n strike(x, y, w, h, options = {}) {\r\n options.Subtype = 'StrikeOut';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n lineAnnotation(x1, y1, x2, y2, options = {}) {\r\n options.Subtype = 'Line';\r\n options.Contents = new String();\r\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\r\n return this.annotate(x1, y1, x2, y2, options);\r\n },\r\n\r\n rectAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Square';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n ellipseAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Circle';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n textAnnotation(x, y, w, h, text, options = {}) {\r\n options.Subtype = 'FreeText';\r\n options.Contents = new String(text);\r\n options.DA = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _convertRect(x1, y1, w, h) {\r\n // flip y1 and y2\r\n let y2 = y1;\r\n y1 += h;\r\n\r\n // make x2\r\n let x2 = x1 + w;\r\n\r\n // apply current transformation matrix to points\r\n const [m0, m1, m2, m3, m4, m5] = this._ctm;\r\n x1 = m0 * x1 + m2 * y1 + m4;\r\n y1 = m1 * x1 + m3 * y1 + m5;\r\n x2 = m0 * x2 + m2 * y2 + m4;\r\n y2 = m1 * x2 + m3 * y2 + m5;\r\n\r\n return [x1, y1, x2, y2];\r\n }\r\n};\r\n","class PDFOutline {\r\n constructor(document, parent, title, dest, options = { expanded: false }) {\r\n this.document = document;\r\n this.options = options;\r\n this.outlineData = {};\r\n\r\n if (dest !== null) {\r\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\r\n }\r\n\r\n if (parent !== null) {\r\n this.outlineData['Parent'] = parent;\r\n }\r\n\r\n if (title !== null) {\r\n this.outlineData['Title'] = new String(title);\r\n }\r\n\r\n this.dictionary = this.document.ref(this.outlineData);\r\n this.children = [];\r\n }\r\n\r\n addItem(title, options = { expanded: false }) {\r\n const result = new PDFOutline(\r\n this.document,\r\n this.dictionary,\r\n title,\r\n this.document.page,\r\n options\r\n );\r\n this.children.push(result);\r\n\r\n return result;\r\n }\r\n\r\n endOutline() {\r\n if (this.children.length > 0) {\r\n if (this.options.expanded) {\r\n this.outlineData.Count = this.children.length;\r\n }\r\n\r\n const first = this.children[0],\r\n last = this.children[this.children.length - 1];\r\n this.outlineData.First = first.dictionary;\r\n this.outlineData.Last = last.dictionary;\r\n\r\n for (let i = 0, len = this.children.length; i < len; i++) {\r\n const child = this.children[i];\r\n if (i > 0) {\r\n child.outlineData.Prev = this.children[i - 1].dictionary;\r\n }\r\n if (i < this.children.length - 1) {\r\n child.outlineData.Next = this.children[i + 1].dictionary;\r\n }\r\n child.endOutline();\r\n }\r\n }\r\n\r\n return this.dictionary.end();\r\n }\r\n}\r\n\r\nexport default PDFOutline;\r\n","import PDFOutline from '../outline';\r\n\r\nexport default {\r\n initOutline() {\r\n return (this.outline = new PDFOutline(this, null, null, null));\r\n },\r\n\r\n endOutline() {\r\n this.outline.endOutline();\r\n if (this.outline.children.length > 0) {\r\n this._root.data.Outlines = this.outline.dictionary;\r\n return (this._root.data.PageMode = 'UseOutlines');\r\n }\r\n }\r\n};\r\n","/*\r\nPDFDocument - represents an entire PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nimport stream from 'stream';\r\nimport fs from 'fs';\r\nimport PDFObject from './object';\r\nimport PDFReference from './reference';\r\nimport PDFPage from './page';\r\nimport PDFNameTree from './name_tree';\r\nimport PDFSecurity from './security';\r\nimport ColorMixin from './mixins/color';\r\nimport VectorMixin from './mixins/vector';\r\nimport FontsMixin from './mixins/fonts';\r\nimport TextMixin from './mixins/text';\r\nimport ImagesMixin from './mixins/images';\r\nimport AnnotationsMixin from './mixins/annotations';\r\nimport OutlineMixin from './mixins/outline';\r\n\r\nclass PDFDocument extends stream.Readable {\r\n constructor(options = {}) {\r\n super(options);\r\n this.options = options;\r\n\r\n // PDF version\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n this.version = 1.4;\r\n break;\r\n case '1.5':\r\n this.version = 1.5;\r\n break;\r\n case '1.6':\r\n this.version = 1.6;\r\n break;\r\n case '1.7':\r\n case '1.7ext3':\r\n this.version = 1.7;\r\n break;\r\n default:\r\n this.version = 1.3;\r\n break;\r\n }\r\n\r\n // Whether streams should be compressed\r\n this.compress =\r\n this.options.compress != null ? this.options.compress : true;\r\n\r\n this._pageBuffer = [];\r\n this._pageBufferStart = 0;\r\n\r\n // The PDF object store\r\n this._offsets = [];\r\n this._waiting = 0;\r\n this._ended = false;\r\n this._offset = 0;\r\n const Pages = this.ref({\r\n Type: 'Pages',\r\n Count: 0,\r\n Kids: []\r\n });\r\n\r\n const Names = this.ref({\r\n Dests: new PDFNameTree()\r\n });\r\n\r\n this._root = this.ref({\r\n Type: 'Catalog',\r\n Pages,\r\n Names\r\n });\r\n\r\n // The current page\r\n this.page = null;\r\n\r\n // Initialize mixins\r\n this.initColor();\r\n this.initVector();\r\n this.initFonts(options.font);\r\n this.initText();\r\n this.initImages();\r\n this.initOutline();\r\n\r\n // Initialize the metadata\r\n this.info = {\r\n Producer: 'PDFKit',\r\n Creator: 'PDFKit',\r\n CreationDate: new Date()\r\n };\r\n\r\n if (this.options.info) {\r\n for (let key in this.options.info) {\r\n const val = this.options.info[key];\r\n this.info[key] = val;\r\n }\r\n }\r\n\r\n // Generate file ID\r\n this._id = PDFSecurity.generateFileID(this.info);\r\n\r\n // Initialize security settings\r\n this._security = PDFSecurity.create(this, options);\r\n\r\n // Write the header\r\n // PDF version\r\n this._write(`%PDF-${this.version}`);\r\n\r\n // 4 binary chars, as recommended by the spec\r\n this._write('%\\xFF\\xFF\\xFF\\xFF');\r\n\r\n // Add the first page\r\n if (this.options.autoFirstPage !== false) {\r\n this.addPage();\r\n }\r\n }\r\n\r\n addPage(options) {\r\n // end the current page if needed\r\n if (options == null) {\r\n ({ options } = this);\r\n }\r\n if (!this.options.bufferPages) {\r\n this.flushPages();\r\n }\r\n\r\n // create a page object\r\n this.page = new PDFPage(this, options);\r\n this._pageBuffer.push(this.page);\r\n\r\n // add the page to the object store\r\n const pages = this._root.data.Pages.data;\r\n pages.Kids.push(this.page.dictionary);\r\n pages.Count++;\r\n\r\n // reset x and y coordinates\r\n this.x = this.page.margins.left;\r\n this.y = this.page.margins.top;\r\n\r\n // flip PDF coordinate system so that the origin is in\r\n // the top left rather than the bottom left\r\n this._ctm = [1, 0, 0, 1, 0, 0];\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n\r\n this.emit('pageAdded');\r\n\r\n return this;\r\n }\r\n\r\n bufferedPageRange() {\r\n return { start: this._pageBufferStart, count: this._pageBuffer.length };\r\n }\r\n\r\n switchToPage(n) {\r\n let page;\r\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\r\n throw new Error(\r\n `switchToPage(${n}) out of bounds, current buffer covers pages ${\r\n this._pageBufferStart\r\n } to ${this._pageBufferStart + this._pageBuffer.length - 1}`\r\n );\r\n }\r\n\r\n return (this.page = page);\r\n }\r\n\r\n flushPages() {\r\n // this local variable exists so we're future-proof against\r\n // reentrant calls to flushPages.\r\n const pages = this._pageBuffer;\r\n this._pageBuffer = [];\r\n this._pageBufferStart += pages.length;\r\n for (let page of pages) {\r\n page.end();\r\n }\r\n }\r\n\r\n addNamedDestination(name, ...args) {\r\n if (args.length === 0) {\r\n args = ['XYZ', null, null, null];\r\n }\r\n if (args[0] === 'XYZ' && args[2] !== null) {\r\n args[2] = this.page.height - args[2];\r\n }\r\n args.unshift(this.page.dictionary);\r\n this._root.data.Names.data.Dests.add(name, args);\r\n }\r\n\r\n ref(data) {\r\n const ref = new PDFReference(this, this._offsets.length + 1, data);\r\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\r\n this._waiting++;\r\n return ref;\r\n }\r\n\r\n _read() {}\r\n // do nothing, but this method is required by node\r\n\r\n _write(data) {\r\n if (!Buffer.isBuffer(data)) {\r\n data = new Buffer(data + '\\n', 'binary');\r\n }\r\n\r\n this.push(data);\r\n return (this._offset += data.length);\r\n }\r\n\r\n addContent(data) {\r\n this.page.write(data);\r\n return this;\r\n }\r\n\r\n _refEnd(ref) {\r\n this._offsets[ref.id - 1] = ref.offset;\r\n if (--this._waiting === 0 && this._ended) {\r\n this._finalize();\r\n return (this._ended = false);\r\n }\r\n }\r\n\r\n write(filename, fn) {\r\n // print a deprecation warning with a stacktrace\r\n const err = new Error(`\\\r\nPDFDocument#write is deprecated, and will be removed in a future version of PDFKit. \\\r\nPlease pipe the document into a Node stream.\\\r\n`);\r\n\r\n console.warn(err.stack);\r\n\r\n this.pipe(fs.createWriteStream(filename));\r\n this.end();\r\n return this.once('end', fn);\r\n }\r\n\r\n end() {\r\n this.flushPages();\r\n this._info = this.ref();\r\n for (let key in this.info) {\r\n let val = this.info[key];\r\n if (typeof val === 'string') {\r\n val = new String(val);\r\n }\r\n\r\n let entry = this.ref(val);\r\n entry.end();\r\n\r\n this._info.data[key] = entry;\r\n }\r\n\r\n this._info.end();\r\n\r\n for (let name in this._fontFamilies) {\r\n const font = this._fontFamilies[name];\r\n font.finalize();\r\n }\r\n\r\n this.endOutline();\r\n\r\n this._root.end();\r\n this._root.data.Pages.end();\r\n this._root.data.Names.end();\r\n\r\n if (this._security) {\r\n this._security.end();\r\n }\r\n\r\n if (this._waiting === 0) {\r\n return this._finalize();\r\n } else {\r\n return (this._ended = true);\r\n }\r\n }\r\n\r\n _finalize(fn) {\r\n // generate xref\r\n const xRefOffset = this._offset;\r\n this._write('xref');\r\n this._write(`0 ${this._offsets.length + 1}`);\r\n this._write('0000000000 65535 f ');\r\n\r\n for (let offset of this._offsets) {\r\n offset = `0000000000${offset}`.slice(-10);\r\n this._write(offset + ' 00000 n ');\r\n }\r\n\r\n // trailer\r\n const trailer = {\r\n Size: this._offsets.length + 1,\r\n Root: this._root,\r\n Info: this._info,\r\n ID: [this._id, this._id]\r\n };\r\n if (this._security) {\r\n trailer.Encrypt = this._security.dictionary;\r\n }\r\n\r\n this._write('trailer');\r\n this._write(PDFObject.convert(trailer));\r\n\r\n this._write('startxref');\r\n this._write(`${xRefOffset}`);\r\n this._write('%%EOF');\r\n\r\n // end the stream\r\n return this.push(null);\r\n }\r\n\r\n toString() {\r\n return '[object PDFDocument]';\r\n }\r\n}\r\n\r\nconst mixin = methods => {\r\n Object.assign(PDFDocument.prototype, methods);\r\n};\r\n\r\nmixin(ColorMixin);\r\nmixin(VectorMixin);\r\nmixin(FontsMixin);\r\nmixin(TextMixin);\r\nmixin(ImagesMixin);\r\nmixin(AnnotationsMixin);\r\nmixin(OutlineMixin);\r\n\r\nexport default PDFDocument;\r\n"],"names":["PDFAbstractReference","toString","Error","PDFNameTree","constructor","_items","add","key","val","get","sortedKeys","Object","keys","sort","a","b","localeCompare","out","length","first","last","push","PDFObject","convert","String","join","pad","str","Array","slice","escapableRe","escapable","swapBytes","buff","l","i","end","object","encryptFn","string","isUnicode","charCodeAt","stringBuffer","Buffer","from","valueOf","replace","c","isBuffer","Date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","isArray","items","map","e","call","number","n","Math","round","PDFReference","document","id","data","gen","compress","Filter","uncompressedLength","buffer","write","chunk","Length","finalize","offset","_offset","_security","getEncryptFn","concat","zlib","deflateSync","_write","_refEnd","DEFAULT_MARGINS","top","left","bottom","right","SIZES","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","A10","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","B10","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","PDFPage","options","size","layout","margin","margins","dimensions","toUpperCase","width","height","content","ref","resources","ProcSet","dictionary","Type","Parent","_root","Pages","MediaBox","Contents","Resources","fonts","Font","xobjects","XObject","ext_gstates","ExtGState","patterns","Pattern","annotations","Annots","maxY","inRange","value","rangeGroup","startRange","endRange","middleRange","floor","arrayIndex","unassigned_code_points","isUnassignedCodePoint","character","commonly_mapped_to_nothing","isCommonlyMappedToNothing","non_ASCII_space_characters","isNonASCIISpaceCharacter","non_ASCII_controls_characters","non_character_codepoints","prohibited_characters","isProhibitedCharacter","bidirectional_r_al","isBidirectionalRAL","bidirectional_l","isBidirectionalL","mapping2space","mapping2nothing","getCodePoint","codePointAt","x","toCodePoints","input","codepoints","before","next","saslprep","opts","TypeError","mapped_input","filter","normalized_input","fromCodePoint","apply","normalize","normalized_map","hasProhibited","some","allowUnassigned","hasUnassigned","hasBidiRAL","hasBidiL","isFirstBidiRAL","isLastBidiRAL","PDFSecurity","generateFileID","info","infoStr","CreationDate","getTime","hasOwnProperty","wordArrayToBuffer","CryptoJS","MD5","generateRandomWordArray","bytes","lib","WordArray","random","create","ownerPassword","userPassword","_setupEncryption","pdfVersion","version","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","v","r","permissions","keyBits","getPermissionsR2","getPermissionsR3","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","getOwnerPasswordR2R3R4","encryptionKey","getEncryptionKeyR2R3R4","_id","userPasswordEntry","getUserPasswordR2","getUserPasswordR3R4","V","CF","StdCF","AuthEvent","CFM","StmF","StrF","R","O","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","getUserPasswordR5","userKeySalt","words","userEncryptionKeyEntry","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerKeySalt","ownerEncryptionKeyEntry","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","obj","digest","clone","sigBytes","min","RC4","encrypt","ciphertext","iv","mode","CBC","padding","Pkcs7","AES","permissionObject","printing","modifying","copying","annotating","fillingForms","contentAccessibility","documentAssembly","documentId","cipher","xorRound","ceil","j","lsbFirstWord","validationSalt","keySalt","SHA256","NoPadding","ECB","password","index","code","PASSWORD_PADDING","unescape","encodeURIComponent","wordArray","byteArray","PDFGradient","doc","stops","embedded","transform","stop","pos","color","opacity","_normalizeColor","_colorSpace","max","setTransform","m11","m12","m21","m22","dx","dy","embed","m","fn","matrix","bounds","encode","stopsLength","FunctionType","Domain","N","Functions","Bounds","Encode","_gradCount","shader","pattern","PatternType","Shading","Matrix","grad","opacityGradient","pageBBox","page","form","Subtype","FormType","BBox","Group","S","CS","Sh1","gstate","SMask","G","opacityPattern","PaintType","TilingType","XStep","YStep","Gs1","op","m0","m1","m2","m3","m4","m5","_ctm","addContent","PDFLinearGradient","x1","y1","x2","y2","ShadingType","ColorSpace","Coords","Function","Extend","PDFRadialGradient","r1","r2","Gradient","initColor","_opacityRegistry","_opacityCount","charAt","hex","parseInt","namedColors","part","_setColor","stroke","_setColorSpace","space","fillColor","set","fillOpacity","_fillColor","strokeColor","strokeOpacity","_doOpacity","name","ca","CA","linearGradient","radialGradient","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","cx","cy","px","py","sx","sy","parameters","A","C","H","h","L","M","Q","q","s","T","t","Z","z","parse","path","cmd","ret","args","curArg","foundDecimal","params","includes","commands","runners","moveTo","bezierCurveTo","quadraticCurveTo","solveArc","lineTo","closePath","y","coords","rx","ry","rot","large","sweep","ex","ey","segs","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","th","PI","sin_th","sin","cos_th","cos","abs","pl","sqrt","a00","a01","a10","a11","x0","y0","d","sfactor_sq","sfactor","xc","yc","th0","atan2","th1","th_arc","segments","result","th2","th3","th_half","x3","y3","SVGPath","KAPPA","initVector","_ctmStack","save","restore","pop","lineWidth","w","_CAP_STYLES","BUTT","ROUND","SQUARE","lineCap","_JOIN_STYLES","MITER","BEVEL","lineJoin","miterLimit","dash","originalLength","valid","every","Number","isFinite","JSON","stringify","phase","undash","cp1x","cp1y","cp2x","cp2y","cpx","cpy","rect","roundedRect","ellipse","xe","ye","xm","ym","circle","radius","arc","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","dir","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","polygon","points","shift","point","_windingRule","rule","test","fill","fillAndStroke","isFillRule","clip","values","translate","rotate","angle","rad","origin","scale","xFactor","yFactor","WIN_ANSI_MAP","characters","split","AFMFont","open","filename","fs","readFileSync","contents","attributes","glyphWidths","boundingBoxes","kernPairs","charWidths","char","bbox","ascender","descender","xHeight","capHeight","lineGap","section","line","match","encodeText","text","res","len","glyphsForString","glyphs","charCode","characterToGlyph","widthOfGlyph","glyph","getKernPair","advancesForGlyphs","advances","PDFFont","widthOfString","lineHeight","includeGap","gap","STANDARD_FONTS","Courier","__dirname","Helvetica","Symbol","ZapfDingbats","StandardFont","font","BaseFont","Encoding","encoded","positions","xAdvance","yAdvance","xOffset","yOffset","advanceWidth","advance","isStandardFont","toHex","num","EmbeddedFont","subset","createSubset","unicode","widths","getGlyph","postscriptName","unitsPerEm","ascent","descent","fontLayoutCache","layoutCache","layoutRun","features","run","position","layoutCached","cached","onlyWidth","needle","gid","includeGlyph","codePoints","isCFF","cff","fontFile","encodeStream","on","familyClass","sFamilyClass","undefined","flags","post","isFixedPitch","head","macStyle","italic","tag","fromCharCode","descriptor","FontName","Flags","FontBBox","minX","minY","maxX","ItalicAngle","italicAngle","Ascent","Descent","CapHeight","XHeight","StemV","FontFile3","FontFile2","descendantFont","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","W","DescendantFonts","ToUnicode","toUnicodeCmap","cmap","entries","PDFFontFactory","src","family","fontkit","Uint8Array","ArrayBuffer","initFonts","defaultFont","_fontFamilies","_fontCount","_fontSize","_font","_registeredFonts","cacheKey","fontSize","currentLineHeight","registerFont","LineWrapper","EventEmitter","indent","characterSpacing","wordSpacing","columns","columnGap","spaceLeft","startX","startY","column","ellipsis","continuedX","once","continued","align","lastLine","paragraphGap","wordWidth","word","eachWord","bk","breaker","LineBreaker","wordWidths","nextBreak","shouldContinue","lbk","fbk","mightGrow","mustShrink","required","wrap","nextY","nextSection","textWidth","wc","lc","emitLine","wordCount","emit","lh","addPage","initText","_line","bind","_lineGap","moveDown","lines","moveUp","_text","lineCallback","_initOptions","wrapper","_wrapper","_textOptions","heightOfString","Infinity","list","listType","unit","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","flatten","item","label","letter","times","diff","_fragment","assign","lineBreak","trim","spaceWidth","baseline","renderedWidth","link","goTo","destination","addNamedDestination","underline","strike","lineY","oblique","skew","encodedWord","positionsWord","hadOffset","addSegment","cur","flush","MARKERS","COLOR_SPACE_MAP","JPEG","marker","readUInt16BE","bits","channels","colorSpace","BitsPerComponent","Width","Height","PNGImage","image","PNG","imgData","hasAlphaChannel","Predictor","Colors","colors","Columns","palette","transparency","grayscale","rgb","mask","indexed","loadIndexedAlphaChannel","splitAlphaChannel","alphaChannel","sMask","Decode","decodePixels","pixels","p","colorCount","pixelCount","skipByteCount","colorIndex","PDFImage","exec","initImages","_imageRegistry","_imageCount","bh","bp","bw","ip","left1","openImage","wp","hp","fit","cover","valign","annotate","Rect","_convertRect","Border","Dest","note","Name","D","url","pages","Kids","URI","_markup","QuadPoints","highlight","lineAnnotation","rectAnnotation","ellipseAnnotation","textAnnotation","DA","PDFOutline","parent","title","dest","expanded","outlineData","children","addItem","endOutline","Count","First","Last","child","Prev","Next","initOutline","outline","Outlines","PageMode","PDFDocument","stream","Readable","_pageBuffer","_pageBufferStart","_offsets","_waiting","_ended","Names","Dests","Producer","Creator","autoFirstPage","bufferPages","flushPages","bufferedPageRange","start","count","switchToPage","unshift","_read","_finalize","err","console","warn","stack","pipe","createWriteStream","_info","entry","xRefOffset","trailer","Size","Root","Info","ID","Encrypt","mixin","methods","prototype","ColorMixin","VectorMixin","FontsMixin","TextMixin","ImagesMixin","AnnotationsMixin","OutlineMixin"],"mappings":"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"}