You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

218 lines
7.8 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"] = PageCanvas;
  8. exports.PageCanvasInternal = void 0;
  9. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  10. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  11. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  12. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
  13. var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  14. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  15. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  16. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  17. var _react = _interopRequireWildcard(require("react"));
  18. var _propTypes = _interopRequireDefault(require("prop-types"));
  19. var _PageContext = _interopRequireDefault(require("../PageContext"));
  20. var _utils = require("../shared/utils");
  21. var _propTypes2 = require("../shared/propTypes");
  22. 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); }; }
  23. 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; } }
  24. var PageCanvasInternal = /*#__PURE__*/function (_PureComponent) {
  25. (0, _inherits2["default"])(PageCanvasInternal, _PureComponent);
  26. var _super = _createSuper(PageCanvasInternal);
  27. function PageCanvasInternal() {
  28. var _this;
  29. (0, _classCallCheck2["default"])(this, PageCanvasInternal);
  30. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  31. args[_key] = arguments[_key];
  32. }
  33. _this = _super.call.apply(_super, [this].concat(args));
  34. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRenderSuccess", function () {
  35. _this.renderer = null;
  36. var _this$props = _this.props,
  37. onRenderSuccess = _this$props.onRenderSuccess,
  38. page = _this$props.page,
  39. scale = _this$props.scale;
  40. if (onRenderSuccess) onRenderSuccess((0, _utils.makePageCallback)(page, scale));
  41. });
  42. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRenderError", function (error) {
  43. if ((0, _utils.isCancelException)(error)) {
  44. return;
  45. }
  46. (0, _utils.errorOnDev)(error);
  47. var onRenderError = _this.props.onRenderError;
  48. if (onRenderError) onRenderError(error);
  49. });
  50. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "drawPageOnCanvas", function () {
  51. var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this),
  52. canvas = _assertThisInitialize.canvasLayer;
  53. if (!canvas) {
  54. return null;
  55. }
  56. var _assertThisInitialize2 = (0, _assertThisInitialized2["default"])(_this),
  57. renderViewport = _assertThisInitialize2.renderViewport,
  58. viewport = _assertThisInitialize2.viewport;
  59. var _this$props2 = _this.props,
  60. page = _this$props2.page,
  61. renderInteractiveForms = _this$props2.renderInteractiveForms;
  62. canvas.width = renderViewport.width;
  63. canvas.height = renderViewport.height;
  64. canvas.style.width = "".concat(Math.floor(viewport.width), "px");
  65. canvas.style.height = "".concat(Math.floor(viewport.height), "px");
  66. var renderContext = {
  67. get canvasContext() {
  68. return canvas.getContext('2d');
  69. },
  70. viewport: renderViewport,
  71. renderInteractiveForms: renderInteractiveForms
  72. }; // If another render is in progress, let's cancel it
  73. _this.cancelRenderingTask();
  74. _this.renderer = page.render(renderContext);
  75. return _this.renderer.promise.then(_this.onRenderSuccess)["catch"](_this.onRenderError);
  76. });
  77. return _this;
  78. }
  79. (0, _createClass2["default"])(PageCanvasInternal, [{
  80. key: "componentDidMount",
  81. value: function componentDidMount() {
  82. this.drawPageOnCanvas();
  83. }
  84. }, {
  85. key: "componentDidUpdate",
  86. value: function componentDidUpdate(prevProps) {
  87. var _this$props3 = this.props,
  88. page = _this$props3.page,
  89. renderInteractiveForms = _this$props3.renderInteractiveForms;
  90. if (renderInteractiveForms !== prevProps.renderInteractiveForms) {
  91. // Ensures the canvas will be re-rendered from scratch. Otherwise all form data will stay.
  92. page.cleanup();
  93. this.drawPageOnCanvas();
  94. }
  95. }
  96. }, {
  97. key: "componentWillUnmount",
  98. value: function componentWillUnmount() {
  99. this.cancelRenderingTask();
  100. /**
  101. * Zeroing the width and height cause most browsers to release graphics
  102. * resources immediately, which can greatly reduce memory consumption.
  103. */
  104. if (this.canvasLayer) {
  105. this.canvasLayer.width = 0;
  106. this.canvasLayer.height = 0;
  107. this.canvasLayer = null;
  108. }
  109. }
  110. }, {
  111. key: "cancelRenderingTask",
  112. value: function cancelRenderingTask() {
  113. /* eslint-disable no-underscore-dangle */
  114. if (this.renderer && this.renderer._internalRenderTask.running) {
  115. this.renderer._internalRenderTask.cancel();
  116. }
  117. /* eslint-enable no-underscore-dangle */
  118. }
  119. /**
  120. * Called when a page is rendered successfully.
  121. */
  122. }, {
  123. key: "render",
  124. value: function render() {
  125. var _this2 = this;
  126. return /*#__PURE__*/_react["default"].createElement("canvas", {
  127. className: "react-pdf__Page__canvas",
  128. dir: "ltr",
  129. ref: function ref(_ref) {
  130. _this2.canvasLayer = _ref;
  131. },
  132. style: {
  133. display: 'block',
  134. userSelect: 'none'
  135. }
  136. });
  137. }
  138. }, {
  139. key: "renderViewport",
  140. get: function get() {
  141. var _this$props4 = this.props,
  142. page = _this$props4.page,
  143. rotate = _this$props4.rotate,
  144. scale = _this$props4.scale;
  145. var pixelRatio = (0, _utils.getPixelRatio)();
  146. return page.getViewport({
  147. scale: scale * pixelRatio,
  148. rotation: rotate
  149. });
  150. }
  151. }, {
  152. key: "viewport",
  153. get: function get() {
  154. var _this$props5 = this.props,
  155. page = _this$props5.page,
  156. rotate = _this$props5.rotate,
  157. scale = _this$props5.scale;
  158. return page.getViewport({
  159. scale: scale,
  160. rotation: rotate
  161. });
  162. }
  163. }]);
  164. return PageCanvasInternal;
  165. }(_react.PureComponent);
  166. exports.PageCanvasInternal = PageCanvasInternal;
  167. PageCanvasInternal.propTypes = {
  168. onRenderError: _propTypes["default"].func,
  169. onRenderSuccess: _propTypes["default"].func,
  170. page: _propTypes2.isPage.isRequired,
  171. renderInteractiveForms: _propTypes["default"].bool,
  172. rotate: _propTypes2.isRotate,
  173. scale: _propTypes["default"].number
  174. };
  175. function PageCanvas(props) {
  176. return /*#__PURE__*/_react["default"].createElement(_PageContext["default"].Consumer, null, function (context) {
  177. return /*#__PURE__*/_react["default"].createElement(PageCanvasInternal, (0, _extends2["default"])({}, context, props));
  178. });
  179. }