Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

522 строки
18 KiB

  1. "use strict";
  2. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
  3. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  4. Object.defineProperty(exports, "__esModule", {
  5. value: true
  6. });
  7. exports["default"] = exports.PageInternal = void 0;
  8. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  9. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  10. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
  11. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  12. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  13. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
  14. var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  15. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  16. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  17. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  18. var _react = _interopRequireWildcard(require("react"));
  19. var _propTypes = _interopRequireDefault(require("prop-types"));
  20. var _makeCancellablePromise = _interopRequireDefault(require("make-cancellable-promise"));
  21. var _makeEventProps = _interopRequireDefault(require("make-event-props"));
  22. var _mergeClassNames = _interopRequireDefault(require("merge-class-names"));
  23. var _DocumentContext = _interopRequireDefault(require("./DocumentContext"));
  24. var _PageContext = _interopRequireDefault(require("./PageContext"));
  25. var _Message = _interopRequireDefault(require("./Message"));
  26. var _PageCanvas = _interopRequireDefault(require("./Page/PageCanvas"));
  27. var _PageSVG = _interopRequireDefault(require("./Page/PageSVG"));
  28. var _TextLayer = _interopRequireDefault(require("./Page/TextLayer"));
  29. var _AnnotationLayer = _interopRequireDefault(require("./Page/AnnotationLayer"));
  30. var _utils = require("./shared/utils");
  31. var _propTypes2 = require("./shared/propTypes");
  32. function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
  33. function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
  34. function _createSuper(Derived) { return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
  35. function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
  36. var defaultScale = 1.0;
  37. var PageInternal = /*#__PURE__*/function (_PureComponent) {
  38. (0, _inherits2["default"])(PageInternal, _PureComponent);
  39. var _super = _createSuper(PageInternal);
  40. function PageInternal() {
  41. var _this;
  42. (0, _classCallCheck2["default"])(this, PageInternal);
  43. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  44. args[_key] = arguments[_key];
  45. }
  46. _this = _super.call.apply(_super, [this].concat(args));
  47. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
  48. page: null
  49. });
  50. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadSuccess", function () {
  51. var _this$props = _this.props,
  52. onLoadSuccess = _this$props.onLoadSuccess,
  53. registerPage = _this$props.registerPage;
  54. var page = _this.state.page;
  55. if (onLoadSuccess) onLoadSuccess((0, _utils.makePageCallback)(page, _this.scale));
  56. if (registerPage) registerPage(_this.pageIndex, _this.ref);
  57. });
  58. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadError", function (error) {
  59. (0, _utils.errorOnDev)(error);
  60. var onLoadError = _this.props.onLoadError;
  61. if (onLoadError) onLoadError(error);
  62. });
  63. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "loadPage", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
  64. var pdf, pageNumber, cancellable, page;
  65. return _regenerator["default"].wrap(function _callee$(_context) {
  66. while (1) {
  67. switch (_context.prev = _context.next) {
  68. case 0:
  69. pdf = _this.props.pdf;
  70. pageNumber = _this.getPageNumber();
  71. if (pageNumber) {
  72. _context.next = 4;
  73. break;
  74. }
  75. return _context.abrupt("return");
  76. case 4:
  77. _this.setState(function (prevState) {
  78. if (!prevState.page) {
  79. return null;
  80. }
  81. return {
  82. page: null
  83. };
  84. });
  85. _context.prev = 5;
  86. cancellable = (0, _makeCancellablePromise["default"])(pdf.getPage(pageNumber));
  87. _this.runningTask = cancellable;
  88. _context.next = 10;
  89. return cancellable.promise;
  90. case 10:
  91. page = _context.sent;
  92. _this.setState({
  93. page: page
  94. }, _this.onLoadSuccess);
  95. _context.next = 18;
  96. break;
  97. case 14:
  98. _context.prev = 14;
  99. _context.t0 = _context["catch"](5);
  100. _this.setState({
  101. page: false
  102. });
  103. _this.onLoadError(_context.t0);
  104. case 18:
  105. case "end":
  106. return _context.stop();
  107. }
  108. }
  109. }, _callee, null, [[5, 14]]);
  110. })));
  111. return _this;
  112. }
  113. (0, _createClass2["default"])(PageInternal, [{
  114. key: "componentDidMount",
  115. value: function componentDidMount() {
  116. var pdf = this.props.pdf;
  117. if (!pdf) {
  118. throw new Error('Attempted to load a page, but no document was specified.');
  119. }
  120. this.loadPage();
  121. }
  122. }, {
  123. key: "componentDidUpdate",
  124. value: function componentDidUpdate(prevProps) {
  125. var pdf = this.props.pdf;
  126. if (prevProps.pdf && pdf !== prevProps.pdf || this.getPageNumber() !== this.getPageNumber(prevProps)) {
  127. var unregisterPage = this.props.unregisterPage;
  128. if (unregisterPage) unregisterPage(this.getPageIndex(prevProps));
  129. this.loadPage();
  130. }
  131. }
  132. }, {
  133. key: "componentWillUnmount",
  134. value: function componentWillUnmount() {
  135. var unregisterPage = this.props.unregisterPage;
  136. if (unregisterPage) unregisterPage(this.pageIndex);
  137. (0, _utils.cancelRunningTask)(this.runningTask);
  138. }
  139. }, {
  140. key: "getPageIndex",
  141. value: function getPageIndex() {
  142. var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
  143. if ((0, _utils.isProvided)(props.pageNumber)) {
  144. return props.pageNumber - 1;
  145. }
  146. if ((0, _utils.isProvided)(props.pageIndex)) {
  147. return props.pageIndex;
  148. }
  149. return null;
  150. }
  151. }, {
  152. key: "getPageNumber",
  153. value: function getPageNumber() {
  154. var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.props;
  155. if ((0, _utils.isProvided)(props.pageNumber)) {
  156. return props.pageNumber;
  157. }
  158. if ((0, _utils.isProvided)(props.pageIndex)) {
  159. return props.pageIndex + 1;
  160. }
  161. return null;
  162. }
  163. }, {
  164. key: "renderMainLayer",
  165. value: function renderMainLayer() {
  166. var renderMode = this.props.renderMode;
  167. switch (renderMode) {
  168. case 'none':
  169. return null;
  170. case 'svg':
  171. return /*#__PURE__*/_react["default"].createElement(_PageSVG["default"], {
  172. key: "".concat(this.pageKeyNoScale, "_svg")
  173. });
  174. case 'canvas':
  175. default:
  176. return /*#__PURE__*/_react["default"].createElement(_PageCanvas["default"], {
  177. key: "".concat(this.pageKey, "_canvas")
  178. });
  179. }
  180. }
  181. }, {
  182. key: "renderTextLayer",
  183. value: function renderTextLayer() {
  184. var renderTextLayer = this.props.renderTextLayer;
  185. if (!renderTextLayer) {
  186. return null;
  187. }
  188. return /*#__PURE__*/_react["default"].createElement(_TextLayer["default"], {
  189. key: "".concat(this.pageKey, "_text")
  190. });
  191. }
  192. }, {
  193. key: "renderAnnotationLayer",
  194. value: function renderAnnotationLayer() {
  195. var renderAnnotationLayer = this.props.renderAnnotationLayer;
  196. if (!renderAnnotationLayer) {
  197. return null;
  198. }
  199. /**
  200. * As of now, PDF.js 2.0.943 returns warnings on unimplemented annotations in SVG mode.
  201. * Therefore, as a fallback, we render "traditional" AnnotationLayer component.
  202. */
  203. return /*#__PURE__*/_react["default"].createElement(_AnnotationLayer["default"], {
  204. key: "".concat(this.pageKey, "_annotations")
  205. });
  206. }
  207. }, {
  208. key: "renderChildren",
  209. value: function renderChildren() {
  210. var children = this.props.children;
  211. return /*#__PURE__*/_react["default"].createElement(_PageContext["default"].Provider, {
  212. value: this.childContext
  213. }, this.renderMainLayer(), this.renderTextLayer(), this.renderAnnotationLayer(), children);
  214. }
  215. }, {
  216. key: "renderContent",
  217. value: function renderContent() {
  218. var pageNumber = this.pageNumber;
  219. var pdf = this.props.pdf;
  220. var page = this.state.page;
  221. if (!pageNumber) {
  222. var noData = this.props.noData;
  223. return /*#__PURE__*/_react["default"].createElement(_Message["default"], {
  224. type: "no-data"
  225. }, typeof noData === 'function' ? noData() : noData);
  226. }
  227. if (pdf === null || page === null) {
  228. var loading = this.props.loading;
  229. return /*#__PURE__*/_react["default"].createElement(_Message["default"], {
  230. type: "loading"
  231. }, typeof loading === 'function' ? loading() : loading);
  232. }
  233. if (pdf === false || page === false) {
  234. var error = this.props.error;
  235. return /*#__PURE__*/_react["default"].createElement(_Message["default"], {
  236. type: "error"
  237. }, typeof error === 'function' ? error() : error);
  238. }
  239. return this.renderChildren();
  240. }
  241. }, {
  242. key: "render",
  243. value: function render() {
  244. var _this2 = this;
  245. var pageNumber = this.pageNumber;
  246. var className = this.props.className;
  247. return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
  248. className: (0, _mergeClassNames["default"])('react-pdf__Page', className),
  249. "data-page-number": pageNumber,
  250. ref: function ref(_ref2) {
  251. var inputRef = _this2.props.inputRef;
  252. if (inputRef) {
  253. inputRef(_ref2);
  254. }
  255. _this2.ref = _ref2;
  256. },
  257. style: {
  258. position: 'relative'
  259. }
  260. }, this.eventProps), this.renderContent());
  261. }
  262. }, {
  263. key: "childContext",
  264. get: function get() {
  265. var page = this.state.page;
  266. if (!page) {
  267. return {};
  268. }
  269. var _this$props2 = this.props,
  270. customTextRenderer = _this$props2.customTextRenderer,
  271. onGetAnnotationsError = _this$props2.onGetAnnotationsError,
  272. onGetAnnotationsSuccess = _this$props2.onGetAnnotationsSuccess,
  273. onGetTextError = _this$props2.onGetTextError,
  274. onGetTextSuccess = _this$props2.onGetTextSuccess,
  275. onRenderAnnotationLayerError = _this$props2.onRenderAnnotationLayerError,
  276. onRenderAnnotationLayerSuccess = _this$props2.onRenderAnnotationLayerSuccess,
  277. onRenderError = _this$props2.onRenderError,
  278. onRenderSuccess = _this$props2.onRenderSuccess,
  279. renderInteractiveForms = _this$props2.renderInteractiveForms;
  280. return {
  281. customTextRenderer: customTextRenderer,
  282. onGetAnnotationsError: onGetAnnotationsError,
  283. onGetAnnotationsSuccess: onGetAnnotationsSuccess,
  284. onGetTextError: onGetTextError,
  285. onGetTextSuccess: onGetTextSuccess,
  286. onRenderAnnotationLayerError: onRenderAnnotationLayerError,
  287. onRenderAnnotationLayerSuccess: onRenderAnnotationLayerSuccess,
  288. onRenderError: onRenderError,
  289. onRenderSuccess: onRenderSuccess,
  290. page: page,
  291. renderInteractiveForms: renderInteractiveForms,
  292. rotate: this.rotate,
  293. scale: this.scale
  294. };
  295. }
  296. /**
  297. * Called when a page is loaded successfully
  298. */
  299. }, {
  300. key: "pageIndex",
  301. get: function get() {
  302. return this.getPageIndex();
  303. }
  304. }, {
  305. key: "pageNumber",
  306. get: function get() {
  307. return this.getPageNumber();
  308. }
  309. }, {
  310. key: "rotate",
  311. get: function get() {
  312. var rotate = this.props.rotate;
  313. if ((0, _utils.isProvided)(rotate)) {
  314. return rotate;
  315. }
  316. var page = this.state.page;
  317. if (!page) {
  318. return null;
  319. }
  320. return page.rotate;
  321. }
  322. }, {
  323. key: "scale",
  324. get: function get() {
  325. var page = this.state.page;
  326. if (!page) {
  327. return null;
  328. }
  329. var _this$props3 = this.props,
  330. scale = _this$props3.scale,
  331. width = _this$props3.width,
  332. height = _this$props3.height;
  333. var rotate = this.rotate; // Be default, we'll render page at 100% * scale width.
  334. var pageScale = 1; // Passing scale explicitly null would cause the page not to render
  335. var scaleWithDefault = scale === null ? defaultScale : scale; // If width/height is defined, calculate the scale of the page so it could be of desired width.
  336. if (width || height) {
  337. var viewport = page.getViewport({
  338. scale: 1,
  339. rotation: rotate
  340. });
  341. pageScale = width ? width / viewport.width : height / viewport.height;
  342. }
  343. return scaleWithDefault * pageScale;
  344. }
  345. }, {
  346. key: "eventProps",
  347. get: function get() {
  348. var _this3 = this;
  349. return (0, _makeEventProps["default"])(this.props, function () {
  350. var page = _this3.state.page;
  351. if (!page) {
  352. return page;
  353. }
  354. return (0, _utils.makePageCallback)(page, _this3.scale);
  355. });
  356. }
  357. }, {
  358. key: "pageKey",
  359. get: function get() {
  360. var page = this.state.page;
  361. return "".concat(page.pageIndex, "@").concat(this.scale, "/").concat(this.rotate);
  362. }
  363. }, {
  364. key: "pageKeyNoScale",
  365. get: function get() {
  366. var page = this.state.page;
  367. return "".concat(page.pageIndex, "/").concat(this.rotate);
  368. }
  369. }]);
  370. return PageInternal;
  371. }(_react.PureComponent);
  372. exports.PageInternal = PageInternal;
  373. PageInternal.defaultProps = {
  374. error: 'Failed to load the page.',
  375. loading: 'Loading page…',
  376. noData: 'No page specified.',
  377. renderAnnotationLayer: true,
  378. renderInteractiveForms: false,
  379. renderMode: 'canvas',
  380. renderTextLayer: true,
  381. scale: defaultScale
  382. };
  383. var isFunctionOrNode = _propTypes["default"].oneOfType([_propTypes["default"].func, _propTypes["default"].node]);
  384. PageInternal.propTypes = _objectSpread({}, _propTypes2.eventProps, {
  385. children: _propTypes["default"].node,
  386. className: _propTypes2.isClassName,
  387. customTextRenderer: _propTypes["default"].func,
  388. error: isFunctionOrNode,
  389. height: _propTypes["default"].number,
  390. inputRef: _propTypes["default"].func,
  391. loading: isFunctionOrNode,
  392. noData: isFunctionOrNode,
  393. onGetTextError: _propTypes["default"].func,
  394. onGetTextSuccess: _propTypes["default"].func,
  395. onLoadError: _propTypes["default"].func,
  396. onLoadSuccess: _propTypes["default"].func,
  397. onRenderError: _propTypes["default"].func,
  398. onRenderSuccess: _propTypes["default"].func,
  399. pageIndex: _propTypes2.isPageIndex,
  400. pageNumber: _propTypes2.isPageNumber,
  401. pdf: _propTypes2.isPdf,
  402. registerPage: _propTypes["default"].func,
  403. renderAnnotationLayer: _propTypes["default"].bool,
  404. renderInteractiveForms: _propTypes["default"].bool,
  405. renderMode: _propTypes2.isRenderMode,
  406. renderTextLayer: _propTypes["default"].bool,
  407. rotate: _propTypes2.isRotate,
  408. scale: _propTypes["default"].number,
  409. unregisterPage: _propTypes["default"].func,
  410. width: _propTypes["default"].number
  411. }); // forwardRef render functions do not support propTypes
  412. /* eslint-disable react/prop-types */
  413. function Page(props, ref) {
  414. return /*#__PURE__*/_react["default"].createElement(_DocumentContext["default"].Consumer, null, function (context) {
  415. return /*#__PURE__*/_react["default"].createElement(PageInternal, (0, _extends2["default"])({
  416. ref: ref
  417. }, context, props, {
  418. // For backwards compatibility
  419. renderAnnotationLayer: typeof props.renderAnnotationLayer !== 'undefined' ? props.renderAnnotationLayer : props.renderAnnotations
  420. }));
  421. });
  422. }
  423. var _default = _react["default"].forwardRef(Page);
  424. exports["default"] = _default;