@libpdf/core 0.0.1-beta.14 → 0.0.1-beta.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -4842,6 +4842,23 @@ interface DrawPageOptions {
4842
4842
  height?: number;
4843
4843
  /** Opacity 0-1 (default: 1.0, fully opaque) */
4844
4844
  opacity?: number;
4845
+ /**
4846
+ * Rotation specification.
4847
+ * Can be a simple number (degrees) or an object with angle and origin.
4848
+ *
4849
+ * @example
4850
+ * ```typescript
4851
+ * // Simple rotation (around position x, y)
4852
+ * page.drawPage(embedded, { x: 100, y: 100, rotate: 45 });
4853
+ *
4854
+ * // Rotation with custom origin
4855
+ * page.drawPage(embedded, { x: 100, y: 100, rotate: { angle: 45, origin: "center" } });
4856
+ *
4857
+ * // Rotation with explicit origin coordinates
4858
+ * page.drawPage(embedded, { x: 100, y: 100, rotate: { angle: 45, origin: { x: 150, y: 150 } } });
4859
+ * ```
4860
+ */
4861
+ rotate?: number | Rotation;
4845
4862
  /** Draw as background behind existing content (default: false = foreground) */
4846
4863
  background?: boolean;
4847
4864
  }
@@ -4956,7 +4973,7 @@ declare class PDFPage {
4956
4973
  * Use `{ background: true }` to draw behind existing content.
4957
4974
  *
4958
4975
  * @param embedded - The embedded page to draw
4959
- * @param options - Drawing options (position, scale, opacity, background)
4976
+ * @param options - Drawing options (position, scale, rotate, opacity, background)
4960
4977
  *
4961
4978
  * @example
4962
4979
  * ```typescript
@@ -4973,6 +4990,15 @@ declare class PDFPage {
4973
4990
  *
4974
4991
  * // Draw as a background
4975
4992
  * page.drawPage(letterhead, { background: true });
4993
+ *
4994
+ * // Draw rotated 45 degrees counter-clockwise (around position x, y)
4995
+ * page.drawPage(stamp, { x: 100, y: 100, rotate: 45, scale: 0.5 });
4996
+ *
4997
+ * // Draw rotated around the center of the embedded page
4998
+ * page.drawPage(stamp, { x: 100, y: 100, rotate: { angle: 45, origin: "center" }, scale: 0.5 });
4999
+ *
5000
+ * // Draw rotated around a custom point
5001
+ * page.drawPage(stamp, { x: 100, y: 100, rotate: { angle: 90, origin: { x: 200, y: 200 } } });
4976
5002
  * ```
4977
5003
  */
4978
5004
  drawPage(embedded: PDFEmbeddedPage, options?: DrawPageOptions): void;
package/dist/index.mjs CHANGED
@@ -9,7 +9,7 @@ import { createCMSECDSASignature } from "pkijs";
9
9
  import { base64 } from "@scure/base";
10
10
 
11
11
  //#region package.json
12
- var version = "0.0.1-beta.14";
12
+ var version = "0.0.1-beta.15";
13
13
 
14
14
  //#endregion
15
15
  //#region src/objects/pdf-array.ts
@@ -24339,7 +24339,7 @@ var PDFPage = class PDFPage {
24339
24339
  * Use `{ background: true }` to draw behind existing content.
24340
24340
  *
24341
24341
  * @param embedded - The embedded page to draw
24342
- * @param options - Drawing options (position, scale, opacity, background)
24342
+ * @param options - Drawing options (position, scale, rotate, opacity, background)
24343
24343
  *
24344
24344
  * @example
24345
24345
  * ```typescript
@@ -24356,6 +24356,15 @@ var PDFPage = class PDFPage {
24356
24356
  *
24357
24357
  * // Draw as a background
24358
24358
  * page.drawPage(letterhead, { background: true });
24359
+ *
24360
+ * // Draw rotated 45 degrees counter-clockwise (around position x, y)
24361
+ * page.drawPage(stamp, { x: 100, y: 100, rotate: 45, scale: 0.5 });
24362
+ *
24363
+ * // Draw rotated around the center of the embedded page
24364
+ * page.drawPage(stamp, { x: 100, y: 100, rotate: { angle: 45, origin: "center" }, scale: 0.5 });
24365
+ *
24366
+ * // Draw rotated around a custom point
24367
+ * page.drawPage(stamp, { x: 100, y: 100, rotate: { angle: 90, origin: { x: 200, y: 200 } } });
24359
24368
  * ```
24360
24369
  */
24361
24370
  drawPage(embedded, options = {}) {
@@ -24377,9 +24386,40 @@ var PDFPage = class PDFPage {
24377
24386
  });
24378
24387
  ops.push(`/${gsName} gs`);
24379
24388
  }
24380
- const translateX = x - embedded.box.x * scaleX;
24381
- const translateY = y - embedded.box.y * scaleY;
24382
- ops.push(`${this.formatNumber(scaleX)} 0 0 ${this.formatNumber(scaleY)} ${this.formatNumber(translateX)} ${this.formatNumber(translateY)} cm`);
24389
+ let rotateDegrees = 0;
24390
+ let rotateOriginX = x;
24391
+ let rotateOriginY = y;
24392
+ if (options.rotate !== void 0) if (typeof options.rotate === "number") rotateDegrees = options.rotate;
24393
+ else {
24394
+ rotateDegrees = options.rotate.angle;
24395
+ const bounds = {
24396
+ x,
24397
+ y,
24398
+ width: embedded.width * scaleX,
24399
+ height: embedded.height * scaleY
24400
+ };
24401
+ const defaultOrigin = {
24402
+ x,
24403
+ y
24404
+ };
24405
+ const origin = resolveRotationOrigin(options.rotate.origin, bounds, defaultOrigin);
24406
+ rotateOriginX = origin.x;
24407
+ rotateOriginY = origin.y;
24408
+ }
24409
+ if (rotateDegrees !== 0) {
24410
+ const radians = rotateDegrees * Math.PI / 180;
24411
+ const cos = Math.cos(radians);
24412
+ const sin = Math.sin(radians);
24413
+ ops.push(`1 0 0 1 ${this.formatNumber(rotateOriginX)} ${this.formatNumber(rotateOriginY)} cm`);
24414
+ ops.push(`${this.formatNumber(cos)} ${this.formatNumber(sin)} ${this.formatNumber(-sin)} ${this.formatNumber(cos)} 0 0 cm`);
24415
+ const offsetX = x - rotateOriginX - embedded.box.x * scaleX;
24416
+ const offsetY = y - rotateOriginY - embedded.box.y * scaleY;
24417
+ ops.push(`${this.formatNumber(scaleX)} 0 0 ${this.formatNumber(scaleY)} ${this.formatNumber(offsetX)} ${this.formatNumber(offsetY)} cm`);
24418
+ } else {
24419
+ const translateX = x - embedded.box.x * scaleX;
24420
+ const translateY = y - embedded.box.y * scaleY;
24421
+ ops.push(`${this.formatNumber(scaleX)} 0 0 ${this.formatNumber(scaleY)} ${this.formatNumber(translateX)} ${this.formatNumber(translateY)} cm`);
24422
+ }
24383
24423
  ops.push(`/${xobjectName} Do`);
24384
24424
  ops.push("Q");
24385
24425
  const contentOps = ops.join("\n");