web-annotation-renderer 0.6.0 → 0.6.2

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 (87) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +52 -51
  4. package/dist/index.js.map +1 -1
  5. package/dist/index10.cjs +1 -1
  6. package/dist/index10.cjs.map +1 -1
  7. package/dist/index10.js +13 -210
  8. package/dist/index10.js.map +1 -1
  9. package/dist/index11.cjs +1 -1
  10. package/dist/index11.cjs.map +1 -1
  11. package/dist/index11.js +50 -13
  12. package/dist/index11.js.map +1 -1
  13. package/dist/index12.cjs +1 -1
  14. package/dist/index12.cjs.map +1 -1
  15. package/dist/index12.js +155 -48
  16. package/dist/index12.js.map +1 -1
  17. package/dist/index13.cjs +1 -1
  18. package/dist/index13.cjs.map +1 -1
  19. package/dist/index13.js +34 -169
  20. package/dist/index13.js.map +1 -1
  21. package/dist/index14.cjs +1 -1
  22. package/dist/index14.cjs.map +1 -1
  23. package/dist/index14.js +65 -28
  24. package/dist/index14.js.map +1 -1
  25. package/dist/index15.cjs +1 -1
  26. package/dist/index15.cjs.map +1 -1
  27. package/dist/index15.js +33 -71
  28. package/dist/index15.js.map +1 -1
  29. package/dist/index16.cjs +1 -1
  30. package/dist/index16.cjs.map +1 -1
  31. package/dist/index16.js +77 -22
  32. package/dist/index16.js.map +1 -1
  33. package/dist/index17.cjs +1 -1
  34. package/dist/index17.cjs.map +1 -1
  35. package/dist/index17.js +31 -52
  36. package/dist/index17.js.map +1 -1
  37. package/dist/index18.cjs +1 -1
  38. package/dist/index18.cjs.map +1 -1
  39. package/dist/index18.js +22 -23
  40. package/dist/index18.js.map +1 -1
  41. package/dist/index2.cjs +1 -1
  42. package/dist/index2.cjs.map +1 -1
  43. package/dist/index2.js +5 -6
  44. package/dist/index2.js.map +1 -1
  45. package/dist/index21.cjs +1 -1
  46. package/dist/index21.cjs.map +1 -1
  47. package/dist/index21.js +48 -27
  48. package/dist/index21.js.map +1 -1
  49. package/dist/index24.cjs +1 -1
  50. package/dist/index24.js +1 -1
  51. package/dist/index25.cjs +1 -1
  52. package/dist/index25.js +1 -1
  53. package/dist/index29.cjs +1 -1
  54. package/dist/index29.cjs.map +1 -1
  55. package/dist/index29.js +70 -4
  56. package/dist/index29.js.map +1 -1
  57. package/dist/index3.cjs +1 -1
  58. package/dist/index3.js +1 -1
  59. package/dist/index30.cjs +2 -0
  60. package/dist/index30.cjs.map +1 -0
  61. package/dist/index30.js +8 -0
  62. package/dist/index30.js.map +1 -0
  63. package/dist/index31.cjs +2 -0
  64. package/dist/index31.cjs.map +1 -0
  65. package/dist/index31.js +995 -0
  66. package/dist/index31.js.map +1 -0
  67. package/dist/index5.cjs +1 -1
  68. package/dist/index5.cjs.map +1 -1
  69. package/dist/index5.js +189 -80
  70. package/dist/index5.js.map +1 -1
  71. package/dist/index6.cjs +1 -1
  72. package/dist/index6.cjs.map +1 -1
  73. package/dist/index6.js +18 -60
  74. package/dist/index6.js.map +1 -1
  75. package/dist/index7.cjs +1 -1
  76. package/dist/index7.cjs.map +1 -1
  77. package/dist/index7.js +17 -17
  78. package/dist/index7.js.map +1 -1
  79. package/dist/index8.cjs +1 -1
  80. package/dist/index8.cjs.map +1 -1
  81. package/dist/index8.js +125 -16
  82. package/dist/index8.js.map +1 -1
  83. package/dist/index9.cjs +1 -1
  84. package/dist/index9.cjs.map +1 -1
  85. package/dist/index9.js +201 -118
  86. package/dist/index9.js.map +1 -1
  87. package/package.json +4 -2
