api.js 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477
  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.getDocument = getDocument;
  27. exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
  28. exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0;
  29. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  30. var _util = require("../shared/util");
  31. var _display_utils = require("./display_utils");
  32. var _font_loader = require("./font_loader");
  33. var _api_compatibility = require("./api_compatibility");
  34. var _canvas = require("./canvas");
  35. var _global_scope = _interopRequireDefault(require("../shared/global_scope"));
  36. var _worker_options = require("./worker_options");
  37. var _message_handler = require("../shared/message_handler");
  38. var _metadata = require("./metadata");
  39. var _transport_stream = require("./transport_stream");
  40. var _webgl = require("./webgl");
  41. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  42. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  43. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  44. function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
  45. function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
  46. function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
  47. function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
  48. function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
  49. function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
  50. function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
  51. function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
  52. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  53. function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
  54. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  55. 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); }
  56. var DEFAULT_RANGE_CHUNK_SIZE = 65536;
  57. var isWorkerDisabled = false;
  58. var fallbackWorkerSrc;
  59. var fakeWorkerFilesLoader = null;
  60. {
  61. var useRequireEnsure = false;
  62. if (typeof window === 'undefined') {
  63. isWorkerDisabled = true;
  64. if (typeof require.ensure === 'undefined') {
  65. require.ensure = require('node-ensure');
  66. }
  67. useRequireEnsure = true;
  68. } else if (typeof require !== 'undefined' && typeof require.ensure === 'function') {
  69. useRequireEnsure = true;
  70. }
  71. if (typeof requirejs !== 'undefined' && requirejs.toUrl) {
  72. fallbackWorkerSrc = requirejs.toUrl('pdfjs-dist/build/pdf.worker.js');
  73. }
  74. var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs.load;
  75. fakeWorkerFilesLoader = useRequireEnsure ? function () {
  76. return new Promise(function (resolve, reject) {
  77. require.ensure([], function () {
  78. try {
  79. var worker;
  80. worker = require('../pdf.worker.js');
  81. resolve(worker.WorkerMessageHandler);
  82. } catch (ex) {
  83. reject(ex);
  84. }
  85. }, reject, 'pdfjsWorker');
  86. });
  87. } : dynamicLoaderSupported ? function () {
  88. return new Promise(function (resolve, reject) {
  89. requirejs(['pdfjs-dist/build/pdf.worker'], function (worker) {
  90. try {
  91. resolve(worker.WorkerMessageHandler);
  92. } catch (ex) {
  93. reject(ex);
  94. }
  95. }, reject);
  96. });
  97. } : null;
  98. if (!fallbackWorkerSrc && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && 'currentScript' in document) {
  99. var pdfjsFilePath = document.currentScript && document.currentScript.src;
  100. if (pdfjsFilePath) {
  101. fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2');
  102. }
  103. }
  104. }
  105. var createPDFNetworkStream;
  106. function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
  107. createPDFNetworkStream = pdfNetworkStreamFactory;
  108. }
  109. function getDocument(src) {
  110. var task = new PDFDocumentLoadingTask();
  111. var source;
  112. if (typeof src === 'string') {
  113. source = {
  114. url: src
  115. };
  116. } else if ((0, _util.isArrayBuffer)(src)) {
  117. source = {
  118. data: src
  119. };
  120. } else if (src instanceof PDFDataRangeTransport) {
  121. source = {
  122. range: src
  123. };
  124. } else {
  125. if (_typeof(src) !== 'object') {
  126. throw new Error('Invalid parameter in getDocument, ' + 'need either Uint8Array, string or a parameter object');
  127. }
  128. if (!src.url && !src.data && !src.range) {
  129. throw new Error('Invalid parameter object: need either .data, .range or .url');
  130. }
  131. source = src;
  132. }
  133. var params = Object.create(null);
  134. var rangeTransport = null,
  135. worker = null;
  136. for (var key in source) {
  137. if (key === 'url' && typeof window !== 'undefined') {
  138. params[key] = new _util.URL(source[key], window.location).href;
  139. continue;
  140. } else if (key === 'range') {
  141. rangeTransport = source[key];
  142. continue;
  143. } else if (key === 'worker') {
  144. worker = source[key];
  145. continue;
  146. } else if (key === 'data' && !(source[key] instanceof Uint8Array)) {
  147. var pdfBytes = source[key];
  148. if (typeof pdfBytes === 'string') {
  149. params[key] = (0, _util.stringToBytes)(pdfBytes);
  150. } else if (_typeof(pdfBytes) === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) {
  151. params[key] = new Uint8Array(pdfBytes);
  152. } else if ((0, _util.isArrayBuffer)(pdfBytes)) {
  153. params[key] = new Uint8Array(pdfBytes);
  154. } else {
  155. throw new Error('Invalid PDF binary data: either typed array, ' + 'string or array-like object is expected in the ' + 'data property.');
  156. }
  157. continue;
  158. }
  159. params[key] = source[key];
  160. }
  161. params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
  162. params.CMapReaderFactory = params.CMapReaderFactory || _display_utils.DOMCMapReaderFactory;
  163. params.ignoreErrors = params.stopAtErrors !== true;
  164. params.pdfBug = params.pdfBug === true;
  165. var NativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
  166. if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) {
  167. params.nativeImageDecoderSupport = _api_compatibility.apiCompatibilityParams.nativeImageDecoderSupport || _util.NativeImageDecoding.DECODE;
  168. }
  169. if (!Number.isInteger(params.maxImageSize)) {
  170. params.maxImageSize = -1;
  171. }
  172. if (typeof params.isEvalSupported !== 'boolean') {
  173. params.isEvalSupported = true;
  174. }
  175. if (typeof params.disableFontFace !== 'boolean') {
  176. params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false;
  177. }
  178. if (typeof params.disableRange !== 'boolean') {
  179. params.disableRange = false;
  180. }
  181. if (typeof params.disableStream !== 'boolean') {
  182. params.disableStream = false;
  183. }
  184. if (typeof params.disableAutoFetch !== 'boolean') {
  185. params.disableAutoFetch = false;
  186. }
  187. if (typeof params.disableCreateObjectURL !== 'boolean') {
  188. params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false;
  189. }
  190. (0, _util.setVerbosityLevel)(params.verbosity);
  191. if (!worker) {
  192. var workerParams = {
  193. postMessageTransfers: params.postMessageTransfers,
  194. verbosity: params.verbosity,
  195. port: _worker_options.GlobalWorkerOptions.workerPort
  196. };
  197. worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
  198. task._worker = worker;
  199. }
  200. var docId = task.docId;
  201. worker.promise.then(function () {
  202. if (task.destroyed) {
  203. throw new Error('Loading aborted');
  204. }
  205. return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) {
  206. if (task.destroyed) {
  207. throw new Error('Loading aborted');
  208. }
  209. var networkStream;
  210. if (rangeTransport) {
  211. networkStream = new _transport_stream.PDFDataTransportStream({
  212. length: params.length,
  213. initialData: params.initialData,
  214. progressiveDone: params.progressiveDone,
  215. disableRange: params.disableRange,
  216. disableStream: params.disableStream
  217. }, rangeTransport);
  218. } else if (!params.data) {
  219. networkStream = createPDFNetworkStream({
  220. url: params.url,
  221. length: params.length,
  222. httpHeaders: params.httpHeaders,
  223. withCredentials: params.withCredentials,
  224. rangeChunkSize: params.rangeChunkSize,
  225. disableRange: params.disableRange,
  226. disableStream: params.disableStream
  227. });
  228. }
  229. var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
  230. messageHandler.postMessageTransfers = worker.postMessageTransfers;
  231. var transport = new WorkerTransport(messageHandler, task, networkStream, params);
  232. task._transport = transport;
  233. messageHandler.send('Ready', null);
  234. });
  235. })["catch"](task._capability.reject);
  236. return task;
  237. }
  238. function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
  239. if (worker.destroyed) {
  240. return Promise.reject(new Error('Worker was destroyed'));
  241. }
  242. if (pdfDataRangeTransport) {
  243. source.length = pdfDataRangeTransport.length;
  244. source.initialData = pdfDataRangeTransport.initialData;
  245. source.progressiveDone = pdfDataRangeTransport.progressiveDone;
  246. }
  247. return worker.messageHandler.sendWithPromise('GetDocRequest', {
  248. docId: docId,
  249. apiVersion: '2.2.228',
  250. source: {
  251. data: source.data,
  252. url: source.url,
  253. password: source.password,
  254. disableAutoFetch: source.disableAutoFetch,
  255. rangeChunkSize: source.rangeChunkSize,
  256. length: source.length
  257. },
  258. maxImageSize: source.maxImageSize,
  259. disableFontFace: source.disableFontFace,
  260. disableCreateObjectURL: source.disableCreateObjectURL,
  261. postMessageTransfers: worker.postMessageTransfers,
  262. docBaseUrl: source.docBaseUrl,
  263. nativeImageDecoderSupport: source.nativeImageDecoderSupport,
  264. ignoreErrors: source.ignoreErrors,
  265. isEvalSupported: source.isEvalSupported
  266. }).then(function (workerId) {
  267. if (worker.destroyed) {
  268. throw new Error('Worker was destroyed');
  269. }
  270. return workerId;
  271. });
  272. }
  273. var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
  274. var nextDocumentId = 0;
  275. var PDFDocumentLoadingTask =
  276. /*#__PURE__*/
  277. function () {
  278. function PDFDocumentLoadingTask() {
  279. _classCallCheck(this, PDFDocumentLoadingTask);
  280. this._capability = (0, _util.createPromiseCapability)();
  281. this._transport = null;
  282. this._worker = null;
  283. this.docId = 'd' + nextDocumentId++;
  284. this.destroyed = false;
  285. this.onPassword = null;
  286. this.onProgress = null;
  287. this.onUnsupportedFeature = null;
  288. }
  289. _createClass(PDFDocumentLoadingTask, [{
  290. key: "destroy",
  291. value: function destroy() {
  292. var _this = this;
  293. this.destroyed = true;
  294. var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
  295. return transportDestroyed.then(function () {
  296. _this._transport = null;
  297. if (_this._worker) {
  298. _this._worker.destroy();
  299. _this._worker = null;
  300. }
  301. });
  302. }
  303. }, {
  304. key: "then",
  305. value: function then(onFulfilled, onRejected) {
  306. (0, _display_utils.deprecated)('PDFDocumentLoadingTask.then method, ' + 'use the `promise` getter instead.');
  307. return this.promise.then.apply(this.promise, arguments);
  308. }
  309. }, {
  310. key: "promise",
  311. get: function get() {
  312. return this._capability.promise;
  313. }
  314. }]);
  315. return PDFDocumentLoadingTask;
  316. }();
  317. return PDFDocumentLoadingTask;
  318. }();
  319. var PDFDataRangeTransport =
  320. /*#__PURE__*/
  321. function () {
  322. function PDFDataRangeTransport(length, initialData) {
  323. var progressiveDone = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  324. _classCallCheck(this, PDFDataRangeTransport);
  325. this.length = length;
  326. this.initialData = initialData;
  327. this.progressiveDone = progressiveDone;
  328. this._rangeListeners = [];
  329. this._progressListeners = [];
  330. this._progressiveReadListeners = [];
  331. this._progressiveDoneListeners = [];
  332. this._readyCapability = (0, _util.createPromiseCapability)();
  333. }
  334. _createClass(PDFDataRangeTransport, [{
  335. key: "addRangeListener",
  336. value: function addRangeListener(listener) {
  337. this._rangeListeners.push(listener);
  338. }
  339. }, {
  340. key: "addProgressListener",
  341. value: function addProgressListener(listener) {
  342. this._progressListeners.push(listener);
  343. }
  344. }, {
  345. key: "addProgressiveReadListener",
  346. value: function addProgressiveReadListener(listener) {
  347. this._progressiveReadListeners.push(listener);
  348. }
  349. }, {
  350. key: "addProgressiveDoneListener",
  351. value: function addProgressiveDoneListener(listener) {
  352. this._progressiveDoneListeners.push(listener);
  353. }
  354. }, {
  355. key: "onDataRange",
  356. value: function onDataRange(begin, chunk) {
  357. var _iteratorNormalCompletion = true;
  358. var _didIteratorError = false;
  359. var _iteratorError = undefined;
  360. try {
  361. for (var _iterator = this._rangeListeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
  362. var listener = _step.value;
  363. listener(begin, chunk);
  364. }
  365. } catch (err) {
  366. _didIteratorError = true;
  367. _iteratorError = err;
  368. } finally {
  369. try {
  370. if (!_iteratorNormalCompletion && _iterator["return"] != null) {
  371. _iterator["return"]();
  372. }
  373. } finally {
  374. if (_didIteratorError) {
  375. throw _iteratorError;
  376. }
  377. }
  378. }
  379. }
  380. }, {
  381. key: "onDataProgress",
  382. value: function onDataProgress(loaded, total) {
  383. var _this2 = this;
  384. this._readyCapability.promise.then(function () {
  385. var _iteratorNormalCompletion2 = true;
  386. var _didIteratorError2 = false;
  387. var _iteratorError2 = undefined;
  388. try {
  389. for (var _iterator2 = _this2._progressListeners[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
  390. var listener = _step2.value;
  391. listener(loaded, total);
  392. }
  393. } catch (err) {
  394. _didIteratorError2 = true;
  395. _iteratorError2 = err;
  396. } finally {
  397. try {
  398. if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
  399. _iterator2["return"]();
  400. }
  401. } finally {
  402. if (_didIteratorError2) {
  403. throw _iteratorError2;
  404. }
  405. }
  406. }
  407. });
  408. }
  409. }, {
  410. key: "onDataProgressiveRead",
  411. value: function onDataProgressiveRead(chunk) {
  412. var _this3 = this;
  413. this._readyCapability.promise.then(function () {
  414. var _iteratorNormalCompletion3 = true;
  415. var _didIteratorError3 = false;
  416. var _iteratorError3 = undefined;
  417. try {
  418. for (var _iterator3 = _this3._progressiveReadListeners[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
  419. var listener = _step3.value;
  420. listener(chunk);
  421. }
  422. } catch (err) {
  423. _didIteratorError3 = true;
  424. _iteratorError3 = err;
  425. } finally {
  426. try {
  427. if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
  428. _iterator3["return"]();
  429. }
  430. } finally {
  431. if (_didIteratorError3) {
  432. throw _iteratorError3;
  433. }
  434. }
  435. }
  436. });
  437. }
  438. }, {
  439. key: "onDataProgressiveDone",
  440. value: function onDataProgressiveDone() {
  441. var _this4 = this;
  442. this._readyCapability.promise.then(function () {
  443. var _iteratorNormalCompletion4 = true;
  444. var _didIteratorError4 = false;
  445. var _iteratorError4 = undefined;
  446. try {
  447. for (var _iterator4 = _this4._progressiveDoneListeners[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
  448. var listener = _step4.value;
  449. listener();
  450. }
  451. } catch (err) {
  452. _didIteratorError4 = true;
  453. _iteratorError4 = err;
  454. } finally {
  455. try {
  456. if (!_iteratorNormalCompletion4 && _iterator4["return"] != null) {
  457. _iterator4["return"]();
  458. }
  459. } finally {
  460. if (_didIteratorError4) {
  461. throw _iteratorError4;
  462. }
  463. }
  464. }
  465. });
  466. }
  467. }, {
  468. key: "transportReady",
  469. value: function transportReady() {
  470. this._readyCapability.resolve();
  471. }
  472. }, {
  473. key: "requestDataRange",
  474. value: function requestDataRange(begin, end) {
  475. (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange');
  476. }
  477. }, {
  478. key: "abort",
  479. value: function abort() {}
  480. }]);
  481. return PDFDataRangeTransport;
  482. }();
  483. exports.PDFDataRangeTransport = PDFDataRangeTransport;
  484. var PDFDocumentProxy =
  485. /*#__PURE__*/
  486. function () {
  487. function PDFDocumentProxy(pdfInfo, transport) {
  488. _classCallCheck(this, PDFDocumentProxy);
  489. this._pdfInfo = pdfInfo;
  490. this._transport = transport;
  491. }
  492. _createClass(PDFDocumentProxy, [{
  493. key: "getPage",
  494. value: function getPage(pageNumber) {
  495. return this._transport.getPage(pageNumber);
  496. }
  497. }, {
  498. key: "getPageIndex",
  499. value: function getPageIndex(ref) {
  500. return this._transport.getPageIndex(ref);
  501. }
  502. }, {
  503. key: "getDestinations",
  504. value: function getDestinations() {
  505. return this._transport.getDestinations();
  506. }
  507. }, {
  508. key: "getDestination",
  509. value: function getDestination(id) {
  510. return this._transport.getDestination(id);
  511. }
  512. }, {
  513. key: "getPageLabels",
  514. value: function getPageLabels() {
  515. return this._transport.getPageLabels();
  516. }
  517. }, {
  518. key: "getPageLayout",
  519. value: function getPageLayout() {
  520. return this._transport.getPageLayout();
  521. }
  522. }, {
  523. key: "getPageMode",
  524. value: function getPageMode() {
  525. return this._transport.getPageMode();
  526. }
  527. }, {
  528. key: "getViewerPreferences",
  529. value: function getViewerPreferences() {
  530. return this._transport.getViewerPreferences();
  531. }
  532. }, {
  533. key: "getOpenActionDestination",
  534. value: function getOpenActionDestination() {
  535. return this._transport.getOpenActionDestination();
  536. }
  537. }, {
  538. key: "getAttachments",
  539. value: function getAttachments() {
  540. return this._transport.getAttachments();
  541. }
  542. }, {
  543. key: "getJavaScript",
  544. value: function getJavaScript() {
  545. return this._transport.getJavaScript();
  546. }
  547. }, {
  548. key: "getOutline",
  549. value: function getOutline() {
  550. return this._transport.getOutline();
  551. }
  552. }, {
  553. key: "getPermissions",
  554. value: function getPermissions() {
  555. return this._transport.getPermissions();
  556. }
  557. }, {
  558. key: "getMetadata",
  559. value: function getMetadata() {
  560. return this._transport.getMetadata();
  561. }
  562. }, {
  563. key: "getData",
  564. value: function getData() {
  565. return this._transport.getData();
  566. }
  567. }, {
  568. key: "getDownloadInfo",
  569. value: function getDownloadInfo() {
  570. return this._transport.downloadInfoCapability.promise;
  571. }
  572. }, {
  573. key: "getStats",
  574. value: function getStats() {
  575. return this._transport.getStats();
  576. }
  577. }, {
  578. key: "cleanup",
  579. value: function cleanup() {
  580. this._transport.startCleanup();
  581. }
  582. }, {
  583. key: "destroy",
  584. value: function destroy() {
  585. return this.loadingTask.destroy();
  586. }
  587. }, {
  588. key: "numPages",
  589. get: function get() {
  590. return this._pdfInfo.numPages;
  591. }
  592. }, {
  593. key: "fingerprint",
  594. get: function get() {
  595. return this._pdfInfo.fingerprint;
  596. }
  597. }, {
  598. key: "loadingParams",
  599. get: function get() {
  600. return this._transport.loadingParams;
  601. }
  602. }, {
  603. key: "loadingTask",
  604. get: function get() {
  605. return this._transport.loadingTask;
  606. }
  607. }]);
  608. return PDFDocumentProxy;
  609. }();
  610. exports.PDFDocumentProxy = PDFDocumentProxy;
  611. var PDFPageProxy =
  612. /*#__PURE__*/
  613. function () {
  614. function PDFPageProxy(pageIndex, pageInfo, transport) {
  615. var pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  616. _classCallCheck(this, PDFPageProxy);
  617. this.pageIndex = pageIndex;
  618. this._pageInfo = pageInfo;
  619. this._transport = transport;
  620. this._stats = pdfBug ? new _display_utils.StatTimer() : _display_utils.DummyStatTimer;
  621. this._pdfBug = pdfBug;
  622. this.commonObjs = transport.commonObjs;
  623. this.objs = new PDFObjects();
  624. this.cleanupAfterRender = false;
  625. this.pendingCleanup = false;
  626. this.intentStates = Object.create(null);
  627. this.destroyed = false;
  628. }
  629. _createClass(PDFPageProxy, [{
  630. key: "getViewport",
  631. value: function getViewport() {
  632. var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  633. scale = _ref.scale,
  634. _ref$rotation = _ref.rotation,
  635. rotation = _ref$rotation === void 0 ? this.rotate : _ref$rotation,
  636. _ref$dontFlip = _ref.dontFlip,
  637. dontFlip = _ref$dontFlip === void 0 ? false : _ref$dontFlip;
  638. if (arguments.length > 1 || typeof arguments[0] === 'number') {
  639. (0, _display_utils.deprecated)('getViewport is called with obsolete arguments.');
  640. scale = arguments[0];
  641. rotation = typeof arguments[1] === 'number' ? arguments[1] : this.rotate;
  642. dontFlip = typeof arguments[2] === 'boolean' ? arguments[2] : false;
  643. }
  644. return new _display_utils.PageViewport({
  645. viewBox: this.view,
  646. scale: scale,
  647. rotation: rotation,
  648. dontFlip: dontFlip
  649. });
  650. }
  651. }, {
  652. key: "getAnnotations",
  653. value: function getAnnotations() {
  654. var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  655. _ref2$intent = _ref2.intent,
  656. intent = _ref2$intent === void 0 ? null : _ref2$intent;
  657. if (!this.annotationsPromise || this.annotationsIntent !== intent) {
  658. this.annotationsPromise = this._transport.getAnnotations(this.pageIndex, intent);
  659. this.annotationsIntent = intent;
  660. }
  661. return this.annotationsPromise;
  662. }
  663. }, {
  664. key: "render",
  665. value: function render(_ref3) {
  666. var _this5 = this;
  667. var canvasContext = _ref3.canvasContext,
  668. viewport = _ref3.viewport,
  669. _ref3$intent = _ref3.intent,
  670. intent = _ref3$intent === void 0 ? 'display' : _ref3$intent,
  671. _ref3$enableWebGL = _ref3.enableWebGL,
  672. enableWebGL = _ref3$enableWebGL === void 0 ? false : _ref3$enableWebGL,
  673. _ref3$renderInteracti = _ref3.renderInteractiveForms,
  674. renderInteractiveForms = _ref3$renderInteracti === void 0 ? false : _ref3$renderInteracti,
  675. _ref3$transform = _ref3.transform,
  676. transform = _ref3$transform === void 0 ? null : _ref3$transform,
  677. _ref3$imageLayer = _ref3.imageLayer,
  678. imageLayer = _ref3$imageLayer === void 0 ? null : _ref3$imageLayer,
  679. _ref3$canvasFactory = _ref3.canvasFactory,
  680. canvasFactory = _ref3$canvasFactory === void 0 ? null : _ref3$canvasFactory,
  681. _ref3$background = _ref3.background,
  682. background = _ref3$background === void 0 ? null : _ref3$background;
  683. var stats = this._stats;
  684. stats.time('Overall');
  685. this.pendingCleanup = false;
  686. var renderingIntent = intent === 'print' ? 'print' : 'display';
  687. var canvasFactoryInstance = canvasFactory || new _display_utils.DOMCanvasFactory();
  688. var webGLContext = new _webgl.WebGLContext({
  689. enable: enableWebGL
  690. });
  691. if (!this.intentStates[renderingIntent]) {
  692. this.intentStates[renderingIntent] = Object.create(null);
  693. }
  694. var intentState = this.intentStates[renderingIntent];
  695. if (!intentState.displayReadyCapability) {
  696. intentState.receivingOperatorList = true;
  697. intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
  698. intentState.operatorList = {
  699. fnArray: [],
  700. argsArray: [],
  701. lastChunk: false
  702. };
  703. stats.time('Page Request');
  704. this._transport.messageHandler.send('RenderPageRequest', {
  705. pageIndex: this.pageNumber - 1,
  706. intent: renderingIntent,
  707. renderInteractiveForms: renderInteractiveForms === true
  708. });
  709. }
  710. var complete = function complete(error) {
  711. var i = intentState.renderTasks.indexOf(internalRenderTask);
  712. if (i >= 0) {
  713. intentState.renderTasks.splice(i, 1);
  714. }
  715. if (_this5.cleanupAfterRender || renderingIntent === 'print') {
  716. _this5.pendingCleanup = true;
  717. }
  718. _this5._tryCleanup();
  719. if (error) {
  720. internalRenderTask.capability.reject(error);
  721. } else {
  722. internalRenderTask.capability.resolve();
  723. }
  724. stats.timeEnd('Rendering');
  725. stats.timeEnd('Overall');
  726. };
  727. var internalRenderTask = new InternalRenderTask({
  728. callback: complete,
  729. params: {
  730. canvasContext: canvasContext,
  731. viewport: viewport,
  732. transform: transform,
  733. imageLayer: imageLayer,
  734. background: background
  735. },
  736. objs: this.objs,
  737. commonObjs: this.commonObjs,
  738. operatorList: intentState.operatorList,
  739. pageNumber: this.pageNumber,
  740. canvasFactory: canvasFactoryInstance,
  741. webGLContext: webGLContext,
  742. useRequestAnimationFrame: renderingIntent !== 'print',
  743. pdfBug: this._pdfBug
  744. });
  745. if (!intentState.renderTasks) {
  746. intentState.renderTasks = [];
  747. }
  748. intentState.renderTasks.push(internalRenderTask);
  749. var renderTask = internalRenderTask.task;
  750. intentState.displayReadyCapability.promise.then(function (transparency) {
  751. if (_this5.pendingCleanup) {
  752. complete();
  753. return;
  754. }
  755. stats.time('Rendering');
  756. internalRenderTask.initializeGraphics(transparency);
  757. internalRenderTask.operatorListChanged();
  758. })["catch"](complete);
  759. return renderTask;
  760. }
  761. }, {
  762. key: "getOperatorList",
  763. value: function getOperatorList() {
  764. function operatorListChanged() {
  765. if (intentState.operatorList.lastChunk) {
  766. intentState.opListReadCapability.resolve(intentState.operatorList);
  767. var i = intentState.renderTasks.indexOf(opListTask);
  768. if (i >= 0) {
  769. intentState.renderTasks.splice(i, 1);
  770. }
  771. }
  772. }
  773. var renderingIntent = 'oplist';
  774. if (!this.intentStates[renderingIntent]) {
  775. this.intentStates[renderingIntent] = Object.create(null);
  776. }
  777. var intentState = this.intentStates[renderingIntent];
  778. var opListTask;
  779. if (!intentState.opListReadCapability) {
  780. opListTask = {};
  781. opListTask.operatorListChanged = operatorListChanged;
  782. intentState.receivingOperatorList = true;
  783. intentState.opListReadCapability = (0, _util.createPromiseCapability)();
  784. intentState.renderTasks = [];
  785. intentState.renderTasks.push(opListTask);
  786. intentState.operatorList = {
  787. fnArray: [],
  788. argsArray: [],
  789. lastChunk: false
  790. };
  791. this._stats.time('Page Request');
  792. this._transport.messageHandler.send('RenderPageRequest', {
  793. pageIndex: this.pageIndex,
  794. intent: renderingIntent
  795. });
  796. }
  797. return intentState.opListReadCapability.promise;
  798. }
  799. }, {
  800. key: "streamTextContent",
  801. value: function streamTextContent() {
  802. var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  803. _ref4$normalizeWhites = _ref4.normalizeWhitespace,
  804. normalizeWhitespace = _ref4$normalizeWhites === void 0 ? false : _ref4$normalizeWhites,
  805. _ref4$disableCombineT = _ref4.disableCombineTextItems,
  806. disableCombineTextItems = _ref4$disableCombineT === void 0 ? false : _ref4$disableCombineT;
  807. var TEXT_CONTENT_CHUNK_SIZE = 100;
  808. return this._transport.messageHandler.sendWithStream('GetTextContent', {
  809. pageIndex: this.pageNumber - 1,
  810. normalizeWhitespace: normalizeWhitespace === true,
  811. combineTextItems: disableCombineTextItems !== true
  812. }, {
  813. highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
  814. size: function size(textContent) {
  815. return textContent.items.length;
  816. }
  817. });
  818. }
  819. }, {
  820. key: "getTextContent",
  821. value: function getTextContent() {
  822. var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  823. var readableStream = this.streamTextContent(params);
  824. return new Promise(function (resolve, reject) {
  825. function pump() {
  826. reader.read().then(function (_ref5) {
  827. var _textContent$items;
  828. var value = _ref5.value,
  829. done = _ref5.done;
  830. if (done) {
  831. resolve(textContent);
  832. return;
  833. }
  834. Object.assign(textContent.styles, value.styles);
  835. (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items));
  836. pump();
  837. }, reject);
  838. }
  839. var reader = readableStream.getReader();
  840. var textContent = {
  841. items: [],
  842. styles: Object.create(null)
  843. };
  844. pump();
  845. });
  846. }
  847. }, {
  848. key: "_destroy",
  849. value: function _destroy() {
  850. this.destroyed = true;
  851. this._transport.pageCache[this.pageIndex] = null;
  852. var waitOn = [];
  853. Object.keys(this.intentStates).forEach(function (intent) {
  854. if (intent === 'oplist') {
  855. return;
  856. }
  857. var intentState = this.intentStates[intent];
  858. intentState.renderTasks.forEach(function (renderTask) {
  859. var renderCompleted = renderTask.capability.promise["catch"](function () {});
  860. waitOn.push(renderCompleted);
  861. renderTask.cancel();
  862. });
  863. }, this);
  864. this.objs.clear();
  865. this.annotationsPromise = null;
  866. this.pendingCleanup = false;
  867. return Promise.all(waitOn);
  868. }
  869. }, {
  870. key: "cleanup",
  871. value: function cleanup() {
  872. var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
  873. this.pendingCleanup = true;
  874. this._tryCleanup(resetStats);
  875. }
  876. }, {
  877. key: "_tryCleanup",
  878. value: function _tryCleanup() {
  879. var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
  880. if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) {
  881. var intentState = this.intentStates[intent];
  882. return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList;
  883. }, this)) {
  884. return;
  885. }
  886. Object.keys(this.intentStates).forEach(function (intent) {
  887. delete this.intentStates[intent];
  888. }, this);
  889. this.objs.clear();
  890. this.annotationsPromise = null;
  891. if (resetStats && this._stats instanceof _display_utils.StatTimer) {
  892. this._stats = new _display_utils.StatTimer();
  893. }
  894. this.pendingCleanup = false;
  895. }
  896. }, {
  897. key: "_startRenderPage",
  898. value: function _startRenderPage(transparency, intent) {
  899. var intentState = this.intentStates[intent];
  900. if (intentState.displayReadyCapability) {
  901. intentState.displayReadyCapability.resolve(transparency);
  902. }
  903. }
  904. }, {
  905. key: "_renderPageChunk",
  906. value: function _renderPageChunk(operatorListChunk, intent) {
  907. var intentState = this.intentStates[intent];
  908. for (var i = 0, ii = operatorListChunk.length; i < ii; i++) {
  909. intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
  910. intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
  911. }
  912. intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
  913. for (var _i = 0; _i < intentState.renderTasks.length; _i++) {
  914. intentState.renderTasks[_i].operatorListChanged();
  915. }
  916. if (operatorListChunk.lastChunk) {
  917. intentState.receivingOperatorList = false;
  918. this._tryCleanup();
  919. }
  920. }
  921. }, {
  922. key: "pageNumber",
  923. get: function get() {
  924. return this.pageIndex + 1;
  925. }
  926. }, {
  927. key: "rotate",
  928. get: function get() {
  929. return this._pageInfo.rotate;
  930. }
  931. }, {
  932. key: "ref",
  933. get: function get() {
  934. return this._pageInfo.ref;
  935. }
  936. }, {
  937. key: "userUnit",
  938. get: function get() {
  939. return this._pageInfo.userUnit;
  940. }
  941. }, {
  942. key: "view",
  943. get: function get() {
  944. return this._pageInfo.view;
  945. }
  946. }, {
  947. key: "stats",
  948. get: function get() {
  949. return this._stats instanceof _display_utils.StatTimer ? this._stats : null;
  950. }
  951. }]);
  952. return PDFPageProxy;
  953. }();
  954. exports.PDFPageProxy = PDFPageProxy;
  955. var LoopbackPort =
  956. /*#__PURE__*/
  957. function () {
  958. function LoopbackPort() {
  959. var defer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  960. _classCallCheck(this, LoopbackPort);
  961. this._listeners = [];
  962. this._defer = defer;
  963. this._deferred = Promise.resolve(undefined);
  964. }
  965. _createClass(LoopbackPort, [{
  966. key: "postMessage",
  967. value: function postMessage(obj, transfers) {
  968. var _this6 = this;
  969. function cloneValue(value) {
  970. if (_typeof(value) !== 'object' || value === null) {
  971. return value;
  972. }
  973. if (cloned.has(value)) {
  974. return cloned.get(value);
  975. }
  976. var buffer, result;
  977. if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
  978. var transferable = transfers && transfers.includes(buffer);
  979. if (value === buffer) {
  980. result = value;
  981. } else if (transferable) {
  982. result = new value.constructor(buffer, value.byteOffset, value.byteLength);
  983. } else {
  984. result = new value.constructor(value);
  985. }
  986. cloned.set(value, result);
  987. return result;
  988. }
  989. result = Array.isArray(value) ? [] : {};
  990. cloned.set(value, result);
  991. for (var i in value) {
  992. var desc = void 0,
  993. p = value;
  994. while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
  995. p = Object.getPrototypeOf(p);
  996. }
  997. if (typeof desc.value === 'undefined' || typeof desc.value === 'function') {
  998. continue;
  999. }
  1000. result[i] = cloneValue(desc.value);
  1001. }
  1002. return result;
  1003. }
  1004. if (!this._defer) {
  1005. this._listeners.forEach(function (listener) {
  1006. listener.call(this, {
  1007. data: obj
  1008. });
  1009. }, this);
  1010. return;
  1011. }
  1012. var cloned = new WeakMap();
  1013. var e = {
  1014. data: cloneValue(obj)
  1015. };
  1016. this._deferred.then(function () {
  1017. _this6._listeners.forEach(function (listener) {
  1018. listener.call(this, e);
  1019. }, _this6);
  1020. });
  1021. }
  1022. }, {
  1023. key: "addEventListener",
  1024. value: function addEventListener(name, listener) {
  1025. this._listeners.push(listener);
  1026. }
  1027. }, {
  1028. key: "removeEventListener",
  1029. value: function removeEventListener(name, listener) {
  1030. var i = this._listeners.indexOf(listener);
  1031. this._listeners.splice(i, 1);
  1032. }
  1033. }, {
  1034. key: "terminate",
  1035. value: function terminate() {
  1036. this._listeners.length = 0;
  1037. }
  1038. }]);
  1039. return LoopbackPort;
  1040. }();
  1041. exports.LoopbackPort = LoopbackPort;
  1042. var PDFWorker = function PDFWorkerClosure() {
  1043. var pdfWorkerPorts = new WeakMap();
  1044. var nextFakeWorkerId = 0;
  1045. var fakeWorkerFilesLoadedCapability;
  1046. function _getWorkerSrc() {
  1047. if (_worker_options.GlobalWorkerOptions.workerSrc) {
  1048. return _worker_options.GlobalWorkerOptions.workerSrc;
  1049. }
  1050. if (typeof fallbackWorkerSrc !== 'undefined') {
  1051. return fallbackWorkerSrc;
  1052. }
  1053. throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
  1054. }
  1055. function getMainThreadWorkerMessageHandler() {
  1056. try {
  1057. if (typeof window !== 'undefined') {
  1058. return window.pdfjsWorker && window.pdfjsWorker.WorkerMessageHandler;
  1059. }
  1060. } catch (ex) {}
  1061. return null;
  1062. }
  1063. function setupFakeWorkerGlobal() {
  1064. if (fakeWorkerFilesLoadedCapability) {
  1065. return fakeWorkerFilesLoadedCapability.promise;
  1066. }
  1067. fakeWorkerFilesLoadedCapability = (0, _util.createPromiseCapability)();
  1068. var mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
  1069. if (mainWorkerMessageHandler) {
  1070. fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler);
  1071. return fakeWorkerFilesLoadedCapability.promise;
  1072. }
  1073. var loader = fakeWorkerFilesLoader || function () {
  1074. return (0, _display_utils.loadScript)(_getWorkerSrc()).then(function () {
  1075. return window.pdfjsWorker.WorkerMessageHandler;
  1076. });
  1077. };
  1078. loader().then(fakeWorkerFilesLoadedCapability.resolve, fakeWorkerFilesLoadedCapability.reject);
  1079. return fakeWorkerFilesLoadedCapability.promise;
  1080. }
  1081. function createCDNWrapper(url) {
  1082. var wrapper = 'importScripts(\'' + url + '\');';
  1083. return _util.URL.createObjectURL(new Blob([wrapper]));
  1084. }
  1085. var PDFWorker =
  1086. /*#__PURE__*/
  1087. function () {
  1088. function PDFWorker() {
  1089. var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
  1090. _ref6$name = _ref6.name,
  1091. name = _ref6$name === void 0 ? null : _ref6$name,
  1092. _ref6$port = _ref6.port,
  1093. port = _ref6$port === void 0 ? null : _ref6$port,
  1094. _ref6$postMessageTran = _ref6.postMessageTransfers,
  1095. postMessageTransfers = _ref6$postMessageTran === void 0 ? true : _ref6$postMessageTran,
  1096. _ref6$verbosity = _ref6.verbosity,
  1097. verbosity = _ref6$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref6$verbosity;
  1098. _classCallCheck(this, PDFWorker);
  1099. if (port && pdfWorkerPorts.has(port)) {
  1100. throw new Error('Cannot use more than one PDFWorker per port');
  1101. }
  1102. this.name = name;
  1103. this.destroyed = false;
  1104. this.postMessageTransfers = postMessageTransfers !== false;
  1105. this.verbosity = verbosity;
  1106. this._readyCapability = (0, _util.createPromiseCapability)();
  1107. this._port = null;
  1108. this._webWorker = null;
  1109. this._messageHandler = null;
  1110. if (port) {
  1111. pdfWorkerPorts.set(port, this);
  1112. this._initializeFromPort(port);
  1113. return;
  1114. }
  1115. this._initialize();
  1116. }
  1117. _createClass(PDFWorker, [{
  1118. key: "_initializeFromPort",
  1119. value: function _initializeFromPort(port) {
  1120. this._port = port;
  1121. this._messageHandler = new _message_handler.MessageHandler('main', 'worker', port);
  1122. this._messageHandler.on('ready', function () {});
  1123. this._readyCapability.resolve();
  1124. }
  1125. }, {
  1126. key: "_initialize",
  1127. value: function _initialize() {
  1128. var _this7 = this;
  1129. if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
  1130. var workerSrc = _getWorkerSrc();
  1131. try {
  1132. if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
  1133. workerSrc = createCDNWrapper(new _util.URL(workerSrc, window.location).href);
  1134. }
  1135. var worker = new Worker(workerSrc);
  1136. var messageHandler = new _message_handler.MessageHandler('main', 'worker', worker);
  1137. var terminateEarly = function terminateEarly() {
  1138. worker.removeEventListener('error', onWorkerError);
  1139. messageHandler.destroy();
  1140. worker.terminate();
  1141. if (_this7.destroyed) {
  1142. _this7._readyCapability.reject(new Error('Worker was destroyed'));
  1143. } else {
  1144. _this7._setupFakeWorker();
  1145. }
  1146. };
  1147. var onWorkerError = function onWorkerError() {
  1148. if (!_this7._webWorker) {
  1149. terminateEarly();
  1150. }
  1151. };
  1152. worker.addEventListener('error', onWorkerError);
  1153. messageHandler.on('test', function (data) {
  1154. worker.removeEventListener('error', onWorkerError);
  1155. if (_this7.destroyed) {
  1156. terminateEarly();
  1157. return;
  1158. }
  1159. if (data && data.supportTypedArray) {
  1160. _this7._messageHandler = messageHandler;
  1161. _this7._port = worker;
  1162. _this7._webWorker = worker;
  1163. if (!data.supportTransfers) {
  1164. _this7.postMessageTransfers = false;
  1165. }
  1166. _this7._readyCapability.resolve();
  1167. messageHandler.send('configure', {
  1168. verbosity: _this7.verbosity
  1169. });
  1170. } else {
  1171. _this7._setupFakeWorker();
  1172. messageHandler.destroy();
  1173. worker.terminate();
  1174. }
  1175. });
  1176. messageHandler.on('ready', function (data) {
  1177. worker.removeEventListener('error', onWorkerError);
  1178. if (_this7.destroyed) {
  1179. terminateEarly();
  1180. return;
  1181. }
  1182. try {
  1183. sendTest();
  1184. } catch (e) {
  1185. _this7._setupFakeWorker();
  1186. }
  1187. });
  1188. var sendTest = function sendTest() {
  1189. var testObj = new Uint8Array([_this7.postMessageTransfers ? 255 : 0]);
  1190. try {
  1191. messageHandler.send('test', testObj, [testObj.buffer]);
  1192. } catch (ex) {
  1193. (0, _util.info)('Cannot use postMessage transfers');
  1194. testObj[0] = 0;
  1195. messageHandler.send('test', testObj);
  1196. }
  1197. };
  1198. sendTest();
  1199. return;
  1200. } catch (e) {
  1201. (0, _util.info)('The worker has been disabled.');
  1202. }
  1203. }
  1204. this._setupFakeWorker();
  1205. }
  1206. }, {
  1207. key: "_setupFakeWorker",
  1208. value: function _setupFakeWorker() {
  1209. var _this8 = this;
  1210. if (!isWorkerDisabled) {
  1211. (0, _util.warn)('Setting up fake worker.');
  1212. isWorkerDisabled = true;
  1213. }
  1214. setupFakeWorkerGlobal().then(function (WorkerMessageHandler) {
  1215. if (_this8.destroyed) {
  1216. _this8._readyCapability.reject(new Error('Worker was destroyed'));
  1217. return;
  1218. }
  1219. var port = new LoopbackPort();
  1220. _this8._port = port;
  1221. var id = 'fake' + nextFakeWorkerId++;
  1222. var workerHandler = new _message_handler.MessageHandler(id + '_worker', id, port);
  1223. WorkerMessageHandler.setup(workerHandler, port);
  1224. var messageHandler = new _message_handler.MessageHandler(id, id + '_worker', port);
  1225. _this8._messageHandler = messageHandler;
  1226. _this8._readyCapability.resolve();
  1227. })["catch"](function (reason) {
  1228. _this8._readyCapability.reject(new Error("Setting up fake worker failed: \"".concat(reason.message, "\".")));
  1229. });
  1230. }
  1231. }, {
  1232. key: "destroy",
  1233. value: function destroy() {
  1234. this.destroyed = true;
  1235. if (this._webWorker) {
  1236. this._webWorker.terminate();
  1237. this._webWorker = null;
  1238. }
  1239. pdfWorkerPorts["delete"](this._port);
  1240. this._port = null;
  1241. if (this._messageHandler) {
  1242. this._messageHandler.destroy();
  1243. this._messageHandler = null;
  1244. }
  1245. }
  1246. }, {
  1247. key: "promise",
  1248. get: function get() {
  1249. return this._readyCapability.promise;
  1250. }
  1251. }, {
  1252. key: "port",
  1253. get: function get() {
  1254. return this._port;
  1255. }
  1256. }, {
  1257. key: "messageHandler",
  1258. get: function get() {
  1259. return this._messageHandler;
  1260. }
  1261. }], [{
  1262. key: "fromPort",
  1263. value: function fromPort(params) {
  1264. if (!params || !params.port) {
  1265. throw new Error('PDFWorker.fromPort - invalid method signature.');
  1266. }
  1267. if (pdfWorkerPorts.has(params.port)) {
  1268. return pdfWorkerPorts.get(params.port);
  1269. }
  1270. return new PDFWorker(params);
  1271. }
  1272. }, {
  1273. key: "getWorkerSrc",
  1274. value: function getWorkerSrc() {
  1275. return _getWorkerSrc();
  1276. }
  1277. }]);
  1278. return PDFWorker;
  1279. }();
  1280. return PDFWorker;
  1281. }();
  1282. exports.PDFWorker = PDFWorker;
  1283. var WorkerTransport =
  1284. /*#__PURE__*/
  1285. function () {
  1286. function WorkerTransport(messageHandler, loadingTask, networkStream, params) {
  1287. _classCallCheck(this, WorkerTransport);
  1288. this.messageHandler = messageHandler;
  1289. this.loadingTask = loadingTask;
  1290. this.commonObjs = new PDFObjects();
  1291. this.fontLoader = new _font_loader.FontLoader({
  1292. docId: loadingTask.docId,
  1293. onUnsupportedFeature: this._onUnsupportedFeature.bind(this)
  1294. });
  1295. this._params = params;
  1296. this.CMapReaderFactory = new params.CMapReaderFactory({
  1297. baseUrl: params.cMapUrl,
  1298. isCompressed: params.cMapPacked
  1299. });
  1300. this.destroyed = false;
  1301. this.destroyCapability = null;
  1302. this._passwordCapability = null;
  1303. this._networkStream = networkStream;
  1304. this._fullReader = null;
  1305. this._lastProgress = null;
  1306. this.pageCache = [];
  1307. this.pagePromises = [];
  1308. this.downloadInfoCapability = (0, _util.createPromiseCapability)();
  1309. this.setupMessageHandler();
  1310. }
  1311. _createClass(WorkerTransport, [{
  1312. key: "destroy",
  1313. value: function destroy() {
  1314. var _this9 = this;
  1315. if (this.destroyCapability) {
  1316. return this.destroyCapability.promise;
  1317. }
  1318. this.destroyed = true;
  1319. this.destroyCapability = (0, _util.createPromiseCapability)();
  1320. if (this._passwordCapability) {
  1321. this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback'));
  1322. }
  1323. var waitOn = [];
  1324. this.pageCache.forEach(function (page) {
  1325. if (page) {
  1326. waitOn.push(page._destroy());
  1327. }
  1328. });
  1329. this.pageCache.length = 0;
  1330. this.pagePromises.length = 0;
  1331. var terminated = this.messageHandler.sendWithPromise('Terminate', null);
  1332. waitOn.push(terminated);
  1333. Promise.all(waitOn).then(function () {
  1334. _this9.fontLoader.clear();
  1335. if (_this9._networkStream) {
  1336. _this9._networkStream.cancelAllRequests();
  1337. }
  1338. if (_this9.messageHandler) {
  1339. _this9.messageHandler.destroy();
  1340. _this9.messageHandler = null;
  1341. }
  1342. _this9.destroyCapability.resolve();
  1343. }, this.destroyCapability.reject);
  1344. return this.destroyCapability.promise;
  1345. }
  1346. }, {
  1347. key: "setupMessageHandler",
  1348. value: function setupMessageHandler() {
  1349. var messageHandler = this.messageHandler,
  1350. loadingTask = this.loadingTask;
  1351. messageHandler.on('GetReader', function (data, sink) {
  1352. var _this10 = this;
  1353. (0, _util.assert)(this._networkStream);
  1354. this._fullReader = this._networkStream.getFullReader();
  1355. this._fullReader.onProgress = function (evt) {
  1356. _this10._lastProgress = {
  1357. loaded: evt.loaded,
  1358. total: evt.total
  1359. };
  1360. };
  1361. sink.onPull = function () {
  1362. _this10._fullReader.read().then(function (_ref7) {
  1363. var value = _ref7.value,
  1364. done = _ref7.done;
  1365. if (done) {
  1366. sink.close();
  1367. return;
  1368. }
  1369. (0, _util.assert)((0, _util.isArrayBuffer)(value));
  1370. sink.enqueue(new Uint8Array(value), 1, [value]);
  1371. })["catch"](function (reason) {
  1372. sink.error(reason);
  1373. });
  1374. };
  1375. sink.onCancel = function (reason) {
  1376. _this10._fullReader.cancel(reason);
  1377. };
  1378. }, this);
  1379. messageHandler.on('ReaderHeadersReady', function (data) {
  1380. var _this11 = this;
  1381. var headersCapability = (0, _util.createPromiseCapability)();
  1382. var fullReader = this._fullReader;
  1383. fullReader.headersReady.then(function () {
  1384. if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
  1385. if (_this11._lastProgress && loadingTask.onProgress) {
  1386. loadingTask.onProgress(_this11._lastProgress);
  1387. }
  1388. fullReader.onProgress = function (evt) {
  1389. if (loadingTask.onProgress) {
  1390. loadingTask.onProgress({
  1391. loaded: evt.loaded,
  1392. total: evt.total
  1393. });
  1394. }
  1395. };
  1396. }
  1397. headersCapability.resolve({
  1398. isStreamingSupported: fullReader.isStreamingSupported,
  1399. isRangeSupported: fullReader.isRangeSupported,
  1400. contentLength: fullReader.contentLength
  1401. });
  1402. }, headersCapability.reject);
  1403. return headersCapability.promise;
  1404. }, this);
  1405. messageHandler.on('GetRangeReader', function (data, sink) {
  1406. (0, _util.assert)(this._networkStream);
  1407. var rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
  1408. if (!rangeReader) {
  1409. sink.close();
  1410. return;
  1411. }
  1412. sink.onPull = function () {
  1413. rangeReader.read().then(function (_ref8) {
  1414. var value = _ref8.value,
  1415. done = _ref8.done;
  1416. if (done) {
  1417. sink.close();
  1418. return;
  1419. }
  1420. (0, _util.assert)((0, _util.isArrayBuffer)(value));
  1421. sink.enqueue(new Uint8Array(value), 1, [value]);
  1422. })["catch"](function (reason) {
  1423. sink.error(reason);
  1424. });
  1425. };
  1426. sink.onCancel = function (reason) {
  1427. rangeReader.cancel(reason);
  1428. };
  1429. }, this);
  1430. messageHandler.on('GetDoc', function (_ref9) {
  1431. var pdfInfo = _ref9.pdfInfo;
  1432. this._numPages = pdfInfo.numPages;
  1433. loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
  1434. }, this);
  1435. messageHandler.on('PasswordRequest', function (exception) {
  1436. var _this12 = this;
  1437. this._passwordCapability = (0, _util.createPromiseCapability)();
  1438. if (loadingTask.onPassword) {
  1439. var updatePassword = function updatePassword(password) {
  1440. _this12._passwordCapability.resolve({
  1441. password: password
  1442. });
  1443. };
  1444. try {
  1445. loadingTask.onPassword(updatePassword, exception.code);
  1446. } catch (ex) {
  1447. this._passwordCapability.reject(ex);
  1448. }
  1449. } else {
  1450. this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
  1451. }
  1452. return this._passwordCapability.promise;
  1453. }, this);
  1454. messageHandler.on('PasswordException', function (exception) {
  1455. loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code));
  1456. }, this);
  1457. messageHandler.on('InvalidPDF', function (exception) {
  1458. loadingTask._capability.reject(new _util.InvalidPDFException(exception.message));
  1459. }, this);
  1460. messageHandler.on('MissingPDF', function (exception) {
  1461. loadingTask._capability.reject(new _util.MissingPDFException(exception.message));
  1462. }, this);
  1463. messageHandler.on('UnexpectedResponse', function (exception) {
  1464. loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status));
  1465. }, this);
  1466. messageHandler.on('UnknownError', function (exception) {
  1467. loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details));
  1468. }, this);
  1469. messageHandler.on('DataLoaded', function (data) {
  1470. if (loadingTask.onProgress) {
  1471. loadingTask.onProgress({
  1472. loaded: data.length,
  1473. total: data.length
  1474. });
  1475. }
  1476. this.downloadInfoCapability.resolve(data);
  1477. }, this);
  1478. messageHandler.on('StartRenderPage', function (data) {
  1479. if (this.destroyed) {
  1480. return;
  1481. }
  1482. var page = this.pageCache[data.pageIndex];
  1483. page._stats.timeEnd('Page Request');
  1484. page._startRenderPage(data.transparency, data.intent);
  1485. }, this);
  1486. messageHandler.on('RenderPageChunk', function (data) {
  1487. if (this.destroyed) {
  1488. return;
  1489. }
  1490. var page = this.pageCache[data.pageIndex];
  1491. page._renderPageChunk(data.operatorList, data.intent);
  1492. }, this);
  1493. messageHandler.on('commonobj', function (data) {
  1494. var _this13 = this;
  1495. if (this.destroyed) {
  1496. return;
  1497. }
  1498. var _data = _slicedToArray(data, 3),
  1499. id = _data[0],
  1500. type = _data[1],
  1501. exportedData = _data[2];
  1502. if (this.commonObjs.has(id)) {
  1503. return;
  1504. }
  1505. switch (type) {
  1506. case 'Font':
  1507. var params = this._params;
  1508. if ('error' in exportedData) {
  1509. var exportedError = exportedData.error;
  1510. (0, _util.warn)("Error during font loading: ".concat(exportedError));
  1511. this.commonObjs.resolve(id, exportedError);
  1512. break;
  1513. }
  1514. var fontRegistry = null;
  1515. if (params.pdfBug && _global_scope["default"].FontInspector && _global_scope["default"].FontInspector.enabled) {
  1516. fontRegistry = {
  1517. registerFont: function registerFont(font, url) {
  1518. _global_scope["default"]['FontInspector'].fontAdded(font, url);
  1519. }
  1520. };
  1521. }
  1522. var font = new _font_loader.FontFaceObject(exportedData, {
  1523. isEvalSupported: params.isEvalSupported,
  1524. disableFontFace: params.disableFontFace,
  1525. ignoreErrors: params.ignoreErrors,
  1526. onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
  1527. fontRegistry: fontRegistry
  1528. });
  1529. this.fontLoader.bind(font).then(function () {
  1530. _this13.commonObjs.resolve(id, font);
  1531. }, function (reason) {
  1532. messageHandler.sendWithPromise('FontFallback', {
  1533. id: id
  1534. })["finally"](function () {
  1535. _this13.commonObjs.resolve(id, font);
  1536. });
  1537. });
  1538. break;
  1539. case 'FontPath':
  1540. case 'FontType3Res':
  1541. this.commonObjs.resolve(id, exportedData);
  1542. break;
  1543. default:
  1544. throw new Error("Got unknown common object type ".concat(type));
  1545. }
  1546. }, this);
  1547. messageHandler.on('obj', function (data) {
  1548. if (this.destroyed) {
  1549. return undefined;
  1550. }
  1551. var _data2 = _slicedToArray(data, 4),
  1552. id = _data2[0],
  1553. pageIndex = _data2[1],
  1554. type = _data2[2],
  1555. imageData = _data2[3];
  1556. var pageProxy = this.pageCache[pageIndex];
  1557. if (pageProxy.objs.has(id)) {
  1558. return undefined;
  1559. }
  1560. switch (type) {
  1561. case 'JpegStream':
  1562. return new Promise(function (resolve, reject) {
  1563. var img = new Image();
  1564. img.onload = function () {
  1565. resolve(img);
  1566. };
  1567. img.onerror = function () {
  1568. reject(new Error('Error during JPEG image loading'));
  1569. (0, _display_utils.releaseImageResources)(img);
  1570. };
  1571. img.src = imageData;
  1572. }).then(function (img) {
  1573. pageProxy.objs.resolve(id, img);
  1574. });
  1575. case 'Image':
  1576. pageProxy.objs.resolve(id, imageData);
  1577. var MAX_IMAGE_SIZE_TO_STORE = 8000000;
  1578. if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
  1579. pageProxy.cleanupAfterRender = true;
  1580. }
  1581. break;
  1582. default:
  1583. throw new Error("Got unknown object type ".concat(type));
  1584. }
  1585. return undefined;
  1586. }, this);
  1587. messageHandler.on('DocProgress', function (data) {
  1588. if (this.destroyed) {
  1589. return;
  1590. }
  1591. if (loadingTask.onProgress) {
  1592. loadingTask.onProgress({
  1593. loaded: data.loaded,
  1594. total: data.total
  1595. });
  1596. }
  1597. }, this);
  1598. messageHandler.on('PageError', function (data) {
  1599. if (this.destroyed) {
  1600. return;
  1601. }
  1602. var page = this.pageCache[data.pageIndex];
  1603. var intentState = page.intentStates[data.intent];
  1604. if (intentState.displayReadyCapability) {
  1605. intentState.displayReadyCapability.reject(new Error(data.error));
  1606. } else {
  1607. throw new Error(data.error);
  1608. }
  1609. if (intentState.operatorList) {
  1610. intentState.operatorList.lastChunk = true;
  1611. for (var i = 0; i < intentState.renderTasks.length; i++) {
  1612. intentState.renderTasks[i].operatorListChanged();
  1613. }
  1614. }
  1615. }, this);
  1616. messageHandler.on('UnsupportedFeature', this._onUnsupportedFeature, this);
  1617. messageHandler.on('JpegDecode', function (data) {
  1618. if (this.destroyed) {
  1619. return Promise.reject(new Error('Worker was destroyed'));
  1620. }
  1621. if (typeof document === 'undefined') {
  1622. return Promise.reject(new Error('"document" is not defined.'));
  1623. }
  1624. var _data3 = _slicedToArray(data, 2),
  1625. imageUrl = _data3[0],
  1626. components = _data3[1];
  1627. if (components !== 3 && components !== 1) {
  1628. return Promise.reject(new Error('Only 3 components or 1 component can be returned'));
  1629. }
  1630. return new Promise(function (resolve, reject) {
  1631. var img = new Image();
  1632. img.onload = function () {
  1633. var width = img.width,
  1634. height = img.height;
  1635. var size = width * height;
  1636. var rgbaLength = size * 4;
  1637. var buf = new Uint8ClampedArray(size * components);
  1638. var tmpCanvas = document.createElement('canvas');
  1639. tmpCanvas.width = width;
  1640. tmpCanvas.height = height;
  1641. var tmpCtx = tmpCanvas.getContext('2d');
  1642. tmpCtx.drawImage(img, 0, 0);
  1643. var data = tmpCtx.getImageData(0, 0, width, height).data;
  1644. if (components === 3) {
  1645. for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
  1646. buf[j] = data[i];
  1647. buf[j + 1] = data[i + 1];
  1648. buf[j + 2] = data[i + 2];
  1649. }
  1650. } else if (components === 1) {
  1651. for (var _i2 = 0, _j = 0; _i2 < rgbaLength; _i2 += 4, _j++) {
  1652. buf[_j] = data[_i2];
  1653. }
  1654. }
  1655. resolve({
  1656. data: buf,
  1657. width: width,
  1658. height: height
  1659. });
  1660. (0, _display_utils.releaseImageResources)(img);
  1661. tmpCanvas.width = 0;
  1662. tmpCanvas.height = 0;
  1663. tmpCanvas = null;
  1664. tmpCtx = null;
  1665. };
  1666. img.onerror = function () {
  1667. reject(new Error('JpegDecode failed to load image'));
  1668. (0, _display_utils.releaseImageResources)(img);
  1669. };
  1670. img.src = imageUrl;
  1671. });
  1672. }, this);
  1673. messageHandler.on('FetchBuiltInCMap', function (data) {
  1674. if (this.destroyed) {
  1675. return Promise.reject(new Error('Worker was destroyed'));
  1676. }
  1677. return this.CMapReaderFactory.fetch({
  1678. name: data.name
  1679. });
  1680. }, this);
  1681. }
  1682. }, {
  1683. key: "_onUnsupportedFeature",
  1684. value: function _onUnsupportedFeature(_ref10) {
  1685. var featureId = _ref10.featureId;
  1686. if (this.destroyed) {
  1687. return;
  1688. }
  1689. if (this.loadingTask.onUnsupportedFeature) {
  1690. this.loadingTask.onUnsupportedFeature(featureId);
  1691. }
  1692. }
  1693. }, {
  1694. key: "getData",
  1695. value: function getData() {
  1696. return this.messageHandler.sendWithPromise('GetData', null);
  1697. }
  1698. }, {
  1699. key: "getPage",
  1700. value: function getPage(pageNumber) {
  1701. var _this14 = this;
  1702. if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
  1703. return Promise.reject(new Error('Invalid page request'));
  1704. }
  1705. var pageIndex = pageNumber - 1;
  1706. if (pageIndex in this.pagePromises) {
  1707. return this.pagePromises[pageIndex];
  1708. }
  1709. var promise = this.messageHandler.sendWithPromise('GetPage', {
  1710. pageIndex: pageIndex
  1711. }).then(function (pageInfo) {
  1712. if (_this14.destroyed) {
  1713. throw new Error('Transport destroyed');
  1714. }
  1715. var page = new PDFPageProxy(pageIndex, pageInfo, _this14, _this14._params.pdfBug);
  1716. _this14.pageCache[pageIndex] = page;
  1717. return page;
  1718. });
  1719. this.pagePromises[pageIndex] = promise;
  1720. return promise;
  1721. }
  1722. }, {
  1723. key: "getPageIndex",
  1724. value: function getPageIndex(ref) {
  1725. return this.messageHandler.sendWithPromise('GetPageIndex', {
  1726. ref: ref
  1727. })["catch"](function (reason) {
  1728. return Promise.reject(new Error(reason));
  1729. });
  1730. }
  1731. }, {
  1732. key: "getAnnotations",
  1733. value: function getAnnotations(pageIndex, intent) {
  1734. return this.messageHandler.sendWithPromise('GetAnnotations', {
  1735. pageIndex: pageIndex,
  1736. intent: intent
  1737. });
  1738. }
  1739. }, {
  1740. key: "getDestinations",
  1741. value: function getDestinations() {
  1742. return this.messageHandler.sendWithPromise('GetDestinations', null);
  1743. }
  1744. }, {
  1745. key: "getDestination",
  1746. value: function getDestination(id) {
  1747. if (typeof id !== 'string') {
  1748. return Promise.reject(new Error('Invalid destination request.'));
  1749. }
  1750. return this.messageHandler.sendWithPromise('GetDestination', {
  1751. id: id
  1752. });
  1753. }
  1754. }, {
  1755. key: "getPageLabels",
  1756. value: function getPageLabels() {
  1757. return this.messageHandler.sendWithPromise('GetPageLabels', null);
  1758. }
  1759. }, {
  1760. key: "getPageLayout",
  1761. value: function getPageLayout() {
  1762. return this.messageHandler.sendWithPromise('GetPageLayout', null);
  1763. }
  1764. }, {
  1765. key: "getPageMode",
  1766. value: function getPageMode() {
  1767. return this.messageHandler.sendWithPromise('GetPageMode', null);
  1768. }
  1769. }, {
  1770. key: "getViewerPreferences",
  1771. value: function getViewerPreferences() {
  1772. return this.messageHandler.sendWithPromise('GetViewerPreferences', null);
  1773. }
  1774. }, {
  1775. key: "getOpenActionDestination",
  1776. value: function getOpenActionDestination() {
  1777. return this.messageHandler.sendWithPromise('GetOpenActionDestination', null);
  1778. }
  1779. }, {
  1780. key: "getAttachments",
  1781. value: function getAttachments() {
  1782. return this.messageHandler.sendWithPromise('GetAttachments', null);
  1783. }
  1784. }, {
  1785. key: "getJavaScript",
  1786. value: function getJavaScript() {
  1787. return this.messageHandler.sendWithPromise('GetJavaScript', null);
  1788. }
  1789. }, {
  1790. key: "getOutline",
  1791. value: function getOutline() {
  1792. return this.messageHandler.sendWithPromise('GetOutline', null);
  1793. }
  1794. }, {
  1795. key: "getPermissions",
  1796. value: function getPermissions() {
  1797. return this.messageHandler.sendWithPromise('GetPermissions', null);
  1798. }
  1799. }, {
  1800. key: "getMetadata",
  1801. value: function getMetadata() {
  1802. var _this15 = this;
  1803. return this.messageHandler.sendWithPromise('GetMetadata', null).then(function (results) {
  1804. return {
  1805. info: results[0],
  1806. metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
  1807. contentDispositionFilename: _this15._fullReader ? _this15._fullReader.filename : null
  1808. };
  1809. });
  1810. }
  1811. }, {
  1812. key: "getStats",
  1813. value: function getStats() {
  1814. return this.messageHandler.sendWithPromise('GetStats', null);
  1815. }
  1816. }, {
  1817. key: "startCleanup",
  1818. value: function startCleanup() {
  1819. var _this16 = this;
  1820. this.messageHandler.sendWithPromise('Cleanup', null).then(function () {
  1821. for (var i = 0, ii = _this16.pageCache.length; i < ii; i++) {
  1822. var page = _this16.pageCache[i];
  1823. if (page) {
  1824. page.cleanup();
  1825. }
  1826. }
  1827. _this16.commonObjs.clear();
  1828. _this16.fontLoader.clear();
  1829. });
  1830. }
  1831. }, {
  1832. key: "loadingParams",
  1833. get: function get() {
  1834. var params = this._params;
  1835. return (0, _util.shadow)(this, 'loadingParams', {
  1836. disableAutoFetch: params.disableAutoFetch,
  1837. disableCreateObjectURL: params.disableCreateObjectURL,
  1838. disableFontFace: params.disableFontFace,
  1839. nativeImageDecoderSupport: params.nativeImageDecoderSupport
  1840. });
  1841. }
  1842. }]);
  1843. return WorkerTransport;
  1844. }();
  1845. var PDFObjects =
  1846. /*#__PURE__*/
  1847. function () {
  1848. function PDFObjects() {
  1849. _classCallCheck(this, PDFObjects);
  1850. this._objs = Object.create(null);
  1851. }
  1852. _createClass(PDFObjects, [{
  1853. key: "_ensureObj",
  1854. value: function _ensureObj(objId) {
  1855. if (this._objs[objId]) {
  1856. return this._objs[objId];
  1857. }
  1858. return this._objs[objId] = {
  1859. capability: (0, _util.createPromiseCapability)(),
  1860. data: null,
  1861. resolved: false
  1862. };
  1863. }
  1864. }, {
  1865. key: "get",
  1866. value: function get(objId) {
  1867. var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
  1868. if (callback) {
  1869. this._ensureObj(objId).capability.promise.then(callback);
  1870. return null;
  1871. }
  1872. var obj = this._objs[objId];
  1873. if (!obj || !obj.resolved) {
  1874. throw new Error("Requesting object that isn't resolved yet ".concat(objId, "."));
  1875. }
  1876. return obj.data;
  1877. }
  1878. }, {
  1879. key: "has",
  1880. value: function has(objId) {
  1881. var obj = this._objs[objId];
  1882. return obj ? obj.resolved : false;
  1883. }
  1884. }, {
  1885. key: "resolve",
  1886. value: function resolve(objId, data) {
  1887. var obj = this._ensureObj(objId);
  1888. obj.resolved = true;
  1889. obj.data = data;
  1890. obj.capability.resolve(data);
  1891. }
  1892. }, {
  1893. key: "clear",
  1894. value: function clear() {
  1895. for (var objId in this._objs) {
  1896. var data = this._objs[objId].data;
  1897. if (typeof Image !== 'undefined' && data instanceof Image) {
  1898. (0, _display_utils.releaseImageResources)(data);
  1899. }
  1900. }
  1901. this._objs = Object.create(null);
  1902. }
  1903. }]);
  1904. return PDFObjects;
  1905. }();
  1906. var RenderTask =
  1907. /*#__PURE__*/
  1908. function () {
  1909. function RenderTask(internalRenderTask) {
  1910. _classCallCheck(this, RenderTask);
  1911. this._internalRenderTask = internalRenderTask;
  1912. this.onContinue = null;
  1913. }
  1914. _createClass(RenderTask, [{
  1915. key: "cancel",
  1916. value: function cancel() {
  1917. this._internalRenderTask.cancel();
  1918. }
  1919. }, {
  1920. key: "then",
  1921. value: function then(onFulfilled, onRejected) {
  1922. (0, _display_utils.deprecated)('RenderTask.then method, use the `promise` getter instead.');
  1923. return this.promise.then.apply(this.promise, arguments);
  1924. }
  1925. }, {
  1926. key: "promise",
  1927. get: function get() {
  1928. return this._internalRenderTask.capability.promise;
  1929. }
  1930. }]);
  1931. return RenderTask;
  1932. }();
  1933. var InternalRenderTask = function InternalRenderTaskClosure() {
  1934. var canvasInRendering = new WeakSet();
  1935. var InternalRenderTask =
  1936. /*#__PURE__*/
  1937. function () {
  1938. function InternalRenderTask(_ref11) {
  1939. var callback = _ref11.callback,
  1940. params = _ref11.params,
  1941. objs = _ref11.objs,
  1942. commonObjs = _ref11.commonObjs,
  1943. operatorList = _ref11.operatorList,
  1944. pageNumber = _ref11.pageNumber,
  1945. canvasFactory = _ref11.canvasFactory,
  1946. webGLContext = _ref11.webGLContext,
  1947. _ref11$useRequestAnim = _ref11.useRequestAnimationFrame,
  1948. useRequestAnimationFrame = _ref11$useRequestAnim === void 0 ? false : _ref11$useRequestAnim,
  1949. _ref11$pdfBug = _ref11.pdfBug,
  1950. pdfBug = _ref11$pdfBug === void 0 ? false : _ref11$pdfBug;
  1951. _classCallCheck(this, InternalRenderTask);
  1952. this.callback = callback;
  1953. this.params = params;
  1954. this.objs = objs;
  1955. this.commonObjs = commonObjs;
  1956. this.operatorListIdx = null;
  1957. this.operatorList = operatorList;
  1958. this.pageNumber = pageNumber;
  1959. this.canvasFactory = canvasFactory;
  1960. this.webGLContext = webGLContext;
  1961. this._pdfBug = pdfBug;
  1962. this.running = false;
  1963. this.graphicsReadyCallback = null;
  1964. this.graphicsReady = false;
  1965. this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== 'undefined';
  1966. this.cancelled = false;
  1967. this.capability = (0, _util.createPromiseCapability)();
  1968. this.task = new RenderTask(this);
  1969. this._continueBound = this._continue.bind(this);
  1970. this._scheduleNextBound = this._scheduleNext.bind(this);
  1971. this._nextBound = this._next.bind(this);
  1972. this._canvas = params.canvasContext.canvas;
  1973. }
  1974. _createClass(InternalRenderTask, [{
  1975. key: "initializeGraphics",
  1976. value: function initializeGraphics() {
  1977. var transparency = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
  1978. if (this.cancelled) {
  1979. return;
  1980. }
  1981. if (this._canvas) {
  1982. if (canvasInRendering.has(this._canvas)) {
  1983. throw new Error('Cannot use the same canvas during multiple render() operations. ' + 'Use different canvas or ensure previous operations were ' + 'cancelled or completed.');
  1984. }
  1985. canvasInRendering.add(this._canvas);
  1986. }
  1987. if (this._pdfBug && _global_scope["default"].StepperManager && _global_scope["default"].StepperManager.enabled) {
  1988. this.stepper = _global_scope["default"].StepperManager.create(this.pageNumber - 1);
  1989. this.stepper.init(this.operatorList);
  1990. this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
  1991. }
  1992. var _this$params = this.params,
  1993. canvasContext = _this$params.canvasContext,
  1994. viewport = _this$params.viewport,
  1995. transform = _this$params.transform,
  1996. imageLayer = _this$params.imageLayer,
  1997. background = _this$params.background;
  1998. this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer);
  1999. this.gfx.beginDrawing({
  2000. transform: transform,
  2001. viewport: viewport,
  2002. transparency: transparency,
  2003. background: background
  2004. });
  2005. this.operatorListIdx = 0;
  2006. this.graphicsReady = true;
  2007. if (this.graphicsReadyCallback) {
  2008. this.graphicsReadyCallback();
  2009. }
  2010. }
  2011. }, {
  2012. key: "cancel",
  2013. value: function cancel() {
  2014. var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
  2015. this.running = false;
  2016. this.cancelled = true;
  2017. if (this.gfx) {
  2018. this.gfx.endDrawing();
  2019. }
  2020. if (this._canvas) {
  2021. canvasInRendering["delete"](this._canvas);
  2022. }
  2023. this.callback(error || new _display_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this.pageNumber), 'canvas'));
  2024. }
  2025. }, {
  2026. key: "operatorListChanged",
  2027. value: function operatorListChanged() {
  2028. if (!this.graphicsReady) {
  2029. if (!this.graphicsReadyCallback) {
  2030. this.graphicsReadyCallback = this._continueBound;
  2031. }
  2032. return;
  2033. }
  2034. if (this.stepper) {
  2035. this.stepper.updateOperatorList(this.operatorList);
  2036. }
  2037. if (this.running) {
  2038. return;
  2039. }
  2040. this._continue();
  2041. }
  2042. }, {
  2043. key: "_continue",
  2044. value: function _continue() {
  2045. this.running = true;
  2046. if (this.cancelled) {
  2047. return;
  2048. }
  2049. if (this.task.onContinue) {
  2050. this.task.onContinue(this._scheduleNextBound);
  2051. } else {
  2052. this._scheduleNext();
  2053. }
  2054. }
  2055. }, {
  2056. key: "_scheduleNext",
  2057. value: function _scheduleNext() {
  2058. var _this17 = this;
  2059. if (this._useRequestAnimationFrame) {
  2060. window.requestAnimationFrame(function () {
  2061. _this17._nextBound()["catch"](_this17.cancel.bind(_this17));
  2062. });
  2063. } else {
  2064. Promise.resolve().then(this._nextBound)["catch"](this.cancel.bind(this));
  2065. }
  2066. }
  2067. }, {
  2068. key: "_next",
  2069. value: function () {
  2070. var _next2 = _asyncToGenerator(
  2071. /*#__PURE__*/
  2072. _regenerator["default"].mark(function _callee() {
  2073. return _regenerator["default"].wrap(function _callee$(_context) {
  2074. while (1) {
  2075. switch (_context.prev = _context.next) {
  2076. case 0:
  2077. if (!this.cancelled) {
  2078. _context.next = 2;
  2079. break;
  2080. }
  2081. return _context.abrupt("return");
  2082. case 2:
  2083. this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
  2084. if (this.operatorListIdx === this.operatorList.argsArray.length) {
  2085. this.running = false;
  2086. if (this.operatorList.lastChunk) {
  2087. this.gfx.endDrawing();
  2088. if (this._canvas) {
  2089. canvasInRendering["delete"](this._canvas);
  2090. }
  2091. this.callback();
  2092. }
  2093. }
  2094. case 4:
  2095. case "end":
  2096. return _context.stop();
  2097. }
  2098. }
  2099. }, _callee, this);
  2100. }));
  2101. function _next() {
  2102. return _next2.apply(this, arguments);
  2103. }
  2104. return _next;
  2105. }()
  2106. }]);
  2107. return InternalRenderTask;
  2108. }();
  2109. return InternalRenderTask;
  2110. }();
  2111. var version = '2.2.228';
  2112. exports.version = version;
  2113. var build = 'd7afb74a';
  2114. exports.build = build;