@cj-tech-master/excelts 9.0.0 → 9.1.0

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.
Files changed (96) hide show
  1. package/dist/browser/index.browser.d.ts +2 -0
  2. package/dist/browser/index.browser.js +2 -0
  3. package/dist/browser/index.d.ts +2 -0
  4. package/dist/browser/index.js +2 -0
  5. package/dist/browser/modules/excel/image.d.ts +27 -2
  6. package/dist/browser/modules/excel/image.js +23 -1
  7. package/dist/browser/modules/excel/stream/worksheet-writer.d.ts +16 -1
  8. package/dist/browser/modules/excel/stream/worksheet-writer.js +68 -0
  9. package/dist/browser/modules/excel/types.d.ts +72 -0
  10. package/dist/browser/modules/excel/utils/drawing-utils.d.ts +4 -0
  11. package/dist/browser/modules/excel/utils/drawing-utils.js +5 -0
  12. package/dist/browser/modules/excel/utils/ooxml-paths.d.ts +4 -0
  13. package/dist/browser/modules/excel/utils/ooxml-paths.js +15 -0
  14. package/dist/browser/modules/excel/utils/watermark-image.d.ts +67 -0
  15. package/dist/browser/modules/excel/utils/watermark-image.js +383 -0
  16. package/dist/browser/modules/excel/worksheet.d.ts +39 -1
  17. package/dist/browser/modules/excel/worksheet.js +99 -0
  18. package/dist/browser/modules/excel/xlsx/xform/core/content-types-xform.js +3 -2
  19. package/dist/browser/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +6 -1
  20. package/dist/browser/modules/excel/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -1
  21. package/dist/browser/modules/excel/xlsx/xform/drawing/blip-fill-xform.js +0 -1
  22. package/dist/browser/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +3 -1
  23. package/dist/browser/modules/excel/xlsx/xform/drawing/blip-xform.js +22 -6
  24. package/dist/browser/modules/excel/xlsx/xform/drawing/pic-xform.d.ts +3 -0
  25. package/dist/browser/modules/excel/xlsx/xform/drawing/pic-xform.js +5 -1
  26. package/dist/browser/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +19 -0
  27. package/dist/browser/modules/excel/xlsx/xform/drawing/vml-drawing-xform.js +103 -4
  28. package/dist/browser/modules/excel/xlsx/xform/sheet/worksheet-xform.js +135 -8
  29. package/dist/browser/modules/excel/xlsx/xlsx.browser.d.ts +1 -0
  30. package/dist/browser/modules/excel/xlsx/xlsx.browser.js +53 -1
  31. package/dist/browser/modules/pdf/core/pdf-writer.d.ts +1 -1
  32. package/dist/browser/modules/pdf/core/pdf-writer.js +2 -1
  33. package/dist/browser/modules/pdf/index.d.ts +1 -1
  34. package/dist/browser/modules/pdf/render/page-renderer.d.ts +29 -1
  35. package/dist/browser/modules/pdf/render/page-renderer.js +394 -25
  36. package/dist/browser/modules/pdf/render/pdf-exporter.js +84 -47
  37. package/dist/browser/modules/pdf/types.d.ts +235 -0
  38. package/dist/cjs/index.js +5 -2
  39. package/dist/cjs/modules/excel/image.js +23 -1
  40. package/dist/cjs/modules/excel/stream/worksheet-writer.js +68 -0
  41. package/dist/cjs/modules/excel/utils/drawing-utils.js +5 -0
  42. package/dist/cjs/modules/excel/utils/ooxml-paths.js +19 -0
  43. package/dist/cjs/modules/excel/utils/watermark-image.js +386 -0
  44. package/dist/cjs/modules/excel/worksheet.js +99 -0
  45. package/dist/cjs/modules/excel/xlsx/xform/core/content-types-xform.js +3 -2
  46. package/dist/cjs/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +6 -1
  47. package/dist/cjs/modules/excel/xlsx/xform/drawing/blip-fill-xform.js +0 -1
  48. package/dist/cjs/modules/excel/xlsx/xform/drawing/blip-xform.js +22 -6
  49. package/dist/cjs/modules/excel/xlsx/xform/drawing/pic-xform.js +5 -1
  50. package/dist/cjs/modules/excel/xlsx/xform/drawing/vml-drawing-xform.js +103 -4
  51. package/dist/cjs/modules/excel/xlsx/xform/sheet/worksheet-xform.js +134 -7
  52. package/dist/cjs/modules/excel/xlsx/xlsx.browser.js +52 -0
  53. package/dist/cjs/modules/pdf/core/pdf-writer.js +2 -1
  54. package/dist/cjs/modules/pdf/render/page-renderer.js +396 -25
  55. package/dist/cjs/modules/pdf/render/pdf-exporter.js +83 -46
  56. package/dist/esm/index.browser.js +2 -0
  57. package/dist/esm/index.js +2 -0
  58. package/dist/esm/modules/excel/image.js +23 -1
  59. package/dist/esm/modules/excel/stream/worksheet-writer.js +68 -0
  60. package/dist/esm/modules/excel/utils/drawing-utils.js +5 -0
  61. package/dist/esm/modules/excel/utils/ooxml-paths.js +15 -0
  62. package/dist/esm/modules/excel/utils/watermark-image.js +383 -0
  63. package/dist/esm/modules/excel/worksheet.js +99 -0
  64. package/dist/esm/modules/excel/xlsx/xform/core/content-types-xform.js +3 -2
  65. package/dist/esm/modules/excel/xlsx/xform/drawing/base-cell-anchor-xform.js +6 -1
  66. package/dist/esm/modules/excel/xlsx/xform/drawing/blip-fill-xform.js +0 -1
  67. package/dist/esm/modules/excel/xlsx/xform/drawing/blip-xform.js +22 -6
  68. package/dist/esm/modules/excel/xlsx/xform/drawing/pic-xform.js +5 -1
  69. package/dist/esm/modules/excel/xlsx/xform/drawing/vml-drawing-xform.js +103 -4
  70. package/dist/esm/modules/excel/xlsx/xform/sheet/worksheet-xform.js +135 -8
  71. package/dist/esm/modules/excel/xlsx/xlsx.browser.js +53 -1
  72. package/dist/esm/modules/pdf/core/pdf-writer.js +2 -1
  73. package/dist/esm/modules/pdf/render/page-renderer.js +394 -25
  74. package/dist/esm/modules/pdf/render/pdf-exporter.js +84 -47
  75. package/dist/iife/excelts.iife.js +2390 -469
  76. package/dist/iife/excelts.iife.js.map +1 -1
  77. package/dist/iife/excelts.iife.min.js +47 -47
  78. package/dist/types/index.browser.d.ts +2 -0
  79. package/dist/types/index.d.ts +2 -0
  80. package/dist/types/modules/excel/image.d.ts +27 -2
  81. package/dist/types/modules/excel/stream/worksheet-writer.d.ts +16 -1
  82. package/dist/types/modules/excel/types.d.ts +72 -0
  83. package/dist/types/modules/excel/utils/drawing-utils.d.ts +4 -0
  84. package/dist/types/modules/excel/utils/ooxml-paths.d.ts +4 -0
  85. package/dist/types/modules/excel/utils/watermark-image.d.ts +67 -0
  86. package/dist/types/modules/excel/worksheet.d.ts +39 -1
  87. package/dist/types/modules/excel/xlsx/xform/drawing/blip-fill-xform.d.ts +2 -1
  88. package/dist/types/modules/excel/xlsx/xform/drawing/blip-xform.d.ts +3 -1
  89. package/dist/types/modules/excel/xlsx/xform/drawing/pic-xform.d.ts +3 -0
  90. package/dist/types/modules/excel/xlsx/xform/drawing/vml-drawing-xform.d.ts +19 -0
  91. package/dist/types/modules/excel/xlsx/xlsx.browser.d.ts +1 -0
  92. package/dist/types/modules/pdf/core/pdf-writer.d.ts +1 -1
  93. package/dist/types/modules/pdf/index.d.ts +1 -1
  94. package/dist/types/modules/pdf/render/page-renderer.d.ts +29 -1
  95. package/dist/types/modules/pdf/types.d.ts +235 -0
  96. package/package.json +1 -1
