react-pdf-ner-annotator
Version:
A React component to annotate named entities directly onto a PDF.
57 lines • 2.83 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
exports.__esModule = true;
var react_1 = require("react");
var lodash_1 = __importDefault(require("lodash"));
var pdfHelpers_1 = require("../helpers/pdfHelpers");
var useTextLayer = function (scale, context, initialTextLayer) {
var _a = (0, react_1.useState)(initialTextLayer || null), textLayer = _a[0], setTextLayer = _a[1];
var _b = (0, react_1.useState)(1.5), baseScale = _b[0], setBaseScale = _b[1];
(0, react_1.useEffect)(function () {
if (textLayer && context && baseScale !== scale) {
var rescaledWords = textLayer.map(function (word) {
var coords = (0, pdfHelpers_1.recalculateBoundingBox)(word.coords, baseScale, scale);
var fontSize = (0, pdfHelpers_1.calculateFontSize)(coords.width, coords.height, word.text);
var transform = (0, pdfHelpers_1.calculateTransform)(coords.width, fontSize, word.fontFamily, word.text, context);
return __assign(__assign({}, word), { coords: coords, fontSize: fontSize, transform: transform });
});
setTextLayer(rescaledWords);
setBaseScale(scale);
}
}, [scale, baseScale, textLayer, context]);
var buildTextLayer = (0, react_1.useCallback)(function (textContent, viewport) {
var textResult = textContent.items.map(function (item) {
var style = textContent.styles[item.fontName];
var _a = (0, pdfHelpers_1.calculateTextProperties)(item, style, viewport, context), left = _a.left, top = _a.top, fontSize = _a.fontSize, transform = _a.transform;
return {
coords: {
left: left,
top: top,
width: item.width * scale,
height: item.height * scale
},
text: item.str,
fontSize: fontSize,
fontFamily: style.fontFamily,
transform: transform
};
});
setTextLayer(lodash_1["default"].sortBy(textResult, ['coords.top', 'coords.left']));
}, [context, scale]);
return { textLayer: textLayer, buildTextLayer: buildTextLayer };
};
exports["default"] = useTextLayer;
//# sourceMappingURL=useTextLayer.js.map