react-pdf-highlighter
Version:
Set of React components for PDF annotation
41 lines (40 loc) • 1.19 kB
JavaScript
const getBoundingRect = (clientRects) => {
const rects = Array.from(clientRects).map((rect) => {
const { left, top, width, height, pageNumber: pageNumber2 } = rect;
const X02 = left;
const X12 = left + width;
const Y02 = top;
const Y12 = top + height;
return { X0: X02, X1: X12, Y0: Y02, Y1: Y12, pageNumber: pageNumber2 };
});
let firstPageNumber = Number.MAX_SAFE_INTEGER;
for (const rect of rects) {
firstPageNumber = Math.min(
firstPageNumber,
rect.pageNumber ?? firstPageNumber
);
}
const rectsWithSizeOnFirstPage = rects.filter(
(rect) => (rect.X0 > 0 || rect.X1 > 0 || rect.Y0 > 0 || rect.Y1 > 0) && rect.pageNumber === firstPageNumber
);
const optimal = rectsWithSizeOnFirstPage.reduce((res, rect) => {
return {
X0: Math.min(res.X0, rect.X0),
X1: Math.max(res.X1, rect.X1),
Y0: Math.min(res.Y0, rect.Y0),
Y1: Math.max(res.Y1, rect.Y1),
pageNumber: firstPageNumber
};
}, rectsWithSizeOnFirstPage[0]);
const { X0, X1, Y0, Y1, pageNumber } = optimal;
return {
left: X0,
top: Y0,
width: X1 - X0,
height: Y1 - Y0,
pageNumber
};
};
export {
getBoundingRect
};