@@ -339,7 +339,241 @@ export interface PdfExportOptions {
339
339
  printHighQuality: boolean;
340
340
  }>;
341
341
  };
342
+ /**
343
+ * Watermark to render on every page.
344
+ * Supports text watermarks (e.g. "CONFIDENTIAL") and image watermarks (e.g. company logo).
345
+ *
346
+ * @example Text watermark:
347
+ * ```typescript
348
+ * watermark: {
349
+ * type: "text",
350
+ * text: "DRAFT",
351
+ * opacity: 0.1,
352
+ * rotation: -45
353
+ * }
354
+ * ```
355
+ *
356
+ * @example Image watermark:
357
+ * ```typescript
358
+ * watermark: {
359
+ * type: "image",
360
+ * data: logoPng,
361
+ * format: "png",
362
+ * opacity: 0.08
363
+ * }
364
+ * ```
365
+ */
366
+ watermark?: PdfWatermark;
342
367
  }
368
+ /**
369
+ * Text watermark configuration for PDF export.
370
+ *
371
+ * Renders semi-transparent text (e.g. "CONFIDENTIAL", "DRAFT") on every page.
372
+ *
373
+ * @example
374
+ * ```typescript
375
+ * const bytes = await pdf(data, {
376
+ * watermark: {
377
+ * type: "text",
378
+ * text: "CONFIDENTIAL",
379
+ * color: { r: 0.8, g: 0, b: 0 },
380
+ * opacity: 0.1,
381
+ * rotation: -45
382
+ * }
383
+ * });
384
+ * ```
385
+ */
386
+ export interface PdfTextWatermark {
387
+ type: "text";
388
+ /** The watermark text to display. */
389
+ text: string;
390
+ /**
391
+ * Font size in points.
392
+ * @default 54
393
+ */
394
+ fontSize?: number;
395
+ /**
396
+ * Text color (RGB, each 0-1).
397
+ * @default { r: 0.75, g: 0.75, b: 0.75 }
398
+ */
399
+ color?: PdfColor;
400
+ /**
401
+ * Opacity (0 = fully transparent, 1 = fully opaque).
402
+ * @default 0.15
403
+ */
404
+ opacity?: number;
405
+ /**
406
+ * Rotation angle in degrees (positive = counter-clockwise).
407
+ * @default -45
408
+ */
409
+ rotation?: number;
410
+ /**
411
+ * Font family name. Must be a standard PDF font (Type1) or the embedded font.
412
+ * @default "Helvetica"
413
+ */
414
+ fontFamily?: string;
415
+ /**
416
+ * Whether to render in bold.
417
+ * @default false
418
+ */
419
+ bold?: boolean;
420
+ /**
421
+ * Whether to render in italic.
422
+ * @default false
423
+ */
424
+ italic?: boolean;
425
+ /**
426
+ * Position on the page. `"center"` places the watermark at the geometric center.
427
+ * A custom `{ x, y }` object specifies the **center point** of the watermark
428
+ * in PDF points (origin at bottom-left corner of the page).
429
+ * @default "center"
430
+ */
431
+ position?: "center" | {
432
+ x: number;
433
+ y: number;
434
+ };
435
+ /**
436
+ * When true, the watermark text is tiled in a repeating grid across the entire page.
437
+ * @default false
438
+ */
439
+ repeat?: boolean;
440
+ /**
441
+ * Horizontal spacing (in points) between repeated watermark tiles.
442
+ * Only used when `repeat` is true.
443
+ * @default 200
444
+ */
445
+ repeatSpacingX?: number;
446
+ /**
447
+ * Vertical spacing (in points) between repeated watermark tiles.
448
+ * Only used when `repeat` is true.
449
+ * @default 200
450
+ */
451
+ repeatSpacingY?: number;
452
+ }
453
+ /**
454
+ * Image watermark configuration for PDF export.
455
+ *
456
+ * Embeds a semi-transparent image (e.g. company logo) on every page.
457
+ *
458
+ * @example
459
+ * ```typescript
460
+ * import { readFileSync } from "fs";
461
+ * const logo = readFileSync("logo.png");
462
+ *
463
+ * const bytes = await pdf(data, {
464
+ * watermark: {
465
+ * type: "image",
466
+ * data: logo,
467
+ * format: "png",
468
+ * opacity: 0.08,
469
+ * scale: 0.4
470
+ * }
471
+ * });
472
+ * ```
473
+ */
474
+ export interface PdfImageWatermark {
475
+ type: "image";
476
+ /** Raw image bytes (JPEG or PNG). */
477
+ data: Uint8Array;
478
+ /** Image format. */
479
+ format: "jpeg" | "png";
480
+ /**
481
+ * Opacity (0 = fully transparent, 1 = fully opaque).
482
+ * @default 0.15
483
+ */
484
+ opacity?: number;
485
+ /**
486
+ * Rotation angle in degrees (positive = counter-clockwise).
487
+ * @default 0
488
+ */
489
+ rotation?: number;
490
+ /**
491
+ * Scale factor relative to the page size.
492
+ * 0.5 means the image's largest dimension will be scaled to
493
+ * 50% of the smaller page dimension (width or height).
494
+ * Ignored when `width` and `height` are explicitly provided.
495
+ * @default 0.5
496
+ */
497
+ scale?: number;
498
+ /**
499
+ * Explicit image width in PDF points. When set together with `height`,
500
+ * overrides `scale` and renders the image at the exact specified dimensions.
501
+ */
502
+ width?: number;
503
+ /**
504
+ * Explicit image height in PDF points. When set together with `width`,
505
+ * overrides `scale` and renders the image at the exact specified dimensions.
506
+ */
507
+ height?: number;
508
+ /**
509
+ * Position on the page. `"center"` places the watermark at the geometric center.
510
+ * A custom `{ x, y }` object specifies the **center point** of the watermark
511
+ * in PDF points (origin at bottom-left corner of the page).
512
+ * @default "center"
513
+ */
514
+ position?: "center" | {
515
+ x: number;
516
+ y: number;
517
+ };
518
+ /**
519
+ * When true, the watermark image is tiled in a repeating grid across the entire page.
520
+ * @default false
521
+ */
522
+ repeat?: boolean;
523
+ /**
524
+ * Horizontal spacing (in points) between repeated watermark tiles.
525
+ * Only used when `repeat` is true.
526
+ * @default 200
527
+ */
528
+ repeatSpacingX?: number;
529
+ /**
530
+ * Vertical spacing (in points) between repeated watermark tiles.
531
+ * Only used when `repeat` is true.
532
+ * @default 200
533
+ */
534
+ repeatSpacingY?: number;
535
+ }
536
+ /**
537
+ * Common watermark filter and placement options shared by text and image watermarks.
538
+ */
539
+ export interface PdfWatermarkFilter {
540
+ /**
541
+ * Restrict the watermark to specific page numbers (1-based, document-global).
542
+ * When set, only pages whose number is in this array get the watermark.
543
+ * If omitted, all pages receive the watermark.
544
+ *
545
+ * @example Only on the first page:
546
+ * ```typescript
547
+ * watermark: { type: "text", text: "COVER", pages: [1] }
548
+ * ```
549
+ */
550
+ pages?: number[];
551
+ /**
552
+ * Restrict the watermark to specific sheet names (case-insensitive).
553
+ * When set, only pages belonging to the named sheets get the watermark.
554
+ * If omitted, all sheets receive the watermark.
555
+ *
556
+ * @example Only on the "Summary" sheet:
557
+ * ```typescript
558
+ * watermark: { type: "text", text: "DRAFT", sheets: ["Summary"] }
559
+ * ```
560
+ */
561
+ sheets?: string[];
562
+ /**
563
+ * Watermark layering relative to page content.
564
+ *
565
+ * - `"under"` — watermark renders **behind** all page content including
566
+ * cell fills, borders, text, grid lines, headers, and footers (default)
567
+ * - `"over"` — watermark renders **on top of** all page content
568
+ *
569
+ * @default "under"
570
+ */
571
+ placement?: "under" | "over";
572
+ }
573
+ /**
574
+ * Watermark configuration — either text or image, with optional page/sheet filters.
575
+ */
576
+ export type PdfWatermark = (PdfTextWatermark | PdfImageWatermark) & PdfWatermarkFilter;
343
577
  /**
344
578
  * Page margins in PDF points.
345
579
  */
@@ -369,6 +603,7 @@ export interface ResolvedPdfOptions {
369
603
  author: string;
370
604
  subject: string;
371
605
  creator: string;
606
+ watermark?: PdfWatermark;
372
607
  }
373
608
  /**
374
609
  * RGBA color used internally for PDF rendering.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cj-tech-master/excelts",
3
- "version": "9.0.0",
3
+ "version": "9.1.0",
4
4
  "description": "Zero-dependency TypeScript toolkit — Excel (XLSX), PDF, CSV, Markdown, XML, ZIP/TAR, and streaming.",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",