pdf_manager.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  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.NetworkPdfManager = exports.LocalPdfManager = void 0;
  27. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  28. var _util = require("../shared/util");
  29. var _chunked_stream = require("./chunked_stream");
  30. var _core_utils = require("./core_utils");
  31. var _document = require("./document");
  32. var _stream = require("./stream");
  33. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  34. 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); }
  35. function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
  36. function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
  37. function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
  38. function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
  39. function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
  40. 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); } }
  41. 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); }); }; }
  42. function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  43. 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); } }
  44. function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
  45. var BasePdfManager =
  46. /*#__PURE__*/
  47. function () {
  48. function BasePdfManager() {
  49. _classCallCheck(this, BasePdfManager);
  50. if (this.constructor === BasePdfManager) {
  51. (0, _util.unreachable)('Cannot initialize BasePdfManager.');
  52. }
  53. }
  54. _createClass(BasePdfManager, [{
  55. key: "onLoadedStream",
  56. value: function onLoadedStream() {
  57. (0, _util.unreachable)('Abstract method `onLoadedStream` called');
  58. }
  59. }, {
  60. key: "ensureDoc",
  61. value: function ensureDoc(prop, args) {
  62. return this.ensure(this.pdfDocument, prop, args);
  63. }
  64. }, {
  65. key: "ensureXRef",
  66. value: function ensureXRef(prop, args) {
  67. return this.ensure(this.pdfDocument.xref, prop, args);
  68. }
  69. }, {
  70. key: "ensureCatalog",
  71. value: function ensureCatalog(prop, args) {
  72. return this.ensure(this.pdfDocument.catalog, prop, args);
  73. }
  74. }, {
  75. key: "getPage",
  76. value: function getPage(pageIndex) {
  77. return this.pdfDocument.getPage(pageIndex);
  78. }
  79. }, {
  80. key: "fontFallback",
  81. value: function fontFallback(id, handler) {
  82. return this.pdfDocument.fontFallback(id, handler);
  83. }
  84. }, {
  85. key: "cleanup",
  86. value: function cleanup() {
  87. return this.pdfDocument.cleanup();
  88. }
  89. }, {
  90. key: "ensure",
  91. value: function () {
  92. var _ensure = _asyncToGenerator(
  93. /*#__PURE__*/
  94. _regenerator["default"].mark(function _callee(obj, prop, args) {
  95. return _regenerator["default"].wrap(function _callee$(_context) {
  96. while (1) {
  97. switch (_context.prev = _context.next) {
  98. case 0:
  99. (0, _util.unreachable)('Abstract method `ensure` called');
  100. case 1:
  101. case "end":
  102. return _context.stop();
  103. }
  104. }
  105. }, _callee);
  106. }));
  107. function ensure(_x, _x2, _x3) {
  108. return _ensure.apply(this, arguments);
  109. }
  110. return ensure;
  111. }()
  112. }, {
  113. key: "requestRange",
  114. value: function requestRange(begin, end) {
  115. (0, _util.unreachable)('Abstract method `requestRange` called');
  116. }
  117. }, {
  118. key: "requestLoadedStream",
  119. value: function requestLoadedStream() {
  120. (0, _util.unreachable)('Abstract method `requestLoadedStream` called');
  121. }
  122. }, {
  123. key: "sendProgressiveData",
  124. value: function sendProgressiveData(chunk) {
  125. (0, _util.unreachable)('Abstract method `sendProgressiveData` called');
  126. }
  127. }, {
  128. key: "updatePassword",
  129. value: function updatePassword(password) {
  130. this._password = password;
  131. }
  132. }, {
  133. key: "terminate",
  134. value: function terminate() {
  135. (0, _util.unreachable)('Abstract method `terminate` called');
  136. }
  137. }, {
  138. key: "docId",
  139. get: function get() {
  140. return this._docId;
  141. }
  142. }, {
  143. key: "password",
  144. get: function get() {
  145. return this._password;
  146. }
  147. }, {
  148. key: "docBaseUrl",
  149. get: function get() {
  150. var docBaseUrl = null;
  151. if (this._docBaseUrl) {
  152. var absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);
  153. if (absoluteUrl) {
  154. docBaseUrl = absoluteUrl.href;
  155. } else {
  156. (0, _util.warn)("Invalid absolute docBaseUrl: \"".concat(this._docBaseUrl, "\"."));
  157. }
  158. }
  159. return (0, _util.shadow)(this, 'docBaseUrl', docBaseUrl);
  160. }
  161. }]);
  162. return BasePdfManager;
  163. }();
  164. var LocalPdfManager =
  165. /*#__PURE__*/
  166. function (_BasePdfManager) {
  167. _inherits(LocalPdfManager, _BasePdfManager);
  168. function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) {
  169. var _this;
  170. _classCallCheck(this, LocalPdfManager);
  171. _this = _possibleConstructorReturn(this, _getPrototypeOf(LocalPdfManager).call(this));
  172. _this._docId = docId;
  173. _this._password = password;
  174. _this._docBaseUrl = docBaseUrl;
  175. _this.evaluatorOptions = evaluatorOptions;
  176. var stream = new _stream.Stream(data);
  177. _this.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_this), stream);
  178. _this._loadedStreamPromise = Promise.resolve(stream);
  179. return _this;
  180. }
  181. _createClass(LocalPdfManager, [{
  182. key: "ensure",
  183. value: function () {
  184. var _ensure2 = _asyncToGenerator(
  185. /*#__PURE__*/
  186. _regenerator["default"].mark(function _callee2(obj, prop, args) {
  187. var value;
  188. return _regenerator["default"].wrap(function _callee2$(_context2) {
  189. while (1) {
  190. switch (_context2.prev = _context2.next) {
  191. case 0:
  192. value = obj[prop];
  193. if (!(typeof value === 'function')) {
  194. _context2.next = 3;
  195. break;
  196. }
  197. return _context2.abrupt("return", value.apply(obj, args));
  198. case 3:
  199. return _context2.abrupt("return", value);
  200. case 4:
  201. case "end":
  202. return _context2.stop();
  203. }
  204. }
  205. }, _callee2);
  206. }));
  207. function ensure(_x4, _x5, _x6) {
  208. return _ensure2.apply(this, arguments);
  209. }
  210. return ensure;
  211. }()
  212. }, {
  213. key: "requestRange",
  214. value: function requestRange(begin, end) {
  215. return Promise.resolve();
  216. }
  217. }, {
  218. key: "requestLoadedStream",
  219. value: function requestLoadedStream() {}
  220. }, {
  221. key: "onLoadedStream",
  222. value: function onLoadedStream() {
  223. return this._loadedStreamPromise;
  224. }
  225. }, {
  226. key: "terminate",
  227. value: function terminate() {}
  228. }]);
  229. return LocalPdfManager;
  230. }(BasePdfManager);
  231. exports.LocalPdfManager = LocalPdfManager;
  232. var NetworkPdfManager =
  233. /*#__PURE__*/
  234. function (_BasePdfManager2) {
  235. _inherits(NetworkPdfManager, _BasePdfManager2);
  236. function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {
  237. var _this2;
  238. _classCallCheck(this, NetworkPdfManager);
  239. _this2 = _possibleConstructorReturn(this, _getPrototypeOf(NetworkPdfManager).call(this));
  240. _this2._docId = docId;
  241. _this2._password = args.password;
  242. _this2._docBaseUrl = docBaseUrl;
  243. _this2.msgHandler = args.msgHandler;
  244. _this2.evaluatorOptions = evaluatorOptions;
  245. _this2.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {
  246. msgHandler: args.msgHandler,
  247. length: args.length,
  248. disableAutoFetch: args.disableAutoFetch,
  249. rangeChunkSize: args.rangeChunkSize
  250. });
  251. _this2.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_this2), _this2.streamManager.getStream());
  252. return _this2;
  253. }
  254. _createClass(NetworkPdfManager, [{
  255. key: "ensure",
  256. value: function () {
  257. var _ensure3 = _asyncToGenerator(
  258. /*#__PURE__*/
  259. _regenerator["default"].mark(function _callee3(obj, prop, args) {
  260. var value;
  261. return _regenerator["default"].wrap(function _callee3$(_context3) {
  262. while (1) {
  263. switch (_context3.prev = _context3.next) {
  264. case 0:
  265. _context3.prev = 0;
  266. value = obj[prop];
  267. if (!(typeof value === 'function')) {
  268. _context3.next = 4;
  269. break;
  270. }
  271. return _context3.abrupt("return", value.apply(obj, args));
  272. case 4:
  273. return _context3.abrupt("return", value);
  274. case 7:
  275. _context3.prev = 7;
  276. _context3.t0 = _context3["catch"](0);
  277. if (_context3.t0 instanceof _core_utils.MissingDataException) {
  278. _context3.next = 11;
  279. break;
  280. }
  281. throw _context3.t0;
  282. case 11:
  283. _context3.next = 13;
  284. return this.requestRange(_context3.t0.begin, _context3.t0.end);
  285. case 13:
  286. return _context3.abrupt("return", this.ensure(obj, prop, args));
  287. case 14:
  288. case "end":
  289. return _context3.stop();
  290. }
  291. }
  292. }, _callee3, this, [[0, 7]]);
  293. }));
  294. function ensure(_x7, _x8, _x9) {
  295. return _ensure3.apply(this, arguments);
  296. }
  297. return ensure;
  298. }()
  299. }, {
  300. key: "requestRange",
  301. value: function requestRange(begin, end) {
  302. return this.streamManager.requestRange(begin, end);
  303. }
  304. }, {
  305. key: "requestLoadedStream",
  306. value: function requestLoadedStream() {
  307. this.streamManager.requestAllChunks();
  308. }
  309. }, {
  310. key: "sendProgressiveData",
  311. value: function sendProgressiveData(chunk) {
  312. this.streamManager.onReceiveData({
  313. chunk: chunk
  314. });
  315. }
  316. }, {
  317. key: "onLoadedStream",
  318. value: function onLoadedStream() {
  319. return this.streamManager.onLoadedStream();
  320. }
  321. }, {
  322. key: "terminate",
  323. value: function terminate() {
  324. this.streamManager.abort();
  325. }
  326. }]);
  327. return NetworkPdfManager;
  328. }(BasePdfManager);
  329. exports.NetworkPdfManager = NetworkPdfManager;