hummus-recipe
Version:
A powerful PDF tool for NodeJS based on HummusJS
83 lines (75 loc) • 2.45 kB
JavaScript
exports._centrify = function _centrify(x, y, pageNumber) {
pageNumber = pageNumber || this.pageNumber;
const { width, height } = this.metadata[pageNumber];
switch (x) {
case 'center':
x = width / 2;
break;
}
switch (y) {
case 'center':
y = height / 2;
break;
}
return [x,y];
};
exports._calibrateCoordinate = function _calibrateCoordinate(x, y, offsetX = 0, offsetY = 0, pageNumber) {
pageNumber = pageNumber || this.pageNumber;
const { height, mediaBox } = this.metadata[pageNumber];
const startX = mediaBox[0];
const startY = mediaBox[1];
[x,y] = this._centrify(x, y, pageNumber);
const nx = x + offsetX + startX;
const ny = height - y + offsetY + startY;
return {
nx,
ny
};
};
exports._calibrateCoordinateForAnnots = function _calibrateCoordinateForAnnots(x, y, offsetX = 0, offsetY = 0, pageNumber) {
const { nx: tx, ny: ty } = this._calibrateCoordinate(x, y, offsetX, offsetY, pageNumber);
const { width, height, rotate, mediaBox } = this.metadata[pageNumber];
const startX = mediaBox[0];
const startY = mediaBox[1];
let rotateOffsetX = 0,
rotateOffsetY = 0;
switch (rotate) {
case 90:
rotateOffsetX = height - startX;
rotateOffsetY = startY;
break;
case 180:
rotateOffsetX = width;
rotateOffsetY = height;
break;
case 270:
rotateOffsetX = startX;
rotateOffsetY = width - startY;
break;
default:
}
// return { nx: tx, ny: ty };
const { nx, ny } = rotateCoord(0, 0, tx, ty, 360 - rotate, rotateOffsetX, rotateOffsetY);
return {
nx,
ny
};
};
exports._reverseCoordinate = function _reverseCoordinate(x, y, offsetX = 0, offsetY = 0, pageNumber) {
pageNumber = pageNumber || this.pageNumber;
const { height } = this.metadata[pageNumber];
const ox = x - offsetX;
const oy = height - y - offsetY;
return {
ox,
oy
};
};
function rotateCoord(cx, cy, x, y, angle, offsetX = 0, offsetY = 0) {
const radians = (Math.PI / 180) * angle,
cos = Math.cos(radians),
sin = Math.sin(radians),
nx = (cos * (x - cx)) + (sin * (y - cy)) + cx + offsetX,
ny = (cos * (y - cy)) - (sin * (x - cx)) + cy + offsetY;
return { nx, ny };
}