UNPKG

@aeolun/muhammara

Version:

Create, read and modify PDF files and streams. A drop in replacement for hummusjs PDF library

115 lines (107 loc) 2.33 kB
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 }; }