package/dist/index6.js CHANGED
@@ -1,65 +1,23 @@
1
- function s(t) {
2
- if (t == null)
3
- return Math.random;
4
- let n = typeof t == "string" ? t.split("").reduce((e, r) => e + r.charCodeAt(0), 0) : t;
5
- return function() {
6
- n |= 0, n = n + 1831565813 | 0;
7
- let e = Math.imul(n ^ n >>> 15, 1 | n);
8
- return e = e + Math.imul(e ^ e >>> 7, 61 | e) ^ e, ((e ^ e >>> 14) >>> 0) / 4294967296;
1
+ const i = (h, t) => ({
2
+ left: h.x * t.width,
3
+ top: h.y * t.height,
4
+ width: (h.w ?? 0) * t.width,
5
+ height: (h.h ?? 0) * t.height
6
+ }), e = (h, t) => ({
7
+ left: h.x * t.width,
8
+ top: h.y * t.height,
9
+ width: (h.w ?? 0) * t.width,
10
+ height: (h.h ?? 0) * t.height
11
+ });
12
+ function o(h, t) {
13
+ return {
14
+ x: h.x * t.width,
15
+ y: h.y * t.height
9
16
  };
10
17
  }
11
- function M(t, n, e = null) {
12
- const { amplitude: r = 0 } = n || {};
13
- if (r === 0 || !t || t.length === 0)
14
- return t;
15
- const u = s(e);
16
- return t.map(([l, f]) => [
17
- l + (u() - 0.5) * r,
18
- f + (u() - 0.5) * r
19
- ]);
20
- }
21
- function b(t, n) {
22
- const { taperIn: e = 0, taperOut: r = 0 } = n || {};
23
- if (!t || t.length === 0)
24
- return [];
25
- if (e === 0 && r === 0)
26
- return t.map(() => 1);
27
- const u = t.length;
28
- return t.map((l, f) => {
29
- const c = u > 1 ? f / (u - 1) : 0;
30
- return e > 0 && c < e ? c / e : r > 0 && c > 1 - r ? (1 - c) / r : 1;
31
- });
32
- }
33
- function A(t, n) {
34
- const { amplitude: e = 0, frequency: r = 0.05 } = n || {};
35
- return e === 0 || !t || t.length < 2 ? t : t.map(([u, l], f) => {
36
- const c = f / (t.length - 1), h = Math.sin(c * Math.PI * 2 * r * t.length) * e;
37
- let y = 0, d = 1;
38
- if (f < t.length - 1) {
39
- const [m, p] = t[f + 1], a = m - u, o = p - l, i = Math.sqrt(a * a + o * o);
40
- i > 1e-4 && (y = -o / i, d = a / i);
41
- }
42
- return [
43
- u + y * h,
44
- l + d * h
45
- ];
46
- });
47
- }
48
- function g(t, n) {
49
- if (!n) return { ...t };
50
- if (!t) return { ...n };
51
- const e = { ...t };
52
- for (const r of Object.keys(n)) {
53
- const u = n[r], l = t[r];
54
- u !== null && typeof u == "object" && !Array.isArray(u) && l !== null && typeof l == "object" && !Array.isArray(l) ? e[r] = g(l, u) : u !== void 0 && (e[r] = u);
55
- }
56
- return e;
57
- }
58
18
  export {
59
- M as applyJitter,
60
- b as applyPressure,
61
- A as applyWobble,
62
- g as deepMerge,
63
- s as seededRandom
19
+ e as NormSizeToPixel,
20
+ o as pointNormToAbs,
21
+ i as rectNormToAbs
64
22
  };
65
23
  //# sourceMappingURL=index6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index6.js","sources":["../src/pen/effects.js"],"sourcesContent":["/**\n * Pen Effects - Utility functions for hand-drawn feel\n *\n * Provides jitter, pressure, and wobble effects for stroke paths.\n * Pure functions that transform point arrays without side effects.\n *\n * @module pen/effects\n */\n\n/**\n * Creates a seeded random number generator\n *\n * Uses mulberry32 algorithm for deterministic randomness.\n * Same seed produces same sequence of random numbers.\n *\n * @param {string|number|null} seed - Seed value (null uses Math.random)\n * @returns {Function} Function that returns random numbers 0-1\n */\nexport function seededRandom(seed) {\n if (seed === null || seed === undefined) {\n return Math.random;\n }\n\n // Convert string seed to number\n let numSeed = typeof seed === 'string'\n ? seed.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)\n : seed;\n\n // Mulberry32 algorithm\n return function() {\n numSeed |= 0;\n numSeed = (numSeed + 0x6D2B79F5) | 0;\n let t = Math.imul(numSeed ^ (numSeed >>> 15), 1 | numSeed);\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/**\n * Applies random jitter offset to points\n *\n * Adds small random displacement to each point for hand-drawn imperfection.\n * Returns new array, does not mutate input.\n *\n * @param {Array<[number, number]>} points - Array of [x, y] coordinates\n * @param {Object} config - Jitter configuration\n * @param {number} config.amplitude - Max offset in normalized units (0 = disabled)\n * @param {number} [config.frequency=1] - Not currently used, reserved for future\n * @param {string|number|null} [seed=null] - Seed for reproducible randomness\n * @returns {Array<[number, number]>} New array with jittered points\n */\nexport function applyJitter(points, config, seed = null) {\n const { amplitude = 0 } = config || {};\n\n if (amplitude === 0 || !points || points.length === 0) {\n return points;\n }\n\n const rng = seededRandom(seed);\n\n return points.map(([x, y]) => [\n x + (rng() - 0.5) * amplitude,\n y + (rng() - 0.5) * amplitude\n ]);\n}\n\n/**\n * Calculates pressure values for variable stroke width\n *\n * Simulates pen pressure with taper at start and end of stroke.\n * Returns pressure multipliers (0-1) for each point.\n *\n * @param {Array<[number, number]>} points - Array of [x, y] coordinates\n * @param {Object} config - Pressure configuration\n * @param {number} [config.taperIn=0] - Start taper length (0-1, fraction of stroke)\n * @param {number} [config.taperOut=0] - End taper length (0-1, fraction of stroke)\n * @returns {Array<number>} Pressure values (0-1) per point\n */\nexport function applyPressure(points, config) {\n const { taperIn = 0, taperOut = 0 } = config || {};\n\n if (!points || points.length === 0) {\n return [];\n }\n\n if (taperIn === 0 && taperOut === 0) {\n return points.map(() => 1.0);\n }\n\n const len = points.length;\n\n return points.map((_, i) => {\n const t = len > 1 ? i / (len - 1) : 0;\n\n // Taper in at start\n if (taperIn > 0 && t < taperIn) {\n return t / taperIn;\n }\n\n // Taper out at end\n if (taperOut > 0 && t > 1 - taperOut) {\n return (1 - t) / taperOut;\n }\n\n // Full pressure in middle\n return 1.0;\n });\n}\n\n/**\n * Applies low-frequency wobble perpendicular to stroke direction\n *\n * Adds gentle wave effect to simulate natural hand movement.\n * Returns new array, does not mutate input.\n *\n * @param {Array<[number, number]>} points - Array of [x, y] coordinates\n * @param {Object} config - Wobble configuration\n * @param {number} config.amplitude - Wave height in normalized units (0 = disabled)\n * @param {number} [config.frequency=0.05] - Wave frequency\n * @returns {Array<[number, number]>} New array with wobbled points\n */\nexport function applyWobble(points, config) {\n const { amplitude = 0, frequency = 0.05 } = config || {};\n\n if (amplitude === 0 || !points || points.length < 2) {\n return points;\n }\n\n return points.map(([x, y], i) => {\n // Calculate perpendicular direction based on position in stroke\n // Use simple sine wave for now\n const t = i / (points.length - 1);\n const offset = Math.sin(t * Math.PI * 2 * frequency * points.length) * amplitude;\n\n // Calculate perpendicular direction from neighbors\n let perpX = 0;\n let perpY = 1;\n\n if (i < points.length - 1) {\n const [nx, ny] = points[i + 1];\n const dx = nx - x;\n const dy = ny - y;\n const len = Math.sqrt(dx * dx + dy * dy);\n\n if (len > 0.0001) {\n // Perpendicular is (-dy, dx) normalized\n perpX = -dy / len;\n perpY = dx / len;\n }\n }\n\n return [\n x + perpX * offset,\n y + perpY * offset\n ];\n });\n}\n\n/**\n * Deep merges configuration objects\n *\n * Merges source into target, handling nested objects.\n * Returns new object, does not mutate inputs.\n *\n * @param {Object} target - Target object\n * @param {Object} source - Source object to merge\n * @returns {Object} Merged object\n */\nexport function deepMerge(target, source) {\n if (!source) return { ...target };\n if (!target) return { ...source };\n\n const result = { ...target };\n\n for (const key of Object.keys(source)) {\n const sourceVal = source[key];\n const targetVal = target[key];\n\n if (\n sourceVal !== null &&\n typeof sourceVal === 'object' &&\n !Array.isArray(sourceVal) &&\n targetVal !== null &&\n typeof targetVal === 'object' &&\n !Array.isArray(targetVal)\n ) {\n result[key] = deepMerge(targetVal, sourceVal);\n } else if (sourceVal !== undefined) {\n result[key] = sourceVal;\n }\n }\n\n return result;\n}\n"],"names":["seededRandom","seed","numSeed","acc","char","t","applyJitter","points","config","amplitude","rng","x","y","applyPressure","taperIn","taperOut","len","_","i","applyWobble","frequency","offset","perpX","perpY","nx","ny","dx","dy","deepMerge","target","source","result","key","sourceVal","targetVal"],"mappings":"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"}
1
+ {"version":3,"file":"index6.js","sources":["../src/utils/coordinateUtils.js"],"sourcesContent":["/**\n * Coordinate Utility Functions\n *\n * This module provides utility functions for coordinate transformations\n * between normalized (0-1) coordinates and absolute pixel coordinates.\n * Used by annotation layers to position elements on the PDF canvas.\n */\n\n/**\n * Convert normalized rectangle to absolute pixel coordinates\n *\n * Transforms a rectangle with normalized coordinates (0-1 range) to\n * absolute pixel coordinates based on viewport dimensions.\n *\n * @param {{x: number, y: number, w: number, h: number}} rect - Normalized rectangle (0-1)\n * @param {{width: number, height: number}} viewport - Viewport dimensions in pixels\n * @returns {{left: number, top: number, width: number, height: number}} Absolute coordinates in pixels\n *\n * @example\n * const rect = { x: 0.1, y: 0.2, w: 0.5, h: 0.3 };\n * const viewport = { width: 1000, height: 1400 };\n * const absolute = rectNormToAbs(rect, viewport);\n * // Returns: { left: 100, top: 280, width: 500, height: 420 }\n */\nexport const rectNormToAbs = (r, vp) => ({\n left: r.x * vp.width,\n top: r.y * vp.height,\n width: (r.w ?? 0) * vp.width,\n height: (r.h ?? 0) * vp.height,\n});\n\n/**\n * Convert normalized size to pixel dimensions (Legacy)\n *\n * @deprecated Use rectNormToAbs instead. This function is kept for backward compatibility.\n *\n * Transforms normalized rectangle coordinates to absolute pixel coordinates.\n * This is an alias for rectNormToAbs maintained for backward compatibility.\n *\n * @param {{x: number, y: number, w: number, h: number}} r - Normalized rectangle (0-1)\n * @param {{width: number, height: number}} vp - Viewport dimensions in pixels\n * @returns {{left: number, top: number, width: number, height: number}} Absolute coordinates in pixels\n */\nexport const NormSizeToPixel = (r, vp) => ({\n left: r.x * vp.width,\n top: r.y * vp.height,\n width: (r.w ?? 0) * vp.width,\n height: (r.h ?? 0) * vp.height,\n});\n\n/**\n * Convert normalized point to absolute pixel coordinates\n *\n * Transforms a point with normalized coordinates (0-1 range) to\n * absolute pixel coordinates based on viewport dimensions.\n *\n * @param {{x: number, y: number}} point - Normalized point (0-1)\n * @param {{width: number, height: number}} viewport - Viewport dimensions in pixels\n * @returns {{x: number, y: number}} Absolute coordinates in pixels\n *\n * @example\n * const point = { x: 0.5, y: 0.5 };\n * const viewport = { width: 1000, height: 1400 };\n * const absolute = pointNormToAbs(point, viewport);\n * // Returns: { x: 500, y: 700 }\n */\nexport function pointNormToAbs(point, viewport) {\n return {\n x: point.x * viewport.width,\n y: point.y * viewport.height\n };\n}\n"],"names":["rectNormToAbs","r","vp","NormSizeToPixel","pointNormToAbs","point","viewport"],"mappings":"AAwBY,MAACA,IAAgB,CAACC,GAAGC,OAAQ;AAAA,EACvC,MAAMD,EAAE,IAAIC,EAAG;AAAA,EACf,KAAKD,EAAE,IAAIC,EAAG;AAAA,EACd,QAAQD,EAAE,KAAK,KAAKC,EAAG;AAAA,EACvB,SAASD,EAAE,KAAK,KAAKC,EAAG;AAC1B,IAcaC,IAAkB,CAACF,GAAGC,OAAQ;AAAA,EACzC,MAAMD,EAAE,IAAIC,EAAG;AAAA,EACf,KAAKD,EAAE,IAAIC,EAAG;AAAA,EACd,QAAQD,EAAE,KAAK,KAAKC,EAAG;AAAA,EACvB,SAASD,EAAE,KAAK,KAAKC,EAAG;AAC1B;AAkBO,SAASE,EAAeC,GAAOC,GAAU;AAC9C,SAAO;AAAA,IACL,GAAGD,EAAM,IAAIC,EAAS;AAAA,IACtB,GAAGD,EAAM,IAAIC,EAAS;AAAA,EAC1B;AACA;"}
package/dist/index7.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=(t,h)=>({left:t.x*h.width,top:t.y*h.height,width:(t.w??0)*h.width,height:(t.h??0)*h.height}),i=(t,h)=>({left:t.x*h.width,top:t.y*h.height,width:(t.w??0)*h.width,height:(t.h??0)*h.height});function o(t,h){return{x:t.x*h.width,y:t.y*h.height}}exports.NormSizeToPixel=i;exports.pointNormToAbs=o;exports.rectNormToAbs=e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function n(e,t){if(!e)throw new Error("Page object is required");return e.getViewport({scale:t})}function r(e){return e?{width:e.width,height:e.height}:{width:0,height:0}}function o(e,t,i){return{width:e*i,height:t*i}}exports.calculateScaledDimensions=o;exports.calculateViewport=n;exports.getViewportDimensions=r;
2
2
  //# sourceMappingURL=index7.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index7.cjs","sources":["../src/utils/coordinateUtils.js"],"sourcesContent":["/**\n * Coordinate Utility Functions\n *\n * This module provides utility functions for coordinate transformations\n * between normalized (0-1) coordinates and absolute pixel coordinates.\n * Used by annotation layers to position elements on the PDF canvas.\n */\n\n/**\n * Convert normalized rectangle to absolute pixel coordinates\n *\n * Transforms a rectangle with normalized coordinates (0-1 range) to\n * absolute pixel coordinates based on viewport dimensions.\n *\n * @param {{x: number, y: number, w: number, h: number}} rect - Normalized rectangle (0-1)\n * @param {{width: number, height: number}} viewport - Viewport dimensions in pixels\n * @returns {{left: number, top: number, width: number, height: number}} Absolute coordinates in pixels\n *\n * @example\n * const rect = { x: 0.1, y: 0.2, w: 0.5, h: 0.3 };\n * const viewport = { width: 1000, height: 1400 };\n * const absolute = rectNormToAbs(rect, viewport);\n * // Returns: { left: 100, top: 280, width: 500, height: 420 }\n */\nexport const rectNormToAbs = (r, vp) => ({\n left: r.x * vp.width,\n top: r.y * vp.height,\n width: (r.w ?? 0) * vp.width,\n height: (r.h ?? 0) * vp.height,\n});\n\n/**\n * Convert normalized size to pixel dimensions (Legacy)\n *\n * @deprecated Use rectNormToAbs instead. This function is kept for backward compatibility.\n *\n * Transforms normalized rectangle coordinates to absolute pixel coordinates.\n * This is an alias for rectNormToAbs maintained for backward compatibility.\n *\n * @param {{x: number, y: number, w: number, h: number}} r - Normalized rectangle (0-1)\n * @param {{width: number, height: number}} vp - Viewport dimensions in pixels\n * @returns {{left: number, top: number, width: number, height: number}} Absolute coordinates in pixels\n */\nexport const NormSizeToPixel = (r, vp) => ({\n left: r.x * vp.width,\n top: r.y * vp.height,\n width: (r.w ?? 0) * vp.width,\n height: (r.h ?? 0) * vp.height,\n});\n\n/**\n * Convert normalized point to absolute pixel coordinates\n *\n * Transforms a point with normalized coordinates (0-1 range) to\n * absolute pixel coordinates based on viewport dimensions.\n *\n * @param {{x: number, y: number}} point - Normalized point (0-1)\n * @param {{width: number, height: number}} viewport - Viewport dimensions in pixels\n * @returns {{x: number, y: number}} Absolute coordinates in pixels\n *\n * @example\n * const point = { x: 0.5, y: 0.5 };\n * const viewport = { width: 1000, height: 1400 };\n * const absolute = pointNormToAbs(point, viewport);\n * // Returns: { x: 500, y: 700 }\n */\nexport function pointNormToAbs(point, viewport) {\n return {\n x: point.x * viewport.width,\n y: point.y * viewport.height\n };\n}\n"],"names":["rectNormToAbs","r","vp","NormSizeToPixel","pointNormToAbs","point","viewport"],"mappings":"gFAwBY,MAACA,EAAgB,CAACC,EAAGC,KAAQ,CACvC,KAAMD,EAAE,EAAIC,EAAG,MACf,IAAKD,EAAE,EAAIC,EAAG,OACd,OAAQD,EAAE,GAAK,GAAKC,EAAG,MACvB,QAASD,EAAE,GAAK,GAAKC,EAAG,MAC1B,GAcaC,EAAkB,CAACF,EAAGC,KAAQ,CACzC,KAAMD,EAAE,EAAIC,EAAG,MACf,IAAKD,EAAE,EAAIC,EAAG,OACd,OAAQD,EAAE,GAAK,GAAKC,EAAG,MACvB,QAASD,EAAE,GAAK,GAAKC,EAAG,MAC1B,GAkBO,SAASE,EAAeC,EAAOC,EAAU,CAC9C,MAAO,CACL,EAAGD,EAAM,EAAIC,EAAS,MACtB,EAAGD,EAAM,EAAIC,EAAS,MAC1B,CACA"}
1
+ {"version":3,"file":"index7.cjs","sources":["../src/utils/viewportUtils.js"],"sourcesContent":["/**\n * Viewport Utility Functions\n *\n * This module provides utility functions for PDF viewport calculations\n * and transformations. These functions are used by the PDF viewer to\n * calculate viewport dimensions and manage scaling.\n */\n\n/**\n * Calculate viewport from PDF page\n *\n * Creates a viewport object from a PDF.js page with the specified scale.\n * The viewport contains dimensions and transformation matrix for rendering.\n *\n * @param {Object} page - PDF.js page object\n * @param {number} scale - Scale factor for rendering\n * @returns {Object} Viewport object with width, height, and transform matrix\n *\n * @example\n * const viewport = calculateViewport(pdfPage, 1.5);\n * // Returns: { width: 1200, height: 1600, scale: 1.5, ... }\n */\nexport function calculateViewport(page, scale) {\n if (!page) {\n throw new Error('Page object is required');\n }\n\n return page.getViewport({ scale });\n}\n\n/**\n * Get viewport dimensions\n *\n * Extracts width and height from a viewport object.\n * Useful for coordinate transformations and layout calculations.\n *\n * @param {Object} viewport - Viewport object from PDF.js\n * @returns {{width: number, height: number}} Dimensions object\n *\n * @example\n * const { width, height } = getViewportDimensions(viewport);\n * // Returns: { width: 1200, height: 1600 }\n */\nexport function getViewportDimensions(viewport) {\n if (!viewport) {\n return { width: 0, height: 0 };\n }\n\n return {\n width: viewport.width,\n height: viewport.height\n };\n}\n\n/**\n * Calculate scaled dimensions\n *\n * Calculates dimensions for a given scale factor.\n * Used when zoom level changes to determine new canvas size.\n *\n * @param {number} baseWidth - Original width\n * @param {number} baseHeight - Original height\n * @param {number} scale - Scale factor\n * @returns {{width: number, height: number}} Scaled dimensions\n *\n * @example\n * const scaled = calculateScaledDimensions(800, 1000, 1.5);\n * // Returns: { width: 1200, height: 1500 }\n */\nexport function calculateScaledDimensions(baseWidth, baseHeight, scale) {\n return {\n width: baseWidth * scale,\n height: baseHeight * scale\n };\n}\n"],"names":["calculateViewport","page","scale","getViewportDimensions","viewport","calculateScaledDimensions","baseWidth","baseHeight"],"mappings":"gFAsBO,SAASA,EAAkBC,EAAMC,EAAO,CAC7C,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,yBAAyB,EAG3C,OAAOA,EAAK,YAAY,CAAE,MAAAC,EAAO,CACnC,CAeO,SAASC,EAAsBC,EAAU,CAC9C,OAAKA,EAIE,CACL,MAAOA,EAAS,MAChB,OAAQA,EAAS,MACrB,EANW,CAAE,MAAO,EAAG,OAAQ,CAAC,CAOhC,CAiBO,SAASC,EAA0BC,EAAWC,EAAYL,EAAO,CACtE,MAAO,CACL,MAAOI,EAAYJ,EACnB,OAAQK,EAAaL,CACzB,CACA"}
package/dist/index7.js CHANGED
@@ -1,23 +1,23 @@
1
- const i = (h, t) => ({
2
- left: h.x * t.width,
3
- top: h.y * t.height,
4
- width: (h.w ?? 0) * t.width,
5
- height: (h.h ?? 0) * t.height
6
- }), e = (h, t) => ({
7
- left: h.x * t.width,
8
- top: h.y * t.height,
9
- width: (h.w ?? 0) * t.width,
10
- height: (h.h ?? 0) * t.height
11
- });
12
- function o(h, t) {
1
+ function r(t, e) {
2
+ if (!t)
3
+ throw new Error("Page object is required");
4
+ return t.getViewport({ scale: e });
5
+ }
6
+ function n(t) {
7
+ return t ? {
8
+ width: t.width,
9
+ height: t.height
10
+ } : { width: 0, height: 0 };
11
+ }
12
+ function h(t, e, i) {
13
13
  return {
14
- x: h.x * t.width,
15
- y: h.y * t.height
14
+ width: t * i,
15
+ height: e * i
16
16
  };
17
17
  }
18
18
  export {
19
- e as NormSizeToPixel,
20
- o as pointNormToAbs,
21
- i as rectNormToAbs
19
+ h as calculateScaledDimensions,
20
+ r as calculateViewport,
21
+ n as getViewportDimensions
22
22
  };
23
23
  //# sourceMappingURL=index7.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index7.js","sources":["../src/utils/coordinateUtils.js"],"sourcesContent":["/**\n * Coordinate Utility Functions\n *\n * This module provides utility functions for coordinate transformations\n * between normalized (0-1) coordinates and absolute pixel coordinates.\n * Used by annotation layers to position elements on the PDF canvas.\n */\n\n/**\n * Convert normalized rectangle to absolute pixel coordinates\n *\n * Transforms a rectangle with normalized coordinates (0-1 range) to\n * absolute pixel coordinates based on viewport dimensions.\n *\n * @param {{x: number, y: number, w: number, h: number}} rect - Normalized rectangle (0-1)\n * @param {{width: number, height: number}} viewport - Viewport dimensions in pixels\n * @returns {{left: number, top: number, width: number, height: number}} Absolute coordinates in pixels\n *\n * @example\n * const rect = { x: 0.1, y: 0.2, w: 0.5, h: 0.3 };\n * const viewport = { width: 1000, height: 1400 };\n * const absolute = rectNormToAbs(rect, viewport);\n * // Returns: { left: 100, top: 280, width: 500, height: 420 }\n */\nexport const rectNormToAbs = (r, vp) => ({\n left: r.x * vp.width,\n top: r.y * vp.height,\n width: (r.w ?? 0) * vp.width,\n height: (r.h ?? 0) * vp.height,\n});\n\n/**\n * Convert normalized size to pixel dimensions (Legacy)\n *\n * @deprecated Use rectNormToAbs instead. This function is kept for backward compatibility.\n *\n * Transforms normalized rectangle coordinates to absolute pixel coordinates.\n * This is an alias for rectNormToAbs maintained for backward compatibility.\n *\n * @param {{x: number, y: number, w: number, h: number}} r - Normalized rectangle (0-1)\n * @param {{width: number, height: number}} vp - Viewport dimensions in pixels\n * @returns {{left: number, top: number, width: number, height: number}} Absolute coordinates in pixels\n */\nexport const NormSizeToPixel = (r, vp) => ({\n left: r.x * vp.width,\n top: r.y * vp.height,\n width: (r.w ?? 0) * vp.width,\n height: (r.h ?? 0) * vp.height,\n});\n\n/**\n * Convert normalized point to absolute pixel coordinates\n *\n * Transforms a point with normalized coordinates (0-1 range) to\n * absolute pixel coordinates based on viewport dimensions.\n *\n * @param {{x: number, y: number}} point - Normalized point (0-1)\n * @param {{width: number, height: number}} viewport - Viewport dimensions in pixels\n * @returns {{x: number, y: number}} Absolute coordinates in pixels\n *\n * @example\n * const point = { x: 0.5, y: 0.5 };\n * const viewport = { width: 1000, height: 1400 };\n * const absolute = pointNormToAbs(point, viewport);\n * // Returns: { x: 500, y: 700 }\n */\nexport function pointNormToAbs(point, viewport) {\n return {\n x: point.x * viewport.width,\n y: point.y * viewport.height\n };\n}\n"],"names":["rectNormToAbs","r","vp","NormSizeToPixel","pointNormToAbs","point","viewport"],"mappings":"AAwBY,MAACA,IAAgB,CAACC,GAAGC,OAAQ;AAAA,EACvC,MAAMD,EAAE,IAAIC,EAAG;AAAA,EACf,KAAKD,EAAE,IAAIC,EAAG;AAAA,EACd,QAAQD,EAAE,KAAK,KAAKC,EAAG;AAAA,EACvB,SAASD,EAAE,KAAK,KAAKC,EAAG;AAC1B,IAcaC,IAAkB,CAACF,GAAGC,OAAQ;AAAA,EACzC,MAAMD,EAAE,IAAIC,EAAG;AAAA,EACf,KAAKD,EAAE,IAAIC,EAAG;AAAA,EACd,QAAQD,EAAE,KAAK,KAAKC,EAAG;AAAA,EACvB,SAASD,EAAE,KAAK,KAAKC,EAAG;AAC1B;AAkBO,SAASE,EAAeC,GAAOC,GAAU;AAC9C,SAAO;AAAA,IACL,GAAGD,EAAM,IAAIC,EAAS;AAAA,IACtB,GAAGD,EAAM,IAAIC,EAAS;AAAA,EAC1B;AACA;"}
1
+ {"version":3,"file":"index7.js","sources":["../src/utils/viewportUtils.js"],"sourcesContent":["/**\n * Viewport Utility Functions\n *\n * This module provides utility functions for PDF viewport calculations\n * and transformations. These functions are used by the PDF viewer to\n * calculate viewport dimensions and manage scaling.\n */\n\n/**\n * Calculate viewport from PDF page\n *\n * Creates a viewport object from a PDF.js page with the specified scale.\n * The viewport contains dimensions and transformation matrix for rendering.\n *\n * @param {Object} page - PDF.js page object\n * @param {number} scale - Scale factor for rendering\n * @returns {Object} Viewport object with width, height, and transform matrix\n *\n * @example\n * const viewport = calculateViewport(pdfPage, 1.5);\n * // Returns: { width: 1200, height: 1600, scale: 1.5, ... }\n */\nexport function calculateViewport(page, scale) {\n if (!page) {\n throw new Error('Page object is required');\n }\n\n return page.getViewport({ scale });\n}\n\n/**\n * Get viewport dimensions\n *\n * Extracts width and height from a viewport object.\n * Useful for coordinate transformations and layout calculations.\n *\n * @param {Object} viewport - Viewport object from PDF.js\n * @returns {{width: number, height: number}} Dimensions object\n *\n * @example\n * const { width, height } = getViewportDimensions(viewport);\n * // Returns: { width: 1200, height: 1600 }\n */\nexport function getViewportDimensions(viewport) {\n if (!viewport) {\n return { width: 0, height: 0 };\n }\n\n return {\n width: viewport.width,\n height: viewport.height\n };\n}\n\n/**\n * Calculate scaled dimensions\n *\n * Calculates dimensions for a given scale factor.\n * Used when zoom level changes to determine new canvas size.\n *\n * @param {number} baseWidth - Original width\n * @param {number} baseHeight - Original height\n * @param {number} scale - Scale factor\n * @returns {{width: number, height: number}} Scaled dimensions\n *\n * @example\n * const scaled = calculateScaledDimensions(800, 1000, 1.5);\n * // Returns: { width: 1200, height: 1500 }\n */\nexport function calculateScaledDimensions(baseWidth, baseHeight, scale) {\n return {\n width: baseWidth * scale,\n height: baseHeight * scale\n };\n}\n"],"names":["calculateViewport","page","scale","getViewportDimensions","viewport","calculateScaledDimensions","baseWidth","baseHeight"],"mappings":"AAsBO,SAASA,EAAkBC,GAAMC,GAAO;AAC7C,MAAI,CAACD;AACH,UAAM,IAAI,MAAM,yBAAyB;AAG3C,SAAOA,EAAK,YAAY,EAAE,OAAAC,GAAO;AACnC;AAeO,SAASC,EAAsBC,GAAU;AAC9C,SAAKA,IAIE;AAAA,IACL,OAAOA,EAAS;AAAA,IAChB,QAAQA,EAAS;AAAA,EACrB,IANW,EAAE,OAAO,GAAG,QAAQ,EAAC;AAOhC;AAiBO,SAASC,EAA0BC,GAAWC,GAAYL,GAAO;AACtE,SAAO;AAAA,IACL,OAAOI,IAAYJ;AAAA,IACnB,QAAQK,IAAaL;AAAA,EACzB;AACA;"}
package/dist/index8.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function n(e,t){if(!e)throw new Error("Page object is required");return e.getViewport({scale:t})}function r(e){return e?{width:e.width,height:e.height}:{width:0,height:0}}function o(e,t,i){return{width:e*i,height:t*i}}exports.calculateScaledDimensions=o;exports.calculateViewport=n;exports.getViewportDimensions=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("pdfjs-dist");function O(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const M=O(j);async function I(e){try{const t=await e.getTextContent(),n=e.getViewport({scale:1}),o=n.width,a=n.height,i=[];for(const s of t.items){if(!s.str||!s.str.trim())continue;const r=s.transform,g=Math.sqrt(r[2]*r[2]+r[3]*r[3]),h=r[4],c=n.height-r[5],u=s.width,l=s.height||g,p=h,x=c-l,f=h+u,m=c,b=[Math.max(0,Math.min(1,p/o)),Math.max(0,Math.min(1,x/a)),Math.max(0,Math.min(1,f/o)),Math.max(0,Math.min(1,m/a))];i.push({type:"text",text:s.str,bbox_norm:b,font:s.fontName||"unknown",fontSize:g,source:"pdfjs"})}return i}catch(t){return console.error("Error extracting text blocks:",t),[]}}function X(e,t,n){const o=e[4],a=e[5],i=e[0],s=e[3],r=Math.abs(i),g=Math.abs(s),h=n-a-g,c=n-a,u=o,l=o+r;return[Math.max(0,Math.min(1,u/t)),Math.max(0,Math.min(1,h/n)),Math.max(0,Math.min(1,l/t)),Math.max(0,Math.min(1,c/n))]}function B(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}function P(e,t){return{[t.paintImageXObject]:"paintImageXObject",[t.paintInlineImageXObject]:"paintInlineImageXObject",[t.paintImageMaskXObject]:"paintImageMaskXObject",[t.paintJpegXObject]:"paintJpegXObject"}[e]||"unknown"}async function T(e){try{const t=await e.getOperatorList(),n=e.getViewport({scale:1}),o=n.width,a=n.height,i=[],s=[];let r=[1,0,0,1,0,0];const g=t.fnArray,h=t.argsArray,c=M.OPS,u=[c.paintImageXObject,c.paintInlineImageXObject,c.paintImageMaskXObject,c.paintJpegXObject];for(let l=0;l<g.length;l++){const p=g[l],x=h[l];if(p===c.save)s.push([...r]);else if(p===c.restore)s.length>0&&(r=s.pop());else if(p===c.transform){const[f,m,b,w,y,k]=x;r=B(r,[f,m,b,w,y,k])}else if(u.includes(p)){const f=X(r,o,a);i.push({type:"image",bbox_norm:f,source:"pdfjs",operator:P(p,c)})}}return i}catch(t){return console.error("Error extracting image blocks:",t),[]}}async function d(e,t){try{const o=await M.getDocument(e).promise;if(t<1||t>o.numPages)throw new Error(`Invalid page number: ${t}. Document has ${o.numPages} pages.`);const a=await o.getPage(t),i=a.getViewport({scale:1}),[s,r]=await Promise.all([I(a),T(a)]);return{textBlocks:s,imageBlocks:r,pageDimensions:{width:i.width,height:i.height},pageNumber:t}}catch(n){throw console.error(`Error extracting blocks from page ${t}:`,n),n}}async function D(e,t){const n=[];for(const o of t)try{const a=await d(e,o);n.push(a)}catch(a){console.error(`Failed to extract page ${o}:`,a),n.push({textBlocks:[],imageBlocks:[],pageDimensions:null,pageNumber:o,error:a.message})}return n}exports.extractAllBlocks=d;exports.extractMultiplePages=D;
2
2
  //# sourceMappingURL=index8.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index8.cjs","sources":["../src/utils/viewportUtils.js"],"sourcesContent":["/**\n * Viewport Utility Functions\n *\n * This module provides utility functions for PDF viewport calculations\n * and transformations. These functions are used by the PDF viewer to\n * calculate viewport dimensions and manage scaling.\n */\n\n/**\n * Calculate viewport from PDF page\n *\n * Creates a viewport object from a PDF.js page with the specified scale.\n * The viewport contains dimensions and transformation matrix for rendering.\n *\n * @param {Object} page - PDF.js page object\n * @param {number} scale - Scale factor for rendering\n * @returns {Object} Viewport object with width, height, and transform matrix\n *\n * @example\n * const viewport = calculateViewport(pdfPage, 1.5);\n * // Returns: { width: 1200, height: 1600, scale: 1.5, ... }\n */\nexport function calculateViewport(page, scale) {\n if (!page) {\n throw new Error('Page object is required');\n }\n\n return page.getViewport({ scale });\n}\n\n/**\n * Get viewport dimensions\n *\n * Extracts width and height from a viewport object.\n * Useful for coordinate transformations and layout calculations.\n *\n * @param {Object} viewport - Viewport object from PDF.js\n * @returns {{width: number, height: number}} Dimensions object\n *\n * @example\n * const { width, height } = getViewportDimensions(viewport);\n * // Returns: { width: 1200, height: 1600 }\n */\nexport function getViewportDimensions(viewport) {\n if (!viewport) {\n return { width: 0, height: 0 };\n }\n\n return {\n width: viewport.width,\n height: viewport.height\n };\n}\n\n/**\n * Calculate scaled dimensions\n *\n * Calculates dimensions for a given scale factor.\n * Used when zoom level changes to determine new canvas size.\n *\n * @param {number} baseWidth - Original width\n * @param {number} baseHeight - Original height\n * @param {number} scale - Scale factor\n * @returns {{width: number, height: number}} Scaled dimensions\n *\n * @example\n * const scaled = calculateScaledDimensions(800, 1000, 1.5);\n * // Returns: { width: 1200, height: 1500 }\n */\nexport function calculateScaledDimensions(baseWidth, baseHeight, scale) {\n return {\n width: baseWidth * scale,\n height: baseHeight * scale\n };\n}\n"],"names":["calculateViewport","page","scale","getViewportDimensions","viewport","calculateScaledDimensions","baseWidth","baseHeight"],"mappings":"gFAsBO,SAASA,EAAkBC,EAAMC,EAAO,CAC7C,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,yBAAyB,EAG3C,OAAOA,EAAK,YAAY,CAAE,MAAAC,EAAO,CACnC,CAeO,SAASC,EAAsBC,EAAU,CAC9C,OAAKA,EAIE,CACL,MAAOA,EAAS,MAChB,OAAQA,EAAS,MACrB,EANW,CAAE,MAAO,EAAG,OAAQ,CAAC,CAOhC,CAiBO,SAASC,EAA0BC,EAAWC,EAAYL,EAAO,CACtE,MAAO,CACL,MAAOI,EAAYJ,EACnB,OAAQK,EAAaL,CACzB,CACA"}
1
+ {"version":3,"file":"index8.cjs","sources":["../src/utils/pdfExtractor.js"],"sourcesContent":["/**\n * PDF Data Extractor - Extract text and image blocks from PDF\n *\n * Uses PDF.js getOperatorList() for efficient metadata extraction without rendering.\n *\n * @module utils/pdfExtractor\n */\n\nimport * as pdfjsLib from \"pdfjs-dist\";\n\n/**\n * Extract text blocks from a PDF page with normalized coordinates\n *\n * @param {PDFPageProxy} page - PDF.js page object\n * @returns {Promise<Array>} Array of text blocks with normalized bounding boxes (0-1 range)\n */\nasync function extractTextBlocks(page) {\n try {\n const textContent = await page.getTextContent();\n const viewport = page.getViewport({ scale: 1.0 });\n\n const pageWidth = viewport.width;\n const pageHeight = viewport.height;\n\n const textBlocks = [];\n\n for (const item of textContent.items) {\n // Skip empty text\n if (!item.str || !item.str.trim()) {\n continue;\n }\n\n // Get transform matrix [a, b, c, d, e, f]\n const transform = item.transform;\n const fontSize = Math.sqrt(transform[2] * transform[2] + transform[3] * transform[3]);\n\n // Calculate bounding box (absolute coordinates)\n const x = transform[4];\n const y = viewport.height - transform[5]; // Convert to top-left origin\n const width = item.width;\n const height = item.height || fontSize;\n\n const x1 = x;\n const y1 = y - height;\n const x2 = x + width;\n const y2 = y;\n\n // Normalize coordinates to 0-1 range\n const bbox_norm = [\n Math.max(0.0, Math.min(1.0, x1 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y1 / pageHeight)),\n Math.max(0.0, Math.min(1.0, x2 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y2 / pageHeight))\n ];\n\n textBlocks.push({\n type: \"text\",\n text: item.str,\n bbox_norm: bbox_norm,\n font: item.fontName || \"unknown\",\n fontSize: fontSize,\n source: \"pdfjs\"\n });\n }\n\n return textBlocks;\n } catch (error) {\n console.error(\"Error extracting text blocks:\", error);\n return [];\n }\n}\n\n/**\n * Extract normalized bounding box from PDF transformation matrix\n *\n * @param {Array} transform - PDF transformation matrix [a, b, c, d, e, f]\n * @param {number} pageWidth - Page width for normalization\n * @param {number} pageHeight - Page height for coordinate conversion and normalization\n * @returns {Array} Normalized bounding box [x1, y1, x2, y2] in 0-1 range\n */\nfunction extractBBoxFromTransform(transform, pageWidth, pageHeight) {\n const x = transform[4];\n const y = transform[5];\n const scaleX = transform[0];\n const scaleY = transform[3];\n\n // Scale factors represent image dimensions\n const width = Math.abs(scaleX);\n const height = Math.abs(scaleY);\n\n // Convert from PDF bottom-left to image top-left origin\n const y1 = pageHeight - y - height;\n const y2 = pageHeight - y;\n const x1 = x;\n const x2 = x + width;\n\n // Normalize to 0-1 range\n return [\n Math.max(0.0, Math.min(1.0, x1 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y1 / pageHeight)),\n Math.max(0.0, Math.min(1.0, x2 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y2 / pageHeight))\n ];\n}\n\n/**\n * Multiply two transformation matrices\n *\n * @param {Array} m1 - First matrix [a, b, c, d, e, f]\n * @param {Array} m2 - Second matrix [a, b, c, d, e, f]\n * @returns {Array} Result matrix [a, b, c, d, e, f]\n */\nfunction multiplyTransforms(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n ];\n}\n\n/**\n * Get human-readable operator name\n *\n * @param {number} op - Operator code\n * @param {Object} OPS - PDF.js OPS constants\n * @returns {string} Operator name\n */\nfunction getOperatorName(op, OPS) {\n const opNames = {\n [OPS.paintImageXObject]: \"paintImageXObject\",\n [OPS.paintInlineImageXObject]: \"paintInlineImageXObject\",\n [OPS.paintImageMaskXObject]: \"paintImageMaskXObject\",\n [OPS.paintJpegXObject]: \"paintJpegXObject\"\n };\n return opNames[op] || \"unknown\";\n}\n\n/**\n * Extract image blocks from a PDF page using getOperatorList with normalized coordinates\n *\n * @param {PDFPageProxy} page - PDF.js page object\n * @returns {Promise<Array>} Array of image blocks with normalized bounding boxes (0-1 range)\n */\nasync function extractImageBlocks(page) {\n try {\n const operatorList = await page.getOperatorList();\n const viewport = page.getViewport({ scale: 1.0 });\n\n const pageWidth = viewport.width;\n const pageHeight = viewport.height;\n\n const imageBlocks = [];\n const graphicsStateStack = []; // Track graphics state transformations\n let currentTransform = [1, 0, 0, 1, 0, 0]; // Identity matrix\n\n const ops = operatorList.fnArray;\n const args = operatorList.argsArray;\n\n // Image paint operator constants from PDF.js\n const OPS = pdfjsLib.OPS;\n const IMAGE_OPS = [\n OPS.paintImageXObject,\n OPS.paintInlineImageXObject,\n OPS.paintImageMaskXObject,\n OPS.paintJpegXObject\n ];\n\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i];\n const arg = args[i];\n\n // Track graphics state stack\n if (op === OPS.save) {\n graphicsStateStack.push([...currentTransform]);\n } else if (op === OPS.restore) {\n if (graphicsStateStack.length > 0) {\n currentTransform = graphicsStateStack.pop();\n }\n } else if (op === OPS.transform) {\n // Update current transformation matrix\n const [a, b, c, d, e, f] = arg;\n currentTransform = multiplyTransforms(currentTransform, [a, b, c, d, e, f]);\n } else if (IMAGE_OPS.includes(op)) {\n // Extract image bounding box (normalized)\n const bbox_norm = extractBBoxFromTransform(currentTransform, pageWidth, pageHeight);\n\n imageBlocks.push({\n type: \"image\",\n bbox_norm: bbox_norm,\n source: \"pdfjs\",\n operator: getOperatorName(op, OPS)\n });\n }\n }\n\n return imageBlocks;\n } catch (error) {\n console.error(\"Error extracting image blocks:\", error);\n return [];\n }\n}\n\n/**\n * Extract all blocks (text and images) from a PDF page\n *\n * @param {string} pdfPath - Path to PDF file\n * @param {number} pageNumber - Page number (1-indexed)\n * @returns {Promise<Object>} Object with textBlocks and imageBlocks arrays\n */\nexport async function extractAllBlocks(pdfPath, pageNumber) {\n try {\n // Load PDF document\n const loadingTask = pdfjsLib.getDocument(pdfPath);\n const pdfDoc = await loadingTask.promise;\n\n // Validate page number\n if (pageNumber < 1 || pageNumber > pdfDoc.numPages) {\n throw new Error(`Invalid page number: ${pageNumber}. Document has ${pdfDoc.numPages} pages.`);\n }\n\n // Get page\n const page = await pdfDoc.getPage(pageNumber);\n const viewport = page.getViewport({ scale: 1.0 });\n\n // Extract text and image blocks in parallel\n const [textBlocks, imageBlocks] = await Promise.all([\n extractTextBlocks(page),\n extractImageBlocks(page)\n ]);\n\n return {\n textBlocks,\n imageBlocks,\n pageDimensions: {\n width: viewport.width,\n height: viewport.height\n },\n pageNumber: pageNumber\n };\n } catch (error) {\n console.error(`Error extracting blocks from page ${pageNumber}:`, error);\n throw error;\n }\n}\n\n/**\n * Extract blocks from multiple pages\n *\n * @param {string} pdfPath - Path to PDF file\n * @param {Array<number>} pageNumbers - Array of page numbers (1-indexed)\n * @returns {Promise<Array>} Array of extraction results, one per page\n */\nexport async function extractMultiplePages(pdfPath, pageNumbers) {\n const results = [];\n\n for (const pageNum of pageNumbers) {\n try {\n const pageData = await extractAllBlocks(pdfPath, pageNum);\n results.push(pageData);\n } catch (error) {\n console.error(`Failed to extract page ${pageNum}:`, error);\n results.push({\n textBlocks: [],\n imageBlocks: [],\n pageDimensions: null,\n pageNumber: pageNum,\n error: error.message\n });\n }\n }\n\n return results;\n}\n"],"names":["extractTextBlocks","page","textContent","viewport","pageWidth","pageHeight","textBlocks","item","transform","fontSize","x","y","width","height","x1","y1","x2","y2","bbox_norm","error","extractBBoxFromTransform","scaleX","scaleY","multiplyTransforms","m1","m2","getOperatorName","op","OPS","extractImageBlocks","operatorList","imageBlocks","graphicsStateStack","currentTransform","ops","args","pdfjsLib","IMAGE_OPS","i","arg","a","b","c","d","e","f","extractAllBlocks","pdfPath","pageNumber","pdfDoc","extractMultiplePages","pageNumbers","results","pageNum","pageData"],"mappings":"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"}
package/dist/index8.js CHANGED
@@ -1,23 +1,132 @@
1
- function r(t, e) {
2
- if (!t)
3
- throw new Error("Page object is required");
4
- return t.getViewport({ scale: e });
1
+ import * as w from "pdfjs-dist";
2
+ async function d(e) {
3
+ try {
4
+ const t = await e.getTextContent(), o = e.getViewport({ scale: 1 }), s = o.width, n = o.height, i = [];
5
+ for (const r of t.items) {
6
+ if (!r.str || !r.str.trim())
7
+ continue;
8
+ const a = r.transform, g = Math.sqrt(a[2] * a[2] + a[3] * a[3]), l = a[4], c = o.height - a[5], x = r.width, h = r.height || g, p = l, f = c - h, u = l + x, m = c, b = [
9
+ Math.max(0, Math.min(1, p / s)),
10
+ Math.max(0, Math.min(1, f / n)),
11
+ Math.max(0, Math.min(1, u / s)),
12
+ Math.max(0, Math.min(1, m / n))
13
+ ];
14
+ i.push({
15
+ type: "text",
16
+ text: r.str,
17
+ bbox_norm: b,
18
+ font: r.fontName || "unknown",
19
+ fontSize: g,
20
+ source: "pdfjs"
21
+ });
22
+ }
23
+ return i;
24
+ } catch (t) {
25
+ return console.error("Error extracting text blocks:", t), [];
26
+ }
5
27
  }
6
- function n(t) {
7
- return t ? {
8
- width: t.width,
9
- height: t.height
10
- } : { width: 0, height: 0 };
28
+ function j(e, t, o) {
29
+ const s = e[4], n = e[5], i = e[0], r = e[3], a = Math.abs(i), g = Math.abs(r), l = o - n - g, c = o - n, x = s, h = s + a;
30
+ return [
31
+ Math.max(0, Math.min(1, x / t)),
32
+ Math.max(0, Math.min(1, l / o)),
33
+ Math.max(0, Math.min(1, h / t)),
34
+ Math.max(0, Math.min(1, c / o))
35
+ ];
11
36
  }
12
- function h(t, e, i) {
37
+ function I(e, t) {
38
+ return [
39
+ e[0] * t[0] + e[2] * t[1],
40
+ e[1] * t[0] + e[3] * t[1],
41
+ e[0] * t[2] + e[2] * t[3],
42
+ e[1] * t[2] + e[3] * t[3],
43
+ e[0] * t[4] + e[2] * t[5] + e[4],
44
+ e[1] * t[4] + e[3] * t[5] + e[5]
45
+ ];
46
+ }
47
+ function O(e, t) {
13
48
  return {
14
- width: t * i,
15
- height: e * i
16
- };
49
+ [t.paintImageXObject]: "paintImageXObject",
50
+ [t.paintInlineImageXObject]: "paintInlineImageXObject",
51
+ [t.paintImageMaskXObject]: "paintImageMaskXObject",
52
+ [t.paintJpegXObject]: "paintJpegXObject"
53
+ }[e] || "unknown";
54
+ }
55
+ async function X(e) {
56
+ try {
57
+ const t = await e.getOperatorList(), o = e.getViewport({ scale: 1 }), s = o.width, n = o.height, i = [], r = [];
58
+ let a = [1, 0, 0, 1, 0, 0];
59
+ const g = t.fnArray, l = t.argsArray, c = w.OPS, x = [
60
+ c.paintImageXObject,
61
+ c.paintInlineImageXObject,
62
+ c.paintImageMaskXObject,
63
+ c.paintJpegXObject
64
+ ];
65
+ for (let h = 0; h < g.length; h++) {
66
+ const p = g[h], f = l[h];
67
+ if (p === c.save)
68
+ r.push([...a]);
69
+ else if (p === c.restore)
70
+ r.length > 0 && (a = r.pop());
71
+ else if (p === c.transform) {
72
+ const [u, m, b, M, k, y] = f;
73
+ a = I(a, [u, m, b, M, k, y]);
74
+ } else if (x.includes(p)) {
75
+ const u = j(a, s, n);
76
+ i.push({
77
+ type: "image",
78
+ bbox_norm: u,
79
+ source: "pdfjs",
80
+ operator: O(p, c)
81
+ });
82
+ }
83
+ }
84
+ return i;
85
+ } catch (t) {
86
+ return console.error("Error extracting image blocks:", t), [];
87
+ }
88
+ }
89
+ async function B(e, t) {
90
+ try {
91
+ const s = await w.getDocument(e).promise;
92
+ if (t < 1 || t > s.numPages)
93
+ throw new Error(`Invalid page number: ${t}. Document has ${s.numPages} pages.`);
94
+ const n = await s.getPage(t), i = n.getViewport({ scale: 1 }), [r, a] = await Promise.all([
95
+ d(n),
96
+ X(n)
97
+ ]);
98
+ return {
99
+ textBlocks: r,
100
+ imageBlocks: a,
101
+ pageDimensions: {
102
+ width: i.width,
103
+ height: i.height
104
+ },
105
+ pageNumber: t
106
+ };
107
+ } catch (o) {
108
+ throw console.error(`Error extracting blocks from page ${t}:`, o), o;
109
+ }
110
+ }
111
+ async function T(e, t) {
112
+ const o = [];
113
+ for (const s of t)
114
+ try {
115
+ const n = await B(e, s);
116
+ o.push(n);
117
+ } catch (n) {
118
+ console.error(`Failed to extract page ${s}:`, n), o.push({
119
+ textBlocks: [],
120
+ imageBlocks: [],
121
+ pageDimensions: null,
122
+ pageNumber: s,
123
+ error: n.message
124
+ });
125
+ }
126
+ return o;
17
127
  }
18
128
  export {
19
- h as calculateScaledDimensions,
20
- r as calculateViewport,
21
- n as getViewportDimensions
129
+ B as extractAllBlocks,
130
+ T as extractMultiplePages
22
131
  };
23
132
  //# sourceMappingURL=index8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index8.js","sources":["../src/utils/viewportUtils.js"],"sourcesContent":["/**\n * Viewport Utility Functions\n *\n * This module provides utility functions for PDF viewport calculations\n * and transformations. These functions are used by the PDF viewer to\n * calculate viewport dimensions and manage scaling.\n */\n\n/**\n * Calculate viewport from PDF page\n *\n * Creates a viewport object from a PDF.js page with the specified scale.\n * The viewport contains dimensions and transformation matrix for rendering.\n *\n * @param {Object} page - PDF.js page object\n * @param {number} scale - Scale factor for rendering\n * @returns {Object} Viewport object with width, height, and transform matrix\n *\n * @example\n * const viewport = calculateViewport(pdfPage, 1.5);\n * // Returns: { width: 1200, height: 1600, scale: 1.5, ... }\n */\nexport function calculateViewport(page, scale) {\n if (!page) {\n throw new Error('Page object is required');\n }\n\n return page.getViewport({ scale });\n}\n\n/**\n * Get viewport dimensions\n *\n * Extracts width and height from a viewport object.\n * Useful for coordinate transformations and layout calculations.\n *\n * @param {Object} viewport - Viewport object from PDF.js\n * @returns {{width: number, height: number}} Dimensions object\n *\n * @example\n * const { width, height } = getViewportDimensions(viewport);\n * // Returns: { width: 1200, height: 1600 }\n */\nexport function getViewportDimensions(viewport) {\n if (!viewport) {\n return { width: 0, height: 0 };\n }\n\n return {\n width: viewport.width,\n height: viewport.height\n };\n}\n\n/**\n * Calculate scaled dimensions\n *\n * Calculates dimensions for a given scale factor.\n * Used when zoom level changes to determine new canvas size.\n *\n * @param {number} baseWidth - Original width\n * @param {number} baseHeight - Original height\n * @param {number} scale - Scale factor\n * @returns {{width: number, height: number}} Scaled dimensions\n *\n * @example\n * const scaled = calculateScaledDimensions(800, 1000, 1.5);\n * // Returns: { width: 1200, height: 1500 }\n */\nexport function calculateScaledDimensions(baseWidth, baseHeight, scale) {\n return {\n width: baseWidth * scale,\n height: baseHeight * scale\n };\n}\n"],"names":["calculateViewport","page","scale","getViewportDimensions","viewport","calculateScaledDimensions","baseWidth","baseHeight"],"mappings":"AAsBO,SAASA,EAAkBC,GAAMC,GAAO;AAC7C,MAAI,CAACD;AACH,UAAM,IAAI,MAAM,yBAAyB;AAG3C,SAAOA,EAAK,YAAY,EAAE,OAAAC,GAAO;AACnC;AAeO,SAASC,EAAsBC,GAAU;AAC9C,SAAKA,IAIE;AAAA,IACL,OAAOA,EAAS;AAAA,IAChB,QAAQA,EAAS;AAAA,EACrB,IANW,EAAE,OAAO,GAAG,QAAQ,EAAC;AAOhC;AAiBO,SAASC,EAA0BC,GAAWC,GAAYL,GAAO;AACtE,SAAO;AAAA,IACL,OAAOI,IAAYJ;AAAA,IACnB,QAAQK,IAAaL;AAAA,EACzB;AACA;"}
1
+ {"version":3,"file":"index8.js","sources":["../src/utils/pdfExtractor.js"],"sourcesContent":["/**\n * PDF Data Extractor - Extract text and image blocks from PDF\n *\n * Uses PDF.js getOperatorList() for efficient metadata extraction without rendering.\n *\n * @module utils/pdfExtractor\n */\n\nimport * as pdfjsLib from \"pdfjs-dist\";\n\n/**\n * Extract text blocks from a PDF page with normalized coordinates\n *\n * @param {PDFPageProxy} page - PDF.js page object\n * @returns {Promise<Array>} Array of text blocks with normalized bounding boxes (0-1 range)\n */\nasync function extractTextBlocks(page) {\n try {\n const textContent = await page.getTextContent();\n const viewport = page.getViewport({ scale: 1.0 });\n\n const pageWidth = viewport.width;\n const pageHeight = viewport.height;\n\n const textBlocks = [];\n\n for (const item of textContent.items) {\n // Skip empty text\n if (!item.str || !item.str.trim()) {\n continue;\n }\n\n // Get transform matrix [a, b, c, d, e, f]\n const transform = item.transform;\n const fontSize = Math.sqrt(transform[2] * transform[2] + transform[3] * transform[3]);\n\n // Calculate bounding box (absolute coordinates)\n const x = transform[4];\n const y = viewport.height - transform[5]; // Convert to top-left origin\n const width = item.width;\n const height = item.height || fontSize;\n\n const x1 = x;\n const y1 = y - height;\n const x2 = x + width;\n const y2 = y;\n\n // Normalize coordinates to 0-1 range\n const bbox_norm = [\n Math.max(0.0, Math.min(1.0, x1 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y1 / pageHeight)),\n Math.max(0.0, Math.min(1.0, x2 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y2 / pageHeight))\n ];\n\n textBlocks.push({\n type: \"text\",\n text: item.str,\n bbox_norm: bbox_norm,\n font: item.fontName || \"unknown\",\n fontSize: fontSize,\n source: \"pdfjs\"\n });\n }\n\n return textBlocks;\n } catch (error) {\n console.error(\"Error extracting text blocks:\", error);\n return [];\n }\n}\n\n/**\n * Extract normalized bounding box from PDF transformation matrix\n *\n * @param {Array} transform - PDF transformation matrix [a, b, c, d, e, f]\n * @param {number} pageWidth - Page width for normalization\n * @param {number} pageHeight - Page height for coordinate conversion and normalization\n * @returns {Array} Normalized bounding box [x1, y1, x2, y2] in 0-1 range\n */\nfunction extractBBoxFromTransform(transform, pageWidth, pageHeight) {\n const x = transform[4];\n const y = transform[5];\n const scaleX = transform[0];\n const scaleY = transform[3];\n\n // Scale factors represent image dimensions\n const width = Math.abs(scaleX);\n const height = Math.abs(scaleY);\n\n // Convert from PDF bottom-left to image top-left origin\n const y1 = pageHeight - y - height;\n const y2 = pageHeight - y;\n const x1 = x;\n const x2 = x + width;\n\n // Normalize to 0-1 range\n return [\n Math.max(0.0, Math.min(1.0, x1 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y1 / pageHeight)),\n Math.max(0.0, Math.min(1.0, x2 / pageWidth)),\n Math.max(0.0, Math.min(1.0, y2 / pageHeight))\n ];\n}\n\n/**\n * Multiply two transformation matrices\n *\n * @param {Array} m1 - First matrix [a, b, c, d, e, f]\n * @param {Array} m2 - Second matrix [a, b, c, d, e, f]\n * @returns {Array} Result matrix [a, b, c, d, e, f]\n */\nfunction multiplyTransforms(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5]\n ];\n}\n\n/**\n * Get human-readable operator name\n *\n * @param {number} op - Operator code\n * @param {Object} OPS - PDF.js OPS constants\n * @returns {string} Operator name\n */\nfunction getOperatorName(op, OPS) {\n const opNames = {\n [OPS.paintImageXObject]: \"paintImageXObject\",\n [OPS.paintInlineImageXObject]: \"paintInlineImageXObject\",\n [OPS.paintImageMaskXObject]: \"paintImageMaskXObject\",\n [OPS.paintJpegXObject]: \"paintJpegXObject\"\n };\n return opNames[op] || \"unknown\";\n}\n\n/**\n * Extract image blocks from a PDF page using getOperatorList with normalized coordinates\n *\n * @param {PDFPageProxy} page - PDF.js page object\n * @returns {Promise<Array>} Array of image blocks with normalized bounding boxes (0-1 range)\n */\nasync function extractImageBlocks(page) {\n try {\n const operatorList = await page.getOperatorList();\n const viewport = page.getViewport({ scale: 1.0 });\n\n const pageWidth = viewport.width;\n const pageHeight = viewport.height;\n\n const imageBlocks = [];\n const graphicsStateStack = []; // Track graphics state transformations\n let currentTransform = [1, 0, 0, 1, 0, 0]; // Identity matrix\n\n const ops = operatorList.fnArray;\n const args = operatorList.argsArray;\n\n // Image paint operator constants from PDF.js\n const OPS = pdfjsLib.OPS;\n const IMAGE_OPS = [\n OPS.paintImageXObject,\n OPS.paintInlineImageXObject,\n OPS.paintImageMaskXObject,\n OPS.paintJpegXObject\n ];\n\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i];\n const arg = args[i];\n\n // Track graphics state stack\n if (op === OPS.save) {\n graphicsStateStack.push([...currentTransform]);\n } else if (op === OPS.restore) {\n if (graphicsStateStack.length > 0) {\n currentTransform = graphicsStateStack.pop();\n }\n } else if (op === OPS.transform) {\n // Update current transformation matrix\n const [a, b, c, d, e, f] = arg;\n currentTransform = multiplyTransforms(currentTransform, [a, b, c, d, e, f]);\n } else if (IMAGE_OPS.includes(op)) {\n // Extract image bounding box (normalized)\n const bbox_norm = extractBBoxFromTransform(currentTransform, pageWidth, pageHeight);\n\n imageBlocks.push({\n type: \"image\",\n bbox_norm: bbox_norm,\n source: \"pdfjs\",\n operator: getOperatorName(op, OPS)\n });\n }\n }\n\n return imageBlocks;\n } catch (error) {\n console.error(\"Error extracting image blocks:\", error);\n return [];\n }\n}\n\n/**\n * Extract all blocks (text and images) from a PDF page\n *\n * @param {string} pdfPath - Path to PDF file\n * @param {number} pageNumber - Page number (1-indexed)\n * @returns {Promise<Object>} Object with textBlocks and imageBlocks arrays\n */\nexport async function extractAllBlocks(pdfPath, pageNumber) {\n try {\n // Load PDF document\n const loadingTask = pdfjsLib.getDocument(pdfPath);\n const pdfDoc = await loadingTask.promise;\n\n // Validate page number\n if (pageNumber < 1 || pageNumber > pdfDoc.numPages) {\n throw new Error(`Invalid page number: ${pageNumber}. Document has ${pdfDoc.numPages} pages.`);\n }\n\n // Get page\n const page = await pdfDoc.getPage(pageNumber);\n const viewport = page.getViewport({ scale: 1.0 });\n\n // Extract text and image blocks in parallel\n const [textBlocks, imageBlocks] = await Promise.all([\n extractTextBlocks(page),\n extractImageBlocks(page)\n ]);\n\n return {\n textBlocks,\n imageBlocks,\n pageDimensions: {\n width: viewport.width,\n height: viewport.height\n },\n pageNumber: pageNumber\n };\n } catch (error) {\n console.error(`Error extracting blocks from page ${pageNumber}:`, error);\n throw error;\n }\n}\n\n/**\n * Extract blocks from multiple pages\n *\n * @param {string} pdfPath - Path to PDF file\n * @param {Array<number>} pageNumbers - Array of page numbers (1-indexed)\n * @returns {Promise<Array>} Array of extraction results, one per page\n */\nexport async function extractMultiplePages(pdfPath, pageNumbers) {\n const results = [];\n\n for (const pageNum of pageNumbers) {\n try {\n const pageData = await extractAllBlocks(pdfPath, pageNum);\n results.push(pageData);\n } catch (error) {\n console.error(`Failed to extract page ${pageNum}:`, error);\n results.push({\n textBlocks: [],\n imageBlocks: [],\n pageDimensions: null,\n pageNumber: pageNum,\n error: error.message\n });\n }\n }\n\n return results;\n}\n"],"names":["extractTextBlocks","page","textContent","viewport","pageWidth","pageHeight","textBlocks","item","transform","fontSize","x","y","width","height","x1","y1","x2","y2","bbox_norm","error","extractBBoxFromTransform","scaleX","scaleY","multiplyTransforms","m1","m2","getOperatorName","op","OPS","extractImageBlocks","operatorList","imageBlocks","graphicsStateStack","currentTransform","ops","args","pdfjsLib","IMAGE_OPS","i","arg","a","b","c","d","e","f","extractAllBlocks","pdfPath","pageNumber","pdfDoc","extractMultiplePages","pageNumbers","results","pageNum","pageData"],"mappings":"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"}
package/dist/index9.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("pdfjs-dist");function O(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const o=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,o.get?o:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const M=O(j);async function I(e){try{const t=await e.getTextContent(),n=e.getViewport({scale:1}),o=n.width,a=n.height,i=[];for(const s of t.items){if(!s.str||!s.str.trim())continue;const r=s.transform,g=Math.sqrt(r[2]*r[2]+r[3]*r[3]),h=r[4],c=n.height-r[5],u=s.width,l=s.height||g,p=h,x=c-l,f=h+u,m=c,b=[Math.max(0,Math.min(1,p/o)),Math.max(0,Math.min(1,x/a)),Math.max(0,Math.min(1,f/o)),Math.max(0,Math.min(1,m/a))];i.push({type:"text",text:s.str,bbox_norm:b,font:s.fontName||"unknown",fontSize:g,source:"pdfjs"})}return i}catch(t){return console.error("Error extracting text blocks:",t),[]}}function X(e,t,n){const o=e[4],a=e[5],i=e[0],s=e[3],r=Math.abs(i),g=Math.abs(s),h=n-a-g,c=n-a,u=o,l=o+r;return[Math.max(0,Math.min(1,u/t)),Math.max(0,Math.min(1,h/n)),Math.max(0,Math.min(1,l/t)),Math.max(0,Math.min(1,c/n))]}function B(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}function P(e,t){return{[t.paintImageXObject]:"paintImageXObject",[t.paintInlineImageXObject]:"paintInlineImageXObject",[t.paintImageMaskXObject]:"paintImageMaskXObject",[t.paintJpegXObject]:"paintJpegXObject"}[e]||"unknown"}async function T(e){try{const t=await e.getOperatorList(),n=e.getViewport({scale:1}),o=n.width,a=n.height,i=[],s=[];let r=[1,0,0,1,0,0];const g=t.fnArray,h=t.argsArray,c=M.OPS,u=[c.paintImageXObject,c.paintInlineImageXObject,c.paintImageMaskXObject,c.paintJpegXObject];for(let l=0;l<g.length;l++){const p=g[l],x=h[l];if(p===c.save)s.push([...r]);else if(p===c.restore)s.length>0&&(r=s.pop());else if(p===c.transform){const[f,m,b,w,y,k]=x;r=B(r,[f,m,b,w,y,k])}else if(u.includes(p)){const f=X(r,o,a);i.push({type:"image",bbox_norm:f,source:"pdfjs",operator:P(p,c)})}}return i}catch(t){return console.error("Error extracting image blocks:",t),[]}}async function d(e,t){try{const o=await M.getDocument(e).promise;if(t<1||t>o.numPages)throw new Error(`Invalid page number: ${t}. Document has ${o.numPages} pages.`);const a=await o.getPage(t),i=a.getViewport({scale:1}),[s,r]=await Promise.all([I(a),T(a)]);return{textBlocks:s,imageBlocks:r,pageDimensions:{width:i.width,height:i.height},pageNumber:t}}catch(n){throw console.error(`Error extracting blocks from page ${t}:`,n),n}}async function D(e,t){const n=[];for(const o of t)try{const a=await d(e,o);n.push(a)}catch(a){console.error(`Failed to extract page ${o}:`,a),n.push({textBlocks:[],imageBlocks:[],pageDimensions:null,pageNumber:o,error:a.message})}return n}exports.extractAllBlocks=d;exports.extractMultiplePages=D;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./index26.cjs");function d(t,n,e,l,o){let i=t;return typeof t=="string"&&(i=parseFloat(t)),typeof i!="number"||isNaN(i)?(o.push(`[${e}]: Field "${l}" invalid value "${t}", using default ${n}`),n):i<0?(o.push(`[${e}]: Field "${l}" value ${i} below range [0,1], clamping to 0`),0):i>1?(o.push(`[${e}]: Field "${l}" value ${i} exceeds range [0,1], clamping to 1`),1):i}function c(t,n,e,l){if(typeof t!="string"||t.trim().length===0)return l.push(`[${e}]: Invalid color format "${t}", using default ${n}`),n;const o=t.trim(),i=/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/,r=/^rgba?\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*(,\s*[\d.]+\s*)?\)$/,u=["red","blue","green","yellow","black","white","gray","grey","orange","purple","pink","brown","transparent"],$=i.test(o),E=r.test(o),T=u.includes(o.toLowerCase());return $||E||T?o:(l.push(`[${e}]: Invalid color format "${t}", using default ${n}`),n)}function F(t,n,e,l,o){let i=t;return typeof t=="string"&&(i=parseFloat(t)),typeof i!="number"||isNaN(i)||i<=0?(o.push(`[${e}]: Field "${l}" invalid value "${t}", using default ${n}`),n):i}function f(t,n,e){const l={};if(typeof t.id!="string"||t.id.trim().length===0){const o=Date.now(),i=Math.random().toString(36).substr(2,9);l.id=`anno-${o}-${i}`,e.push(`[${l.id}]: Auto-generated ID (original was missing or invalid)`)}else l.id=t.id.trim();return l.type=t.type,typeof t.page!="number"||t.page<1?(n.push(`[${l.id}]: Field "page" invalid value "${t.page}", using default ${s.BASE_DEFAULTS.page}`),l.page=s.BASE_DEFAULTS.page):l.page=Math.floor(t.page),typeof t.start!="number"||t.start<0?(n.push(`[${l.id}]: Field "start" invalid value "${t.start}", using default ${s.BASE_DEFAULTS.start}`),l.start=s.BASE_DEFAULTS.start):l.start=t.start,typeof t.end!="number"||t.end<0?(n.push(`[${l.id}]: Field "end" invalid value "${t.end}", using start value ${l.start}`),l.end=l.start):t.end<l.start?(n.push(`[${l.id}]: Field "end" (${t.end}) less than start (${l.start}), clamping to start`),l.end=l.start):l.end=t.end,l}function a(t,n,e){return!t||typeof t!="object"?(e.push(`[${n}]: Invalid quad object, using default`),{x:.1,y:.1,w:.8,h:.05}):{x:d(t.x,.1,n,"quad.x",e),y:d(t.y,.1,n,"quad.y",e),w:d(t.w,.8,n,"quad.w",e),h:d(t.h,.05,n,"quad.h",e)}}function y(t,n,e,l){const o={...t};n.mode!=="quads"?(e.push(`[${t.id}]: Field "mode" invalid value "${n.mode}", using default "${s.HIGHLIGHT_DEFAULTS.mode}"`),o.mode=s.HIGHLIGHT_DEFAULTS.mode):o.mode=n.mode,!Array.isArray(n.quads)||n.quads.length===0?(e.push(`[${t.id}]: Field "quads" missing or empty, using default`),o.quads=s.HIGHLIGHT_DEFAULTS.quads):o.quads=n.quads.map((r,u)=>a(r,t.id,e));const i=s.HIGHLIGHT_DEFAULTS.style.color;return!n.style||typeof n.style!="object"?(e.push(`[${t.id}]: Field "style" missing or invalid, using default`),o.style={color:i}):o.style={color:c(n.style.color,i,t.id,e)},o}function p(t,n,e,l){const o={...t};typeof n.content!="string"||n.content.trim().length===0?(e.push(`[${t.id}]: Field "content" missing or empty, using default "${s.TEXT_DEFAULTS.content}"`),o.content=s.TEXT_DEFAULTS.content):o.content=n.content,o.x=d(n.x,s.TEXT_DEFAULTS.x,t.id,"x",e),o.y=d(n.y,s.TEXT_DEFAULTS.y,t.id,"y",e),o.w=d(n.w,s.TEXT_DEFAULTS.w,t.id,"w",e),o.h=d(n.h,s.TEXT_DEFAULTS.h,t.id,"h",e);const i=s.TEXT_DEFAULTS.style.bg,r=s.TEXT_DEFAULTS.style.color;return!n.style||typeof n.style!="object"?(e.push(`[${t.id}]: Field "style" missing or invalid, using defaults`),o.style={bg:i,color:r}):o.style={bg:c(n.style.bg,i,t.id,e),color:c(n.style.color,r,t.id,e)},o}function m(t,n,e,l){const o={...t};!Array.isArray(n.quads)||n.quads.length===0?(e.push(`[${t.id}]: Field "quads" missing or empty, using default`),o.quads=s.UNDERLINE_DEFAULTS.quads):o.quads=n.quads.map(r=>a(r,t.id,e));const i=s.UNDERLINE_DEFAULTS.style.color;return!n.style||typeof n.style!="object"?o.style={color:i}:o.style={color:c(n.style.color,i,t.id,e)},o}function g(t,n,e,l){const o={...t};o.from_x=d(n.from_x,s.ARROW_DEFAULTS.from_x,t.id,"from_x",e),o.from_y=d(n.from_y,s.ARROW_DEFAULTS.from_y,t.id,"from_y",e),o.to_x=d(n.to_x,s.ARROW_DEFAULTS.to_x,t.id,"to_x",e),o.to_y=d(n.to_y,s.ARROW_DEFAULTS.to_y,t.id,"to_y",e);const i=s.ARROW_DEFAULTS.style.color;return!n.style||typeof n.style!="object"?o.style={color:i}:o.style={color:c(n.style.color,i,t.id,e)},o}function h(t,n,e,l){const o={...t};o.cx=d(n.cx,s.CIRCLE_DEFAULTS.cx,t.id,"cx",e),o.cy=d(n.cy,s.CIRCLE_DEFAULTS.cy,t.id,"cy",e),o.rx=d(n.rx,s.CIRCLE_DEFAULTS.rx,t.id,"rx",e),o.ry=d(n.ry,s.CIRCLE_DEFAULTS.ry,t.id,"ry",e);const i=s.CIRCLE_DEFAULTS.style.color;return!n.style||typeof n.style!="object"?o.style={color:i}:o.style={color:c(n.style.color,i,t.id,e)},o}function A(t,n){const e=[],l=[];if(!t||typeof t!="object")return{annotation:null,warnings:[],info:[],critical:`Annotation at index ${n}: Not a valid object`};if(typeof t.type!="string"||t.type.trim().length===0)return{annotation:null,warnings:[],info:[],critical:`Annotation at index ${n}: Missing or invalid type field`};const o=t.type.trim(),i=f(t,e,l);let r;if(o==="highlight")r=y(i,t,e);else if(o==="text")r=p(i,t,e);else if(o==="underline")r=m(i,t,e);else if(o==="arrow")r=g(i,t,e);else if(o==="circle")r=h(i,t,e);else if(o==="ink")r={...i,strokes:t.strokes||[]},t.style&&(r.style=t.style);else return{annotation:null,warnings:[],info:[],critical:`Annotation at index ${n}: Unsupported type "${o}"`};return{annotation:r,warnings:e,info:l,critical:null}}function _(t,n={}){n.skipInvalid;const e=n.warnInConsole!==!1,l=n.onWarning||null,o={normalized:[],warnings:[],info:[],skipped:[]};if(!Array.isArray(t)){const i="normalizeAnnotationArray: Input is not an array, returning empty result";return o.warnings.push(i),e&&console.warn(`[Annotation Normalizer] ${i}`),o}return t.forEach((i,r)=>{if(i==null){o.skipped.push({index:r,annotation:i,reason:"Annotation is null or undefined"});return}const u=A(i,r);if(u.critical){o.skipped.push({index:r,annotation:i,reason:u.critical}),e&&console.error(`[Annotation Normalizer] ${u.critical}`);return}o.normalized.push(u.annotation),o.warnings.push(...u.warnings),o.info.push(...u.info)}),e&&(o.warnings.length>0||o.info.length>0||o.skipped.length>0)&&(console.group("[Annotation Normalizer] Validation Summary"),o.normalized.length>0&&console.info(`✓ Normalized ${o.normalized.length} annotation(s)`),o.skipped.length>0&&(console.error(`✗ Skipped ${o.skipped.length} annotation(s)`),o.skipped.forEach(i=>{console.error(` Index ${i.index}: ${i.reason}`)})),o.warnings.length>0&&(console.warn(`⚠ ${o.warnings.length} warning(s):`),o.warnings.forEach(i=>console.warn(` ${i}`))),o.info.length>0&&(console.info(`ℹ ${o.info.length} info message(s):`),o.info.forEach(i=>console.info(` ${i}`))),console.groupEnd()),l&&typeof l=="function"&&l(o),o}exports.normalizeAnnotation=A;exports.normalizeAnnotationArray=_;exports.normalizeArrow=g;exports.normalizeBaseFields=f;exports.normalizeCircle=h;exports.normalizeColor=c;exports.normalizeCoordinate=d;exports.normalizeHighlight=y;exports.normalizePositiveNumber=F;exports.normalizeText=p;exports.normalizeUnderline=m;
2
2
  //# sourceMappingURL=index9.cjs.map