util.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881
  1. /**
  2. * @licstart The following is the entire license notice for the
  3. * Javascript code in this page
  4. *
  5. * Copyright 2019 Mozilla Foundation
  6. *
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. *
  19. * @licend The above is the entire license notice for the
  20. * Javascript code in this page
  21. */
  22. "use strict";
  23. Object.defineProperty(exports, "__esModule", {
  24. value: true
  25. });
  26. exports.arrayByteLength = arrayByteLength;
  27. exports.arraysToBytes = arraysToBytes;
  28. exports.assert = assert;
  29. exports.bytesToString = bytesToString;
  30. exports.createPromiseCapability = createPromiseCapability;
  31. exports.getVerbosityLevel = getVerbosityLevel;
  32. exports.info = info;
  33. exports.isArrayBuffer = isArrayBuffer;
  34. exports.isArrayEqual = isArrayEqual;
  35. exports.isBool = isBool;
  36. exports.isEmptyObj = isEmptyObj;
  37. exports.isNum = isNum;
  38. exports.isString = isString;
  39. exports.isSpace = isSpace;
  40. exports.isSameOrigin = isSameOrigin;
  41. exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
  42. exports.isLittleEndian = isLittleEndian;
  43. exports.isEvalSupported = isEvalSupported;
  44. exports.log2 = log2;
  45. exports.readInt8 = readInt8;
  46. exports.readUint16 = readUint16;
  47. exports.readUint32 = readUint32;
  48. exports.removeNullCharacters = removeNullCharacters;
  49. exports.setVerbosityLevel = setVerbosityLevel;
  50. exports.shadow = shadow;
  51. exports.string32 = string32;
  52. exports.stringToBytes = stringToBytes;
  53. exports.stringToPDFString = stringToPDFString;
  54. exports.stringToUTF8String = stringToUTF8String;
  55. exports.utf8StringToString = utf8StringToString;
  56. exports.warn = warn;
  57. exports.unreachable = unreachable;
  58. Object.defineProperty(exports, "ReadableStream", {
  59. enumerable: true,
  60. get: function get() {
  61. return _streams_polyfill.ReadableStream;
  62. }
  63. });
  64. Object.defineProperty(exports, "URL", {
  65. enumerable: true,
  66. get: function get() {
  67. return _url_polyfill.URL;
  68. }
  69. });
  70. exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = void 0;
  71. require("./compatibility");
  72. var _streams_polyfill = require("./streams_polyfill");
  73. var _url_polyfill = require("./url_polyfill");
  74. function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
  75. var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
  76. exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
  77. var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
  78. exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
  79. var NativeImageDecoding = {
  80. NONE: 'none',
  81. DECODE: 'decode',
  82. DISPLAY: 'display'
  83. };
  84. exports.NativeImageDecoding = NativeImageDecoding;
  85. var PermissionFlag = {
  86. PRINT: 0x04,
  87. MODIFY_CONTENTS: 0x08,
  88. COPY: 0x10,
  89. MODIFY_ANNOTATIONS: 0x20,
  90. FILL_INTERACTIVE_FORMS: 0x100,
  91. COPY_FOR_ACCESSIBILITY: 0x200,
  92. ASSEMBLE: 0x400,
  93. PRINT_HIGH_QUALITY: 0x800
  94. };
  95. exports.PermissionFlag = PermissionFlag;
  96. var TextRenderingMode = {
  97. FILL: 0,
  98. STROKE: 1,
  99. FILL_STROKE: 2,
  100. INVISIBLE: 3,
  101. FILL_ADD_TO_PATH: 4,
  102. STROKE_ADD_TO_PATH: 5,
  103. FILL_STROKE_ADD_TO_PATH: 6,
  104. ADD_TO_PATH: 7,
  105. FILL_STROKE_MASK: 3,
  106. ADD_TO_PATH_FLAG: 4
  107. };
  108. exports.TextRenderingMode = TextRenderingMode;
  109. var ImageKind = {
  110. GRAYSCALE_1BPP: 1,
  111. RGB_24BPP: 2,
  112. RGBA_32BPP: 3
  113. };
  114. exports.ImageKind = ImageKind;
  115. var AnnotationType = {
  116. TEXT: 1,
  117. LINK: 2,
  118. FREETEXT: 3,
  119. LINE: 4,
  120. SQUARE: 5,
  121. CIRCLE: 6,
  122. POLYGON: 7,
  123. POLYLINE: 8,
  124. HIGHLIGHT: 9,
  125. UNDERLINE: 10,
  126. SQUIGGLY: 11,
  127. STRIKEOUT: 12,
  128. STAMP: 13,
  129. CARET: 14,
  130. INK: 15,
  131. POPUP: 16,
  132. FILEATTACHMENT: 17,
  133. SOUND: 18,
  134. MOVIE: 19,
  135. WIDGET: 20,
  136. SCREEN: 21,
  137. PRINTERMARK: 22,
  138. TRAPNET: 23,
  139. WATERMARK: 24,
  140. THREED: 25,
  141. REDACT: 26
  142. };
  143. exports.AnnotationType = AnnotationType;
  144. var AnnotationFlag = {
  145. INVISIBLE: 0x01,
  146. HIDDEN: 0x02,
  147. PRINT: 0x04,
  148. NOZOOM: 0x08,
  149. NOROTATE: 0x10,
  150. NOVIEW: 0x20,
  151. READONLY: 0x40,
  152. LOCKED: 0x80,
  153. TOGGLENOVIEW: 0x100,
  154. LOCKEDCONTENTS: 0x200
  155. };
  156. exports.AnnotationFlag = AnnotationFlag;
  157. var AnnotationFieldFlag = {
  158. READONLY: 0x0000001,
  159. REQUIRED: 0x0000002,
  160. NOEXPORT: 0x0000004,
  161. MULTILINE: 0x0001000,
  162. PASSWORD: 0x0002000,
  163. NOTOGGLETOOFF: 0x0004000,
  164. RADIO: 0x0008000,
  165. PUSHBUTTON: 0x0010000,
  166. COMBO: 0x0020000,
  167. EDIT: 0x0040000,
  168. SORT: 0x0080000,
  169. FILESELECT: 0x0100000,
  170. MULTISELECT: 0x0200000,
  171. DONOTSPELLCHECK: 0x0400000,
  172. DONOTSCROLL: 0x0800000,
  173. COMB: 0x1000000,
  174. RICHTEXT: 0x2000000,
  175. RADIOSINUNISON: 0x2000000,
  176. COMMITONSELCHANGE: 0x4000000
  177. };
  178. exports.AnnotationFieldFlag = AnnotationFieldFlag;
  179. var AnnotationBorderStyleType = {
  180. SOLID: 1,
  181. DASHED: 2,
  182. BEVELED: 3,
  183. INSET: 4,
  184. UNDERLINE: 5
  185. };
  186. exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
  187. var StreamType = {
  188. UNKNOWN: 0,
  189. FLATE: 1,
  190. LZW: 2,
  191. DCT: 3,
  192. JPX: 4,
  193. JBIG: 5,
  194. A85: 6,
  195. AHX: 7,
  196. CCF: 8,
  197. RL: 9
  198. };
  199. exports.StreamType = StreamType;
  200. var FontType = {
  201. UNKNOWN: 0,
  202. TYPE1: 1,
  203. TYPE1C: 2,
  204. CIDFONTTYPE0: 3,
  205. CIDFONTTYPE0C: 4,
  206. TRUETYPE: 5,
  207. CIDFONTTYPE2: 6,
  208. TYPE3: 7,
  209. OPENTYPE: 8,
  210. TYPE0: 9,
  211. MMTYPE1: 10
  212. };
  213. exports.FontType = FontType;
  214. var VerbosityLevel = {
  215. ERRORS: 0,
  216. WARNINGS: 1,
  217. INFOS: 5
  218. };
  219. exports.VerbosityLevel = VerbosityLevel;
  220. var CMapCompressionType = {
  221. NONE: 0,
  222. BINARY: 1,
  223. STREAM: 2
  224. };
  225. exports.CMapCompressionType = CMapCompressionType;
  226. var OPS = {
  227. dependency: 1,
  228. setLineWidth: 2,
  229. setLineCap: 3,
  230. setLineJoin: 4,
  231. setMiterLimit: 5,
  232. setDash: 6,
  233. setRenderingIntent: 7,
  234. setFlatness: 8,
  235. setGState: 9,
  236. save: 10,
  237. restore: 11,
  238. transform: 12,
  239. moveTo: 13,
  240. lineTo: 14,
  241. curveTo: 15,
  242. curveTo2: 16,
  243. curveTo3: 17,
  244. closePath: 18,
  245. rectangle: 19,
  246. stroke: 20,
  247. closeStroke: 21,
  248. fill: 22,
  249. eoFill: 23,
  250. fillStroke: 24,
  251. eoFillStroke: 25,
  252. closeFillStroke: 26,
  253. closeEOFillStroke: 27,
  254. endPath: 28,
  255. clip: 29,
  256. eoClip: 30,
  257. beginText: 31,
  258. endText: 32,
  259. setCharSpacing: 33,
  260. setWordSpacing: 34,
  261. setHScale: 35,
  262. setLeading: 36,
  263. setFont: 37,
  264. setTextRenderingMode: 38,
  265. setTextRise: 39,
  266. moveText: 40,
  267. setLeadingMoveText: 41,
  268. setTextMatrix: 42,
  269. nextLine: 43,
  270. showText: 44,
  271. showSpacedText: 45,
  272. nextLineShowText: 46,
  273. nextLineSetSpacingShowText: 47,
  274. setCharWidth: 48,
  275. setCharWidthAndBounds: 49,
  276. setStrokeColorSpace: 50,
  277. setFillColorSpace: 51,
  278. setStrokeColor: 52,
  279. setStrokeColorN: 53,
  280. setFillColor: 54,
  281. setFillColorN: 55,
  282. setStrokeGray: 56,
  283. setFillGray: 57,
  284. setStrokeRGBColor: 58,
  285. setFillRGBColor: 59,
  286. setStrokeCMYKColor: 60,
  287. setFillCMYKColor: 61,
  288. shadingFill: 62,
  289. beginInlineImage: 63,
  290. beginImageData: 64,
  291. endInlineImage: 65,
  292. paintXObject: 66,
  293. markPoint: 67,
  294. markPointProps: 68,
  295. beginMarkedContent: 69,
  296. beginMarkedContentProps: 70,
  297. endMarkedContent: 71,
  298. beginCompat: 72,
  299. endCompat: 73,
  300. paintFormXObjectBegin: 74,
  301. paintFormXObjectEnd: 75,
  302. beginGroup: 76,
  303. endGroup: 77,
  304. beginAnnotations: 78,
  305. endAnnotations: 79,
  306. beginAnnotation: 80,
  307. endAnnotation: 81,
  308. paintJpegXObject: 82,
  309. paintImageMaskXObject: 83,
  310. paintImageMaskXObjectGroup: 84,
  311. paintImageXObject: 85,
  312. paintInlineImageXObject: 86,
  313. paintInlineImageXObjectGroup: 87,
  314. paintImageXObjectRepeat: 88,
  315. paintImageMaskXObjectRepeat: 89,
  316. paintSolidColorImageMask: 90,
  317. constructPath: 91
  318. };
  319. exports.OPS = OPS;
  320. var UNSUPPORTED_FEATURES = {
  321. unknown: 'unknown',
  322. forms: 'forms',
  323. javaScript: 'javaScript',
  324. smask: 'smask',
  325. shadingPattern: 'shadingPattern',
  326. font: 'font'
  327. };
  328. exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
  329. var PasswordResponses = {
  330. NEED_PASSWORD: 1,
  331. INCORRECT_PASSWORD: 2
  332. };
  333. exports.PasswordResponses = PasswordResponses;
  334. var verbosity = VerbosityLevel.WARNINGS;
  335. function setVerbosityLevel(level) {
  336. if (Number.isInteger(level)) {
  337. verbosity = level;
  338. }
  339. }
  340. function getVerbosityLevel() {
  341. return verbosity;
  342. }
  343. function info(msg) {
  344. if (verbosity >= VerbosityLevel.INFOS) {
  345. console.log('Info: ' + msg);
  346. }
  347. }
  348. function warn(msg) {
  349. if (verbosity >= VerbosityLevel.WARNINGS) {
  350. console.log('Warning: ' + msg);
  351. }
  352. }
  353. function unreachable(msg) {
  354. throw new Error(msg);
  355. }
  356. function assert(cond, msg) {
  357. if (!cond) {
  358. unreachable(msg);
  359. }
  360. }
  361. function isSameOrigin(baseUrl, otherUrl) {
  362. try {
  363. var base = new _url_polyfill.URL(baseUrl);
  364. if (!base.origin || base.origin === 'null') {
  365. return false;
  366. }
  367. } catch (e) {
  368. return false;
  369. }
  370. var other = new _url_polyfill.URL(otherUrl, base);
  371. return base.origin === other.origin;
  372. }
  373. function _isValidProtocol(url) {
  374. if (!url) {
  375. return false;
  376. }
  377. switch (url.protocol) {
  378. case 'http:':
  379. case 'https:':
  380. case 'ftp:':
  381. case 'mailto:':
  382. case 'tel:':
  383. return true;
  384. default:
  385. return false;
  386. }
  387. }
  388. function createValidAbsoluteUrl(url, baseUrl) {
  389. if (!url) {
  390. return null;
  391. }
  392. try {
  393. var absoluteUrl = baseUrl ? new _url_polyfill.URL(url, baseUrl) : new _url_polyfill.URL(url);
  394. if (_isValidProtocol(absoluteUrl)) {
  395. return absoluteUrl;
  396. }
  397. } catch (ex) {}
  398. return null;
  399. }
  400. function shadow(obj, prop, value) {
  401. Object.defineProperty(obj, prop, {
  402. value: value,
  403. enumerable: true,
  404. configurable: true,
  405. writable: false
  406. });
  407. return value;
  408. }
  409. var PasswordException = function PasswordExceptionClosure() {
  410. function PasswordException(msg, code) {
  411. this.name = 'PasswordException';
  412. this.message = msg;
  413. this.code = code;
  414. }
  415. PasswordException.prototype = new Error();
  416. PasswordException.constructor = PasswordException;
  417. return PasswordException;
  418. }();
  419. exports.PasswordException = PasswordException;
  420. var UnknownErrorException = function UnknownErrorExceptionClosure() {
  421. function UnknownErrorException(msg, details) {
  422. this.name = 'UnknownErrorException';
  423. this.message = msg;
  424. this.details = details;
  425. }
  426. UnknownErrorException.prototype = new Error();
  427. UnknownErrorException.constructor = UnknownErrorException;
  428. return UnknownErrorException;
  429. }();
  430. exports.UnknownErrorException = UnknownErrorException;
  431. var InvalidPDFException = function InvalidPDFExceptionClosure() {
  432. function InvalidPDFException(msg) {
  433. this.name = 'InvalidPDFException';
  434. this.message = msg;
  435. }
  436. InvalidPDFException.prototype = new Error();
  437. InvalidPDFException.constructor = InvalidPDFException;
  438. return InvalidPDFException;
  439. }();
  440. exports.InvalidPDFException = InvalidPDFException;
  441. var MissingPDFException = function MissingPDFExceptionClosure() {
  442. function MissingPDFException(msg) {
  443. this.name = 'MissingPDFException';
  444. this.message = msg;
  445. }
  446. MissingPDFException.prototype = new Error();
  447. MissingPDFException.constructor = MissingPDFException;
  448. return MissingPDFException;
  449. }();
  450. exports.MissingPDFException = MissingPDFException;
  451. var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() {
  452. function UnexpectedResponseException(msg, status) {
  453. this.name = 'UnexpectedResponseException';
  454. this.message = msg;
  455. this.status = status;
  456. }
  457. UnexpectedResponseException.prototype = new Error();
  458. UnexpectedResponseException.constructor = UnexpectedResponseException;
  459. return UnexpectedResponseException;
  460. }();
  461. exports.UnexpectedResponseException = UnexpectedResponseException;
  462. var FormatError = function FormatErrorClosure() {
  463. function FormatError(msg) {
  464. this.message = msg;
  465. }
  466. FormatError.prototype = new Error();
  467. FormatError.prototype.name = 'FormatError';
  468. FormatError.constructor = FormatError;
  469. return FormatError;
  470. }();
  471. exports.FormatError = FormatError;
  472. var AbortException = function AbortExceptionClosure() {
  473. function AbortException(msg) {
  474. this.name = 'AbortException';
  475. this.message = msg;
  476. }
  477. AbortException.prototype = new Error();
  478. AbortException.constructor = AbortException;
  479. return AbortException;
  480. }();
  481. exports.AbortException = AbortException;
  482. var NullCharactersRegExp = /\x00/g;
  483. function removeNullCharacters(str) {
  484. if (typeof str !== 'string') {
  485. warn('The argument for removeNullCharacters must be a string.');
  486. return str;
  487. }
  488. return str.replace(NullCharactersRegExp, '');
  489. }
  490. function bytesToString(bytes) {
  491. assert(bytes !== null && _typeof(bytes) === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString');
  492. var length = bytes.length;
  493. var MAX_ARGUMENT_COUNT = 8192;
  494. if (length < MAX_ARGUMENT_COUNT) {
  495. return String.fromCharCode.apply(null, bytes);
  496. }
  497. var strBuf = [];
  498. for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
  499. var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
  500. var chunk = bytes.subarray(i, chunkEnd);
  501. strBuf.push(String.fromCharCode.apply(null, chunk));
  502. }
  503. return strBuf.join('');
  504. }
  505. function stringToBytes(str) {
  506. assert(typeof str === 'string', 'Invalid argument for stringToBytes');
  507. var length = str.length;
  508. var bytes = new Uint8Array(length);
  509. for (var i = 0; i < length; ++i) {
  510. bytes[i] = str.charCodeAt(i) & 0xFF;
  511. }
  512. return bytes;
  513. }
  514. function arrayByteLength(arr) {
  515. if (arr.length !== undefined) {
  516. return arr.length;
  517. }
  518. assert(arr.byteLength !== undefined);
  519. return arr.byteLength;
  520. }
  521. function arraysToBytes(arr) {
  522. if (arr.length === 1 && arr[0] instanceof Uint8Array) {
  523. return arr[0];
  524. }
  525. var resultLength = 0;
  526. var i,
  527. ii = arr.length;
  528. var item, itemLength;
  529. for (i = 0; i < ii; i++) {
  530. item = arr[i];
  531. itemLength = arrayByteLength(item);
  532. resultLength += itemLength;
  533. }
  534. var pos = 0;
  535. var data = new Uint8Array(resultLength);
  536. for (i = 0; i < ii; i++) {
  537. item = arr[i];
  538. if (!(item instanceof Uint8Array)) {
  539. if (typeof item === 'string') {
  540. item = stringToBytes(item);
  541. } else {
  542. item = new Uint8Array(item);
  543. }
  544. }
  545. itemLength = item.byteLength;
  546. data.set(item, pos);
  547. pos += itemLength;
  548. }
  549. return data;
  550. }
  551. function string32(value) {
  552. return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
  553. }
  554. function log2(x) {
  555. if (x <= 0) {
  556. return 0;
  557. }
  558. return Math.ceil(Math.log2(x));
  559. }
  560. function readInt8(data, start) {
  561. return data[start] << 24 >> 24;
  562. }
  563. function readUint16(data, offset) {
  564. return data[offset] << 8 | data[offset + 1];
  565. }
  566. function readUint32(data, offset) {
  567. return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
  568. }
  569. function isLittleEndian() {
  570. var buffer8 = new Uint8Array(4);
  571. buffer8[0] = 1;
  572. var view32 = new Uint32Array(buffer8.buffer, 0, 1);
  573. return view32[0] === 1;
  574. }
  575. function isEvalSupported() {
  576. try {
  577. new Function('');
  578. return true;
  579. } catch (e) {
  580. return false;
  581. }
  582. }
  583. var Util = function UtilClosure() {
  584. function Util() {}
  585. var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];
  586. Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
  587. rgbBuf[1] = r;
  588. rgbBuf[3] = g;
  589. rgbBuf[5] = b;
  590. return rgbBuf.join('');
  591. };
  592. Util.transform = function Util_transform(m1, m2) {
  593. return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
  594. };
  595. Util.applyTransform = function Util_applyTransform(p, m) {
  596. var xt = p[0] * m[0] + p[1] * m[2] + m[4];
  597. var yt = p[0] * m[1] + p[1] * m[3] + m[5];
  598. return [xt, yt];
  599. };
  600. Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
  601. var d = m[0] * m[3] - m[1] * m[2];
  602. var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
  603. var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
  604. return [xt, yt];
  605. };
  606. Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) {
  607. var p1 = Util.applyTransform(r, m);
  608. var p2 = Util.applyTransform(r.slice(2, 4), m);
  609. var p3 = Util.applyTransform([r[0], r[3]], m);
  610. var p4 = Util.applyTransform([r[2], r[1]], m);
  611. return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
  612. };
  613. Util.inverseTransform = function Util_inverseTransform(m) {
  614. var d = m[0] * m[3] - m[1] * m[2];
  615. return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
  616. };
  617. Util.apply3dTransform = function Util_apply3dTransform(m, v) {
  618. return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
  619. };
  620. Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) {
  621. var transpose = [m[0], m[2], m[1], m[3]];
  622. var a = m[0] * transpose[0] + m[1] * transpose[2];
  623. var b = m[0] * transpose[1] + m[1] * transpose[3];
  624. var c = m[2] * transpose[0] + m[3] * transpose[2];
  625. var d = m[2] * transpose[1] + m[3] * transpose[3];
  626. var first = (a + d) / 2;
  627. var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
  628. var sx = first + second || 1;
  629. var sy = first - second || 1;
  630. return [Math.sqrt(sx), Math.sqrt(sy)];
  631. };
  632. Util.normalizeRect = function Util_normalizeRect(rect) {
  633. var r = rect.slice(0);
  634. if (rect[0] > rect[2]) {
  635. r[0] = rect[2];
  636. r[2] = rect[0];
  637. }
  638. if (rect[1] > rect[3]) {
  639. r[1] = rect[3];
  640. r[3] = rect[1];
  641. }
  642. return r;
  643. };
  644. Util.intersect = function Util_intersect(rect1, rect2) {
  645. function compare(a, b) {
  646. return a - b;
  647. }
  648. var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
  649. orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
  650. result = [];
  651. rect1 = Util.normalizeRect(rect1);
  652. rect2 = Util.normalizeRect(rect2);
  653. if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
  654. result[0] = orderedX[1];
  655. result[2] = orderedX[2];
  656. } else {
  657. return false;
  658. }
  659. if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
  660. result[1] = orderedY[1];
  661. result[3] = orderedY[2];
  662. } else {
  663. return false;
  664. }
  665. return result;
  666. };
  667. return Util;
  668. }();
  669. exports.Util = Util;
  670. var PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC];
  671. function stringToPDFString(str) {
  672. var i,
  673. n = str.length,
  674. strBuf = [];
  675. if (str[0] === '\xFE' && str[1] === '\xFF') {
  676. for (i = 2; i < n; i += 2) {
  677. strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));
  678. }
  679. } else {
  680. for (i = 0; i < n; ++i) {
  681. var code = PDFStringTranslateTable[str.charCodeAt(i)];
  682. strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
  683. }
  684. }
  685. return strBuf.join('');
  686. }
  687. function stringToUTF8String(str) {
  688. return decodeURIComponent(escape(str));
  689. }
  690. function utf8StringToString(str) {
  691. return unescape(encodeURIComponent(str));
  692. }
  693. function isEmptyObj(obj) {
  694. for (var key in obj) {
  695. return false;
  696. }
  697. return true;
  698. }
  699. function isBool(v) {
  700. return typeof v === 'boolean';
  701. }
  702. function isNum(v) {
  703. return typeof v === 'number';
  704. }
  705. function isString(v) {
  706. return typeof v === 'string';
  707. }
  708. function isArrayBuffer(v) {
  709. return _typeof(v) === 'object' && v !== null && v.byteLength !== undefined;
  710. }
  711. function isArrayEqual(arr1, arr2) {
  712. if (arr1.length !== arr2.length) {
  713. return false;
  714. }
  715. return arr1.every(function (element, index) {
  716. return element === arr2[index];
  717. });
  718. }
  719. function isSpace(ch) {
  720. return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A;
  721. }
  722. function createPromiseCapability() {
  723. var capability = Object.create(null);
  724. var isSettled = false;
  725. Object.defineProperty(capability, 'settled', {
  726. get: function get() {
  727. return isSettled;
  728. }
  729. });
  730. capability.promise = new Promise(function (resolve, reject) {
  731. capability.resolve = function (data) {
  732. isSettled = true;
  733. resolve(data);
  734. };
  735. capability.reject = function (reason) {
  736. isSettled = true;
  737. reject(reason);
  738. };
  739. });
  740. return capability;
  741. }
  742. var createObjectURL = function createObjectURLClosure() {
  743. var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  744. return function createObjectURL(data, contentType) {
  745. var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  746. if (!forceDataSchema && _url_polyfill.URL.createObjectURL) {
  747. var blob = new Blob([data], {
  748. type: contentType
  749. });
  750. return _url_polyfill.URL.createObjectURL(blob);
  751. }
  752. var buffer = 'data:' + contentType + ';base64,';
  753. for (var i = 0, ii = data.length; i < ii; i += 3) {
  754. var b1 = data[i] & 0xFF;
  755. var b2 = data[i + 1] & 0xFF;
  756. var b3 = data[i + 2] & 0xFF;
  757. var d1 = b1 >> 2,
  758. d2 = (b1 & 3) << 4 | b2 >> 4;
  759. var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64;
  760. var d4 = i + 2 < ii ? b3 & 0x3F : 64;
  761. buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
  762. }
  763. return buffer;
  764. };
  765. }();
  766. exports.createObjectURL = createObjectURL;