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.
 
 
 
 

226 lines
8.0 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"] = TextLayer;
  8. exports.TextLayerInternal = void 0;
  9. var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  10. var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
  11. var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
  12. var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
  13. var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
  14. var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
  15. var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
  16. var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
  17. var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
  18. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  19. var _react = _interopRequireWildcard(require("react"));
  20. var _propTypes = _interopRequireDefault(require("prop-types"));
  21. var _makeCancellablePromise = _interopRequireDefault(require("make-cancellable-promise"));
  22. var _PageContext = _interopRequireDefault(require("../PageContext"));
  23. var _TextLayerItem = _interopRequireDefault(require("./TextLayerItem"));
  24. var _utils = require("../shared/utils");
  25. var _propTypes2 = require("../shared/propTypes");
  26. 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); }; }
  27. 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; } }
  28. var TextLayerInternal = /*#__PURE__*/function (_PureComponent) {
  29. (0, _inherits2["default"])(TextLayerInternal, _PureComponent);
  30. var _super = _createSuper(TextLayerInternal);
  31. function TextLayerInternal() {
  32. var _this;
  33. (0, _classCallCheck2["default"])(this, TextLayerInternal);
  34. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  35. args[_key] = arguments[_key];
  36. }
  37. _this = _super.call.apply(_super, [this].concat(args));
  38. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
  39. textItems: null
  40. });
  41. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "loadTextItems", /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
  42. var page, cancellable, _yield$cancellable$pr, textItems;
  43. return _regenerator["default"].wrap(function _callee$(_context) {
  44. while (1) {
  45. switch (_context.prev = _context.next) {
  46. case 0:
  47. page = _this.props.page;
  48. _context.prev = 1;
  49. cancellable = (0, _makeCancellablePromise["default"])(page.getTextContent());
  50. _this.runningTask = cancellable;
  51. _context.next = 6;
  52. return cancellable.promise;
  53. case 6:
  54. _yield$cancellable$pr = _context.sent;
  55. textItems = _yield$cancellable$pr.items;
  56. _this.setState({
  57. textItems: textItems
  58. }, _this.onLoadSuccess);
  59. _context.next = 14;
  60. break;
  61. case 11:
  62. _context.prev = 11;
  63. _context.t0 = _context["catch"](1);
  64. _this.onLoadError(_context.t0);
  65. case 14:
  66. case "end":
  67. return _context.stop();
  68. }
  69. }
  70. }, _callee, null, [[1, 11]]);
  71. })));
  72. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadSuccess", function () {
  73. var onGetTextSuccess = _this.props.onGetTextSuccess;
  74. var textItems = _this.state.textItems;
  75. if (onGetTextSuccess) onGetTextSuccess(textItems);
  76. });
  77. (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onLoadError", function (error) {
  78. _this.setState({
  79. textItems: false
  80. });
  81. (0, _utils.errorOnDev)(error);
  82. var onGetTextError = _this.props.onGetTextError;
  83. if (onGetTextError) onGetTextError(error);
  84. });
  85. return _this;
  86. }
  87. (0, _createClass2["default"])(TextLayerInternal, [{
  88. key: "componentDidMount",
  89. value: function componentDidMount() {
  90. var page = this.props.page;
  91. if (!page) {
  92. throw new Error('Attempted to load page text content, but no page was specified.');
  93. }
  94. this.loadTextItems();
  95. }
  96. }, {
  97. key: "componentDidUpdate",
  98. value: function componentDidUpdate(prevProps) {
  99. var page = this.props.page;
  100. if (prevProps.page && page !== prevProps.page) {
  101. this.loadTextItems();
  102. }
  103. }
  104. }, {
  105. key: "componentWillUnmount",
  106. value: function componentWillUnmount() {
  107. (0, _utils.cancelRunningTask)(this.runningTask);
  108. }
  109. }, {
  110. key: "renderTextItems",
  111. value: function renderTextItems() {
  112. var textItems = this.state.textItems;
  113. if (!textItems) {
  114. return null;
  115. }
  116. return textItems.map(function (textItem, itemIndex) {
  117. return /*#__PURE__*/_react["default"].createElement(_TextLayerItem["default"] // eslint-disable-next-line react/no-array-index-key
  118. , (0, _extends2["default"])({
  119. key: itemIndex,
  120. itemIndex: itemIndex
  121. }, textItem));
  122. });
  123. }
  124. }, {
  125. key: "render",
  126. value: function render() {
  127. var viewport = this.unrotatedViewport,
  128. rotate = this.rotate;
  129. return /*#__PURE__*/_react["default"].createElement("div", {
  130. className: "react-pdf__Page__textContent",
  131. style: {
  132. position: 'absolute',
  133. top: '50%',
  134. left: '50%',
  135. width: "".concat(viewport.width, "px"),
  136. height: "".concat(viewport.height, "px"),
  137. color: 'transparent',
  138. transform: "translate(-50%, -50%) rotate(".concat(rotate, "deg)"),
  139. WebkitTransform: "translate(-50%, -50%) rotate(".concat(rotate, "deg)"),
  140. pointerEvents: 'none'
  141. }
  142. }, this.renderTextItems());
  143. }
  144. }, {
  145. key: "unrotatedViewport",
  146. get: function get() {
  147. var _this$props = this.props,
  148. page = _this$props.page,
  149. scale = _this$props.scale;
  150. return page.getViewport({
  151. scale: scale
  152. });
  153. }
  154. /**
  155. * It might happen that the page is rotated by default. In such cases, we shouldn't rotate
  156. * text content.
  157. */
  158. }, {
  159. key: "rotate",
  160. get: function get() {
  161. var _this$props2 = this.props,
  162. page = _this$props2.page,
  163. rotate = _this$props2.rotate;
  164. return rotate - page.rotate;
  165. }
  166. }]);
  167. return TextLayerInternal;
  168. }(_react.PureComponent);
  169. exports.TextLayerInternal = TextLayerInternal;
  170. TextLayerInternal.propTypes = {
  171. onGetTextError: _propTypes["default"].func,
  172. onGetTextSuccess: _propTypes["default"].func,
  173. page: _propTypes2.isPage.isRequired,
  174. rotate: _propTypes2.isRotate,
  175. scale: _propTypes["default"].number
  176. };
  177. function TextLayer(props) {
  178. return /*#__PURE__*/_react["default"].createElement(_PageContext["default"].Consumer, null, function (context) {
  179. return /*#__PURE__*/_react["default"].createElement(TextLayerInternal, (0, _extends2["default"])({}, context, props));
  180. });
  181. }