@embedpdf/engines 1.0.10 → 1.0.12

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 (104) hide show
  1. package/dist/engine-B7CS6Qyp.cjs +2 -0
  2. package/dist/engine-B7CS6Qyp.cjs.map +1 -0
  3. package/dist/engine-M0_XZhss.js +5043 -0
  4. package/dist/engine-M0_XZhss.js.map +1 -0
  5. package/dist/index.cjs +1 -5846
  6. package/dist/index.cjs.map +1 -1
  7. package/dist/index.d.ts +1 -1613
  8. package/dist/index.js +339 -5824
  9. package/dist/index.js.map +1 -1
  10. package/dist/lib/converters/index.cjs +2 -0
  11. package/dist/lib/converters/index.cjs.map +1 -0
  12. package/dist/{converters.d.ts → lib/converters/index.d.ts} +7 -10
  13. package/dist/lib/converters/index.js +80 -0
  14. package/dist/{converters.cjs.map → lib/converters/index.js.map} +1 -1
  15. package/dist/lib/index.d.ts +7 -0
  16. package/dist/lib/mock/index.d.ts +25 -0
  17. package/dist/lib/pdfium/cache.d.ts +62 -0
  18. package/dist/{pdfium-direct-engine.d.ts → lib/pdfium/engine.d.ts} +73 -8
  19. package/dist/lib/pdfium/helper.d.ts +21 -0
  20. package/dist/lib/pdfium/index.cjs +2 -0
  21. package/dist/lib/pdfium/index.cjs.map +1 -0
  22. package/dist/lib/pdfium/index.d.ts +3 -0
  23. package/dist/lib/pdfium/index.js +13 -0
  24. package/dist/lib/pdfium/index.js.map +1 -0
  25. package/dist/lib/pdfium/runner.d.ts +16 -0
  26. package/dist/lib/pdfium/web/direct-engine.cjs +2 -0
  27. package/dist/lib/pdfium/web/direct-engine.cjs.map +1 -0
  28. package/dist/lib/pdfium/web/direct-engine.d.ts +3 -0
  29. package/dist/lib/pdfium/web/direct-engine.js +12 -0
  30. package/dist/lib/pdfium/web/direct-engine.js.map +1 -0
  31. package/dist/lib/pdfium/web/worker-engine.cjs +2 -0
  32. package/dist/lib/pdfium/web/worker-engine.cjs.map +1 -0
  33. package/dist/lib/pdfium/web/worker-engine.d.ts +7 -0
  34. package/dist/lib/pdfium/web/worker-engine.js +15 -0
  35. package/dist/lib/pdfium/web/worker-engine.js.map +1 -0
  36. package/dist/lib/pdfium/worker.d.ts +1 -0
  37. package/dist/lib/pdfium-engine.d.ts +1 -0
  38. package/dist/lib/webworker/engine.cjs +2 -0
  39. package/dist/lib/webworker/engine.cjs.map +1 -0
  40. package/dist/{worker.d.ts → lib/webworker/engine.d.ts} +4 -34
  41. package/dist/lib/webworker/engine.js +887 -0
  42. package/dist/lib/webworker/engine.js.map +1 -0
  43. package/dist/lib/webworker/index.d.ts +2 -0
  44. package/dist/lib/webworker/runner.d.ts +128 -0
  45. package/dist/lib/webworker-engine.d.ts +1 -0
  46. package/dist/preact/adapter.d.ts +1 -0
  47. package/dist/preact/index.cjs +2 -0
  48. package/dist/preact/index.cjs.map +1 -0
  49. package/dist/preact/index.d.ts +1 -0
  50. package/dist/preact/index.js +37 -0
  51. package/dist/preact/index.js.map +1 -0
  52. package/dist/react/adapter.d.ts +1 -0
  53. package/dist/react/index.cjs +2 -0
  54. package/dist/react/index.cjs.map +1 -0
  55. package/dist/react/index.d.ts +1 -0
  56. package/dist/react/index.js +37 -0
  57. package/dist/react/index.js.map +1 -0
  58. package/dist/runner-BcS-WEof.cjs +2 -0
  59. package/dist/runner-BcS-WEof.cjs.map +1 -0
  60. package/dist/runner-DUp_7Uu_.js +269 -0
  61. package/dist/runner-DUp_7Uu_.js.map +1 -0
  62. package/dist/shared-preact/hooks/index.d.ts +1 -0
  63. package/dist/{preact.d.ts → shared-preact/hooks/use-pdfium-engine.d.ts} +3 -5
  64. package/dist/shared-preact/index.d.ts +1 -0
  65. package/dist/shared-react/hooks/index.d.ts +1 -0
  66. package/dist/{react.d.ts → shared-react/hooks/use-pdfium-engine.d.ts} +3 -5
  67. package/dist/shared-react/index.d.ts +1 -0
  68. package/dist/vue/hooks/index.d.ts +1 -0
  69. package/dist/vue/hooks/use-pdfium-engine.d.ts +18 -0
  70. package/dist/vue/index.cjs +2 -0
  71. package/dist/vue/index.cjs.map +1 -0
  72. package/dist/vue/index.d.ts +1 -0
  73. package/dist/vue/index.js +39 -0
  74. package/dist/vue/index.js.map +1 -0
  75. package/package.json +41 -41
  76. package/dist/converters.cjs +0 -139
  77. package/dist/converters.js +0 -133
  78. package/dist/converters.js.map +0 -1
  79. package/dist/pdfium-direct-engine.cjs +0 -4400
  80. package/dist/pdfium-direct-engine.cjs.map +0 -1
  81. package/dist/pdfium-direct-engine.js +0 -4398
  82. package/dist/pdfium-direct-engine.js.map +0 -1
  83. package/dist/pdfium-worker-engine.cjs +0 -851
  84. package/dist/pdfium-worker-engine.cjs.map +0 -1
  85. package/dist/pdfium-worker-engine.d.ts +0 -314
  86. package/dist/pdfium-worker-engine.js +0 -849
  87. package/dist/pdfium-worker-engine.js.map +0 -1
  88. package/dist/pdfium.cjs +0 -4667
  89. package/dist/pdfium.cjs.map +0 -1
  90. package/dist/pdfium.d.ts +0 -1311
  91. package/dist/pdfium.js +0 -4661
  92. package/dist/pdfium.js.map +0 -1
  93. package/dist/preact.cjs +0 -41
  94. package/dist/preact.cjs.map +0 -1
  95. package/dist/preact.js +0 -39
  96. package/dist/preact.js.map +0 -1
  97. package/dist/react.cjs +0 -41
  98. package/dist/react.cjs.map +0 -1
  99. package/dist/react.js +0 -39
  100. package/dist/react.js.map +0 -1
  101. package/dist/worker.cjs +0 -839
  102. package/dist/worker.cjs.map +0 -1
  103. package/dist/worker.js +0 -836
  104. package/dist/worker.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});exports.browserImageDataToBlobConverter=(e,t="image/webp")=>{if("undefined"==typeof OffscreenCanvas)throw new Error("OffscreenCanvas is not available in this environment. This converter is intended for browser use only. Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.");const a=new OffscreenCanvas(e.width,e.height);return a.getContext("2d").putImageData(e,0,0),a.convertToBlob({type:t})},exports.createCustomImageDataToBlobConverter=function(e){return async(t,a="image/webp")=>{const r=await e(t);return new Blob([r],{type:a})}},exports.createCustomImageDataToBufferConverter=function(e){return async(t,a="image/webp")=>await e(t,a)},exports.createNodeCanvasImageDataToBlobConverter=function(e){return async(t,a="image/webp")=>{const{width:r,height:o}=t,n=e(r,o);let i;switch(n.getContext("2d").putImageData(t,0,0),a){case"image/webp":i=n.toBuffer("image/webp");break;case"image/png":i=n.toBuffer("image/png");break;case"image/jpeg":i=n.toBuffer("image/jpeg");break;default:throw new Error(`Unsupported image type: ${a}`)}return i}},exports.createNodeImageDataToBufferConverter=function(e){return async(t,a="image/webp")=>{const{width:r,height:o,data:n}=t;let i,s=e(Buffer.from(n),{raw:{width:r,height:o,channels:4}});switch(a){case"image/webp":i=await s.webp().toBuffer();break;case"image/png":i=await s.png().toBuffer();break;case"image/jpeg":i=await s.flatten({background:{r:255,g:255,b:255}}).jpeg().toBuffer();break;default:throw new Error(`Unsupported image type: ${a}`)}return i}};
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/lib/converters/index.ts"],"sourcesContent":["/**\n * Function type for converting ImageData to Blob\n * In browser: uses OffscreenCanvas\n * In Node.js: can use Sharp or other image processing libraries\n */\nexport type ImageDataConverter<T = Blob> = (\n imageData: ImageData,\n imageType?: ImageConversionTypes,\n) => Promise<T>;\n\nexport type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';\n/**\n * Browser implementation using OffscreenCanvas\n * This is the default implementation used in browser environments\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter = (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n): Promise<Blob> => {\n // Check if we're in a browser environment\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error(\n 'OffscreenCanvas is not available in this environment. ' +\n 'This converter is intended for browser use only. ' +\n 'Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.',\n );\n }\n\n const off = new OffscreenCanvas(imageData.width, imageData.height);\n off.getContext('2d')!.putImageData(imageData, 0, 0);\n return off.convertToBlob({ type: imageType });\n};\n\n/**\n * Node.js implementation using Sharp\n * This requires the 'sharp' package to be installed\n *\n * @example\n * ```typescript\n * import sharp from 'sharp';\n * import { createNodeImageDataToBufferConverter } from '@embedpdf/engines/pdfium/image-converters';\n *\n * const converter = createNodeImageDataToBufferConverter(sharp);\n * const engine = new PdfiumEngine(pdfiumModule, logger, converter);\n * ```\n */\nexport function createNodeImageDataToBufferConverter(\n sharp: any, // Using 'any' to avoid requiring sharp as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n const { width, height, data } = imageData;\n\n // Convert ImageData to Sharp format\n // ImageData uses RGBA format, Sharp expects the same\n let sharpInstance = sharp(Buffer.from(data), {\n raw: {\n width,\n height,\n channels: 4, // RGBA\n },\n });\n\n // Apply the appropriate format conversion based on imageType\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = await sharpInstance.webp().toBuffer();\n break;\n case 'image/png':\n buffer = await sharpInstance.png().toBuffer();\n break;\n case 'image/jpeg':\n // JPEG doesn't support transparency, so we need to composite onto a white background\n buffer = await sharpInstance\n .flatten({ background: { r: 255, g: 255, b: 255 } }) // Remove alpha channel with white background\n .jpeg()\n .toBuffer();\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Alternative Node.js implementation using canvas (node-canvas)\n * This requires the 'canvas' package to be installed\n *\n * @example\n * ```typescript\n * import { createCanvas } from 'canvas';\n * import { createNodeCanvasImageDataToBlobConverter } from '@embedpdf/engines/pdfium/image-converters';\n *\n * const converter = createNodeCanvasImageDataToBlobConverter(createCanvas, 'image/png');\n * const engine = new PdfiumEngine(pdfiumModule, logger, converter);\n * ```\n */\nexport function createNodeCanvasImageDataToBlobConverter(\n createCanvas: any, // Using 'any' to avoid requiring canvas as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n const { width, height } = imageData;\n\n // Create a canvas and put the image data\n const canvas = createCanvas(width, height);\n const ctx = canvas.getContext('2d');\n ctx.putImageData(imageData, 0, 0);\n\n // Convert to buffer and create blob based on the requested type\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = canvas.toBuffer('image/webp');\n break;\n case 'image/png':\n buffer = canvas.toBuffer('image/png');\n break;\n case 'image/jpeg':\n buffer = canvas.toBuffer('image/jpeg');\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Generic Node.js implementation that works with any image processing library\n * that can handle raw RGBA data\n *\n * @example\n * ```typescript\n * const converter = createCustomImageDataToBlobConverter(async (imageData) => {\n * // Your custom image processing logic here\n * // Return a Buffer that will be wrapped in a Blob\n * return processImageWithYourLibrary(imageData);\n * });\n * ```\n */\nexport function createCustomImageDataToBlobConverter(\n processor: (imageData: ImageData) => Promise<Buffer>,\n): ImageDataConverter {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Blob> => {\n const buffer = await processor(imageData);\n return new Blob([buffer], { type: imageType });\n };\n}\n\n/**\n * Create a custom converter that returns a Buffer\n * @param processor - function to process the image data\n * @param imageType - image type\n * @returns ImageDataToBlobConverter<Buffer>\n */\nexport function createCustomImageDataToBufferConverter(\n processor: (imageData: ImageData, imageType: ImageConversionTypes) => Promise<Buffer>,\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n return await processor(imageData, imageType);\n };\n}\n"],"names":["imageData","imageType","OffscreenCanvas","Error","off","width","height","getContext","putImageData","convertToBlob","type","processor","async","buffer","Blob","createCanvas","canvas","toBuffer","sharp","data","sharpInstance","Buffer","from","raw","channels","webp","png","flatten","background","r","g","b","jpeg"],"mappings":"wHAemE,CACjEA,EACAC,EAAkC,gBAG9B,GAA2B,oBAApBC,gBACT,MAAM,IAAIC,MACR,qNAMJ,MAAMC,EAAM,IAAIF,gBAAgBF,EAAUK,MAAOL,EAAUM,QAE3D,OADAF,EAAIG,WAAW,MAAOC,aAAaR,EAAW,EAAG,GAC1CI,EAAIK,cAAc,CAAEC,KAAMT,GAAW,+CAuHvC,SACLU,GAEO,OAAAC,MACLZ,EACAC,EAAkC,gBAE5B,MAAAY,QAAeF,EAAUX,GACxB,OAAA,IAAIc,KAAK,CAACD,GAAS,CAAEH,KAAMT,GAAW,CAEjD,iDAQO,SACLU,GAEO,OAAAC,MACLZ,EACAC,EAAkC,qBAErBU,EAAUX,EAAWC,EAEtC,mDA1EO,SACLc,GAEO,OAAAH,MACLZ,EACAC,EAAkC,gBAE5B,MAAAI,MAAEA,EAAOC,OAAAA,GAAWN,EAGpBgB,EAASD,EAAaV,EAAOC,GAK/B,IAAAO,EACJ,OALYG,EAAOT,WAAW,MAC1BC,aAAaR,EAAW,EAAG,GAIvBC,GACN,IAAK,aACMY,EAAAG,EAAOC,SAAS,cACzB,MACF,IAAK,YACMJ,EAAAG,EAAOC,SAAS,aACzB,MACF,IAAK,aACMJ,EAAAG,EAAOC,SAAS,cACzB,MACF,QACE,MAAM,IAAId,MAAM,2BAA2BF,KAGxC,OAAAY,CAAA,CAEX,+CAxFO,SACLK,GAEO,OAAAN,MACLZ,EACAC,EAAkC,gBAElC,MAAMI,MAAEA,EAAAC,OAAOA,EAAQa,KAAAA,GAASnB,EAIhC,IASIa,EATAO,EAAgBF,EAAMG,OAAOC,KAAKH,GAAO,CAC3CI,IAAK,CACHlB,QACAC,SACAkB,SAAU,KAMd,OAAQvB,GACN,IAAK,aACHY,QAAeO,EAAcK,OAAOR,WACpC,MACF,IAAK,YACHJ,QAAeO,EAAcM,MAAMT,WACnC,MACF,IAAK,aAEHJ,QAAeO,EACZO,QAAQ,CAAEC,WAAY,CAAEC,EAAG,IAAKC,EAAG,IAAKC,EAAG,OAC3CC,OACAf,WACH,MACF,QACE,MAAM,IAAId,MAAM,2BAA2BF,KAGxC,OAAAY,CAAA,CAEX"}
@@ -3,13 +3,13 @@
3
3
  * In browser: uses OffscreenCanvas
4
4
  * In Node.js: can use Sharp or other image processing libraries
5
5
  */
6
- type ImageDataConverter<T = Blob> = (imageData: ImageData, imageType?: ImageConversionTypes) => Promise<T>;
7
- type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';
6
+ export type ImageDataConverter<T = Blob> = (imageData: ImageData, imageType?: ImageConversionTypes) => Promise<T>;
7
+ export type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';
8
8
  /**
9
9
  * Browser implementation using OffscreenCanvas
10
10
  * This is the default implementation used in browser environments
11
11
  */
12
- declare const browserImageDataToBlobConverter: ImageDataConverter;
12
+ export declare const browserImageDataToBlobConverter: ImageDataConverter;
13
13
  /**
14
14
  * Node.js implementation using Sharp
15
15
  * This requires the 'sharp' package to be installed
@@ -23,7 +23,7 @@ declare const browserImageDataToBlobConverter: ImageDataConverter;
23
23
  * const engine = new PdfiumEngine(pdfiumModule, logger, converter);
24
24
  * ```
25
25
  */
26
- declare function createNodeImageDataToBufferConverter(sharp: any): ImageDataConverter<Buffer>;
26
+ export declare function createNodeImageDataToBufferConverter(sharp: any): ImageDataConverter<Buffer>;
27
27
  /**
28
28
  * Alternative Node.js implementation using canvas (node-canvas)
29
29
  * This requires the 'canvas' package to be installed
@@ -37,7 +37,7 @@ declare function createNodeImageDataToBufferConverter(sharp: any): ImageDataConv
37
37
  * const engine = new PdfiumEngine(pdfiumModule, logger, converter);
38
38
  * ```
39
39
  */
40
- declare function createNodeCanvasImageDataToBlobConverter(createCanvas: any): ImageDataConverter<Buffer>;
40
+ export declare function createNodeCanvasImageDataToBlobConverter(createCanvas: any): ImageDataConverter<Buffer>;
41
41
  /**
42
42
  * Generic Node.js implementation that works with any image processing library
43
43
  * that can handle raw RGBA data
@@ -51,14 +51,11 @@ declare function createNodeCanvasImageDataToBlobConverter(createCanvas: any): Im
51
51
  * });
52
52
  * ```
53
53
  */
54
- declare function createCustomImageDataToBlobConverter(processor: (imageData: ImageData) => Promise<Buffer>): ImageDataConverter;
54
+ export declare function createCustomImageDataToBlobConverter(processor: (imageData: ImageData) => Promise<Buffer>): ImageDataConverter;
55
55
  /**
56
56
  * Create a custom converter that returns a Buffer
57
57
  * @param processor - function to process the image data
58
58
  * @param imageType - image type
59
59
  * @returns ImageDataToBlobConverter<Buffer>
60
60
  */
61
- declare function createCustomImageDataToBufferConverter(processor: (imageData: ImageData, imageType: ImageConversionTypes) => Promise<Buffer>): ImageDataConverter<Buffer>;
62
-
63
- export { browserImageDataToBlobConverter, createCustomImageDataToBlobConverter, createCustomImageDataToBufferConverter, createNodeCanvasImageDataToBlobConverter, createNodeImageDataToBufferConverter };
64
- export type { ImageConversionTypes, ImageDataConverter };
61
+ export declare function createCustomImageDataToBufferConverter(processor: (imageData: ImageData, imageType: ImageConversionTypes) => Promise<Buffer>): ImageDataConverter<Buffer>;
@@ -0,0 +1,80 @@
1
+ const browserImageDataToBlobConverter = (imageData, imageType = "image/webp") => {
2
+ if (typeof OffscreenCanvas === "undefined") {
3
+ throw new Error(
4
+ "OffscreenCanvas is not available in this environment. This converter is intended for browser use only. Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js."
5
+ );
6
+ }
7
+ const off = new OffscreenCanvas(imageData.width, imageData.height);
8
+ off.getContext("2d").putImageData(imageData, 0, 0);
9
+ return off.convertToBlob({ type: imageType });
10
+ };
11
+ function createNodeImageDataToBufferConverter(sharp) {
12
+ return async (imageData, imageType = "image/webp") => {
13
+ const { width, height, data } = imageData;
14
+ let sharpInstance = sharp(Buffer.from(data), {
15
+ raw: {
16
+ width,
17
+ height,
18
+ channels: 4
19
+ // RGBA
20
+ }
21
+ });
22
+ let buffer;
23
+ switch (imageType) {
24
+ case "image/webp":
25
+ buffer = await sharpInstance.webp().toBuffer();
26
+ break;
27
+ case "image/png":
28
+ buffer = await sharpInstance.png().toBuffer();
29
+ break;
30
+ case "image/jpeg":
31
+ buffer = await sharpInstance.flatten({ background: { r: 255, g: 255, b: 255 } }).jpeg().toBuffer();
32
+ break;
33
+ default:
34
+ throw new Error(`Unsupported image type: ${imageType}`);
35
+ }
36
+ return buffer;
37
+ };
38
+ }
39
+ function createNodeCanvasImageDataToBlobConverter(createCanvas) {
40
+ return async (imageData, imageType = "image/webp") => {
41
+ const { width, height } = imageData;
42
+ const canvas = createCanvas(width, height);
43
+ const ctx = canvas.getContext("2d");
44
+ ctx.putImageData(imageData, 0, 0);
45
+ let buffer;
46
+ switch (imageType) {
47
+ case "image/webp":
48
+ buffer = canvas.toBuffer("image/webp");
49
+ break;
50
+ case "image/png":
51
+ buffer = canvas.toBuffer("image/png");
52
+ break;
53
+ case "image/jpeg":
54
+ buffer = canvas.toBuffer("image/jpeg");
55
+ break;
56
+ default:
57
+ throw new Error(`Unsupported image type: ${imageType}`);
58
+ }
59
+ return buffer;
60
+ };
61
+ }
62
+ function createCustomImageDataToBlobConverter(processor) {
63
+ return async (imageData, imageType = "image/webp") => {
64
+ const buffer = await processor(imageData);
65
+ return new Blob([buffer], { type: imageType });
66
+ };
67
+ }
68
+ function createCustomImageDataToBufferConverter(processor) {
69
+ return async (imageData, imageType = "image/webp") => {
70
+ return await processor(imageData, imageType);
71
+ };
72
+ }
73
+ export {
74
+ browserImageDataToBlobConverter,
75
+ createCustomImageDataToBlobConverter,
76
+ createCustomImageDataToBufferConverter,
77
+ createNodeCanvasImageDataToBlobConverter,
78
+ createNodeImageDataToBufferConverter
79
+ };
80
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"converters.cjs","sources":["../src/lib/converters/index.ts"],"sourcesContent":["/**\n * Function type for converting ImageData to Blob\n * In browser: uses OffscreenCanvas\n * In Node.js: can use Sharp or other image processing libraries\n */\nexport type ImageDataConverter<T = Blob> = (\n imageData: ImageData,\n imageType?: ImageConversionTypes,\n) => Promise<T>;\n\nexport type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';\n/**\n * Browser implementation using OffscreenCanvas\n * This is the default implementation used in browser environments\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter = (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n): Promise<Blob> => {\n // Check if we're in a browser environment\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error(\n 'OffscreenCanvas is not available in this environment. ' +\n 'This converter is intended for browser use only. ' +\n 'Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.',\n );\n }\n\n const off = new OffscreenCanvas(imageData.width, imageData.height);\n off.getContext('2d')!.putImageData(imageData, 0, 0);\n return off.convertToBlob({ type: imageType });\n};\n\n/**\n * Node.js implementation using Sharp\n * This requires the 'sharp' package to be installed\n *\n * @example\n * ```typescript\n * import sharp from 'sharp';\n * import { createNodeImageDataToBufferConverter } from '@embedpdf/engines/pdfium/image-converters';\n *\n * const converter = createNodeImageDataToBufferConverter(sharp);\n * const engine = new PdfiumEngine(pdfiumModule, logger, converter);\n * ```\n */\nexport function createNodeImageDataToBufferConverter(\n sharp: any, // Using 'any' to avoid requiring sharp as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n const { width, height, data } = imageData;\n\n // Convert ImageData to Sharp format\n // ImageData uses RGBA format, Sharp expects the same\n let sharpInstance = sharp(Buffer.from(data), {\n raw: {\n width,\n height,\n channels: 4, // RGBA\n },\n });\n\n // Apply the appropriate format conversion based on imageType\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = await sharpInstance.webp().toBuffer();\n break;\n case 'image/png':\n buffer = await sharpInstance.png().toBuffer();\n break;\n case 'image/jpeg':\n // JPEG doesn't support transparency, so we need to composite onto a white background\n buffer = await sharpInstance\n .flatten({ background: { r: 255, g: 255, b: 255 } }) // Remove alpha channel with white background\n .jpeg()\n .toBuffer();\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Alternative Node.js implementation using canvas (node-canvas)\n * This requires the 'canvas' package to be installed\n *\n * @example\n * ```typescript\n * import { createCanvas } from 'canvas';\n * import { createNodeCanvasImageDataToBlobConverter } from '@embedpdf/engines/pdfium/image-converters';\n *\n * const converter = createNodeCanvasImageDataToBlobConverter(createCanvas, 'image/png');\n * const engine = new PdfiumEngine(pdfiumModule, logger, converter);\n * ```\n */\nexport function createNodeCanvasImageDataToBlobConverter(\n createCanvas: any, // Using 'any' to avoid requiring canvas as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n const { width, height } = imageData;\n\n // Create a canvas and put the image data\n const canvas = createCanvas(width, height);\n const ctx = canvas.getContext('2d');\n ctx.putImageData(imageData, 0, 0);\n\n // Convert to buffer and create blob based on the requested type\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = canvas.toBuffer('image/webp');\n break;\n case 'image/png':\n buffer = canvas.toBuffer('image/png');\n break;\n case 'image/jpeg':\n buffer = canvas.toBuffer('image/jpeg');\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Generic Node.js implementation that works with any image processing library\n * that can handle raw RGBA data\n *\n * @example\n * ```typescript\n * const converter = createCustomImageDataToBlobConverter(async (imageData) => {\n * // Your custom image processing logic here\n * // Return a Buffer that will be wrapped in a Blob\n * return processImageWithYourLibrary(imageData);\n * });\n * ```\n */\nexport function createCustomImageDataToBlobConverter(\n processor: (imageData: ImageData) => Promise<Buffer>,\n): ImageDataConverter {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Blob> => {\n const buffer = await processor(imageData);\n return new Blob([buffer], { type: imageType });\n };\n}\n\n/**\n * Create a custom converter that returns a Buffer\n * @param processor - function to process the image data\n * @param imageType - image type\n * @returns ImageDataToBlobConverter<Buffer>\n */\nexport function createCustomImageDataToBufferConverter(\n processor: (imageData: ImageData, imageType: ImageConversionTypes) => Promise<Buffer>,\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n return await processor(imageData, imageType);\n };\n}\n"],"names":[],"mappings":";;AAWA;;;AAGG;AACU,MAAA,+BAA+B,GAAuB,CACjE,SAAoB,EACpB,SAAA,GAAkC,YAAY,KAC7B;;AAEjB,IAAA,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;QAC1C,MAAM,IAAI,KAAK,CACb,wDAAwD;YACtD,mDAAmD;AACnD,YAAA,4GAA4G,CAC/G,CAAC;KACH;AAED,IAAA,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACnE,IAAA,GAAG,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAChD,EAAE;AAEF;;;;;;;;;;;;AAYG;AACG,SAAU,oCAAoC,CAClD,KAAU,EAAA;AAEV,IAAA,OAAO,OACL,SAAoB,EACpB,SAAkC,GAAA,YAAY,KAC3B;QACnB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;;;QAI1C,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC3C,YAAA,GAAG,EAAE;gBACH,KAAK;gBACL,MAAM;gBACN,QAAQ,EAAE,CAAC;AACZ,aAAA;AACF,SAAA,CAAC,CAAC;;AAGH,QAAA,IAAI,MAAc,CAAC;QACnB,QAAQ,SAAS;AACf,YAAA,KAAK,YAAY;gBACf,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAC/C,MAAM;AACR,YAAA,KAAK,WAAW;gBACd,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAC9C,MAAM;AACR,YAAA,KAAK,YAAY;;gBAEf,MAAM,GAAG,MAAM,aAAa;qBACzB,OAAO,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;AACnD,qBAAA,IAAI,EAAE;AACN,qBAAA,QAAQ,EAAE,CAAC;gBACd,MAAM;AACR,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,CAAA,CAAE,CAAC,CAAC;SAC3D;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;AAYG;AACG,SAAU,wCAAwC,CACtD,YAAiB,EAAA;AAEjB,IAAA,OAAO,OACL,SAAoB,EACpB,SAAkC,GAAA,YAAY,KAC3B;AACnB,QAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;;QAGpC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACpC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGlC,QAAA,IAAI,MAAc,CAAC;QACnB,QAAQ,SAAS;AACf,YAAA,KAAK,YAAY;AACf,gBAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACvC,MAAM;AACR,YAAA,KAAK,WAAW;AACd,gBAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBACtC,MAAM;AACR,YAAA,KAAK,YAAY;AACf,gBAAA,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACvC,MAAM;AACR,YAAA;AACE,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,CAAA,CAAE,CAAC,CAAC;SAC3D;AAED,QAAA,OAAO,MAAM,CAAC;AAChB,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;AAYG;AACG,SAAU,oCAAoC,CAClD,SAAoD,EAAA;AAEpD,IAAA,OAAO,OACL,SAAoB,EACpB,SAAkC,GAAA,YAAY,KAC7B;AACjB,QAAA,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1C,QAAA,OAAO,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AACjD,KAAC,CAAC;AACJ,CAAC;AAED;;;;;AAKG;AACG,SAAU,sCAAsC,CACpD,SAAqF,EAAA;AAErF,IAAA,OAAO,OACL,SAAoB,EACpB,SAAkC,GAAA,YAAY,KAC3B;AACnB,QAAA,OAAO,MAAM,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/C,KAAC,CAAC;AACJ;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/lib/converters/index.ts"],"sourcesContent":["/**\n * Function type for converting ImageData to Blob\n * In browser: uses OffscreenCanvas\n * In Node.js: can use Sharp or other image processing libraries\n */\nexport type ImageDataConverter<T = Blob> = (\n imageData: ImageData,\n imageType?: ImageConversionTypes,\n) => Promise<T>;\n\nexport type ImageConversionTypes = 'image/webp' | 'image/png' | 'image/jpeg';\n/**\n * Browser implementation using OffscreenCanvas\n * This is the default implementation used in browser environments\n */\nexport const browserImageDataToBlobConverter: ImageDataConverter = (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n): Promise<Blob> => {\n // Check if we're in a browser environment\n if (typeof OffscreenCanvas === 'undefined') {\n throw new Error(\n 'OffscreenCanvas is not available in this environment. ' +\n 'This converter is intended for browser use only. ' +\n 'Please use createNodeImageDataToBlobConverter() or createNodeCanvasImageDataToBlobConverter() for Node.js.',\n );\n }\n\n const off = new OffscreenCanvas(imageData.width, imageData.height);\n off.getContext('2d')!.putImageData(imageData, 0, 0);\n return off.convertToBlob({ type: imageType });\n};\n\n/**\n * Node.js implementation using Sharp\n * This requires the 'sharp' package to be installed\n *\n * @example\n * ```typescript\n * import sharp from 'sharp';\n * import { createNodeImageDataToBufferConverter } from '@embedpdf/engines/pdfium/image-converters';\n *\n * const converter = createNodeImageDataToBufferConverter(sharp);\n * const engine = new PdfiumEngine(pdfiumModule, logger, converter);\n * ```\n */\nexport function createNodeImageDataToBufferConverter(\n sharp: any, // Using 'any' to avoid requiring sharp as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n const { width, height, data } = imageData;\n\n // Convert ImageData to Sharp format\n // ImageData uses RGBA format, Sharp expects the same\n let sharpInstance = sharp(Buffer.from(data), {\n raw: {\n width,\n height,\n channels: 4, // RGBA\n },\n });\n\n // Apply the appropriate format conversion based on imageType\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = await sharpInstance.webp().toBuffer();\n break;\n case 'image/png':\n buffer = await sharpInstance.png().toBuffer();\n break;\n case 'image/jpeg':\n // JPEG doesn't support transparency, so we need to composite onto a white background\n buffer = await sharpInstance\n .flatten({ background: { r: 255, g: 255, b: 255 } }) // Remove alpha channel with white background\n .jpeg()\n .toBuffer();\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Alternative Node.js implementation using canvas (node-canvas)\n * This requires the 'canvas' package to be installed\n *\n * @example\n * ```typescript\n * import { createCanvas } from 'canvas';\n * import { createNodeCanvasImageDataToBlobConverter } from '@embedpdf/engines/pdfium/image-converters';\n *\n * const converter = createNodeCanvasImageDataToBlobConverter(createCanvas, 'image/png');\n * const engine = new PdfiumEngine(pdfiumModule, logger, converter);\n * ```\n */\nexport function createNodeCanvasImageDataToBlobConverter(\n createCanvas: any, // Using 'any' to avoid requiring canvas as a dependency\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n const { width, height } = imageData;\n\n // Create a canvas and put the image data\n const canvas = createCanvas(width, height);\n const ctx = canvas.getContext('2d');\n ctx.putImageData(imageData, 0, 0);\n\n // Convert to buffer and create blob based on the requested type\n let buffer: Buffer;\n switch (imageType) {\n case 'image/webp':\n buffer = canvas.toBuffer('image/webp');\n break;\n case 'image/png':\n buffer = canvas.toBuffer('image/png');\n break;\n case 'image/jpeg':\n buffer = canvas.toBuffer('image/jpeg');\n break;\n default:\n throw new Error(`Unsupported image type: ${imageType}`);\n }\n\n return buffer;\n };\n}\n\n/**\n * Generic Node.js implementation that works with any image processing library\n * that can handle raw RGBA data\n *\n * @example\n * ```typescript\n * const converter = createCustomImageDataToBlobConverter(async (imageData) => {\n * // Your custom image processing logic here\n * // Return a Buffer that will be wrapped in a Blob\n * return processImageWithYourLibrary(imageData);\n * });\n * ```\n */\nexport function createCustomImageDataToBlobConverter(\n processor: (imageData: ImageData) => Promise<Buffer>,\n): ImageDataConverter {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Blob> => {\n const buffer = await processor(imageData);\n return new Blob([buffer], { type: imageType });\n };\n}\n\n/**\n * Create a custom converter that returns a Buffer\n * @param processor - function to process the image data\n * @param imageType - image type\n * @returns ImageDataToBlobConverter<Buffer>\n */\nexport function createCustomImageDataToBufferConverter(\n processor: (imageData: ImageData, imageType: ImageConversionTypes) => Promise<Buffer>,\n): ImageDataConverter<Buffer> {\n return async (\n imageData: ImageData,\n imageType: ImageConversionTypes = 'image/webp',\n ): Promise<Buffer> => {\n return await processor(imageData, imageType);\n };\n}\n"],"names":[],"mappings":"AAeO,MAAM,kCAAsD,CACjE,WACA,YAAkC,iBAChB;AAEd,MAAA,OAAO,oBAAoB,aAAa;AAC1C,UAAM,IAAI;AAAA,MACR;AAAA,IAGF;AAAA,EAAA;AAGF,QAAM,MAAM,IAAI,gBAAgB,UAAU,OAAO,UAAU,MAAM;AACjE,MAAI,WAAW,IAAI,EAAG,aAAa,WAAW,GAAG,CAAC;AAClD,SAAO,IAAI,cAAc,EAAE,MAAM,WAAW;AAC9C;AAeO,SAAS,qCACd,OAC4B;AACrB,SAAA,OACL,WACA,YAAkC,iBACd;AACpB,UAAM,EAAE,OAAO,QAAQ,KAAS,IAAA;AAIhC,QAAI,gBAAgB,MAAM,OAAO,KAAK,IAAI,GAAG;AAAA,MAC3C,KAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,UAAU;AAAA;AAAA,MAAA;AAAA,IACZ,CACD;AAGG,QAAA;AACJ,YAAQ,WAAW;AAAA,MACjB,KAAK;AACH,iBAAS,MAAM,cAAc,KAAK,EAAE,SAAS;AAC7C;AAAA,MACF,KAAK;AACH,iBAAS,MAAM,cAAc,IAAI,EAAE,SAAS;AAC5C;AAAA,MACF,KAAK;AAEH,iBAAS,MAAM,cACZ,QAAQ,EAAE,YAAY,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,EAAG,CAAA,EAClD,OACA,SAAS;AACZ;AAAA,MACF;AACE,cAAM,IAAI,MAAM,2BAA2B,SAAS,EAAE;AAAA,IAAA;AAGnD,WAAA;AAAA,EACT;AACF;AAeO,SAAS,yCACd,cAC4B;AACrB,SAAA,OACL,WACA,YAAkC,iBACd;AACd,UAAA,EAAE,OAAO,OAAA,IAAW;AAGpB,UAAA,SAAS,aAAa,OAAO,MAAM;AACnC,UAAA,MAAM,OAAO,WAAW,IAAI;AAC9B,QAAA,aAAa,WAAW,GAAG,CAAC;AAG5B,QAAA;AACJ,YAAQ,WAAW;AAAA,MACjB,KAAK;AACM,iBAAA,OAAO,SAAS,YAAY;AACrC;AAAA,MACF,KAAK;AACM,iBAAA,OAAO,SAAS,WAAW;AACpC;AAAA,MACF,KAAK;AACM,iBAAA,OAAO,SAAS,YAAY;AACrC;AAAA,MACF;AACE,cAAM,IAAI,MAAM,2BAA2B,SAAS,EAAE;AAAA,IAAA;AAGnD,WAAA;AAAA,EACT;AACF;AAeO,SAAS,qCACd,WACoB;AACb,SAAA,OACL,WACA,YAAkC,iBAChB;AACZ,UAAA,SAAS,MAAM,UAAU,SAAS;AACjC,WAAA,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,MAAM,WAAW;AAAA,EAC/C;AACF;AAQO,SAAS,uCACd,WAC4B;AACrB,SAAA,OACL,WACA,YAAkC,iBACd;AACb,WAAA,MAAM,UAAU,WAAW,SAAS;AAAA,EAC7C;AACF;"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Docs for `@embedpdf/engines` module
3
+ * @packageDocumentation
4
+ */
5
+ export * from './pdfium';
6
+ export * from './webworker';
7
+ export * from './mock';
@@ -0,0 +1,25 @@
1
+ import { PdfDocumentObject, PdfEngine, PdfFile } from '@embedpdf/models';
2
+ /**
3
+ * Create mock of pdf engine
4
+ * @param partialEngine - partial configuration of engine
5
+ * @returns - mock of pdf engine
6
+ *
7
+ * @public
8
+ */
9
+ export declare function createMockPdfEngine(partialEngine?: Partial<PdfEngine>): PdfEngine;
10
+ /**
11
+ * Create mock of pdf document
12
+ * @param doc - partial configuration of document
13
+ * @returns mock of pdf document
14
+ *
15
+ * @public
16
+ */
17
+ export declare function createMockPdfDocument(doc?: Partial<PdfDocumentObject>): PdfDocumentObject;
18
+ /**
19
+ * Create mock of pdf file
20
+ * @param file - partial configuration of file
21
+ * @returns mock of pdf file
22
+ *
23
+ * @public
24
+ */
25
+ export declare function createMockPdfFile(file?: Partial<PdfFile>): PdfFile;
@@ -0,0 +1,62 @@
1
+ import { WrappedPdfiumModule } from '@embedpdf/pdfium';
2
+ export declare class PdfCache {
3
+ private readonly pdfium;
4
+ private readonly docs;
5
+ constructor(pdfium: WrappedPdfiumModule);
6
+ /** Open (or re-use) a document */
7
+ setDocument(id: string, filePtr: number, docPtr: number): void;
8
+ /** Retrieve the DocumentContext for a given PdfDocumentObject */
9
+ getContext(docId: string): DocumentContext | undefined;
10
+ /** Close & fully release a document and all its pages */
11
+ closeDocument(docId: string): boolean;
12
+ }
13
+ export declare class DocumentContext {
14
+ readonly filePtr: number;
15
+ readonly docPtr: number;
16
+ private readonly pageCache;
17
+ constructor(filePtr: number, docPtr: number, pdfium: WrappedPdfiumModule);
18
+ /** Main accessor for pages */
19
+ acquirePage(pageIdx: number): PageContext;
20
+ /** Tear down all pages + this document */
21
+ dispose(): void;
22
+ }
23
+ export declare class PageCache {
24
+ readonly pdf: WrappedPdfiumModule;
25
+ private readonly docPtr;
26
+ private readonly cache;
27
+ constructor(pdf: WrappedPdfiumModule, docPtr: number);
28
+ acquire(pageIdx: number): PageContext;
29
+ forceReleaseAll(): void;
30
+ }
31
+ export declare class PageContext {
32
+ private readonly pdf;
33
+ readonly docPtr: number;
34
+ readonly pageIdx: number;
35
+ readonly pagePtr: number;
36
+ private readonly onFinalDispose;
37
+ private refCount;
38
+ private expiryTimer?;
39
+ private disposed;
40
+ private textPagePtr?;
41
+ private formInfoPtr?;
42
+ private formHandle?;
43
+ constructor(pdf: WrappedPdfiumModule, docPtr: number, pageIdx: number, pagePtr: number, onFinalDispose: () => void);
44
+ /** Called by PageCache.acquire() */
45
+ bumpRefCount(): void;
46
+ /** Called by PageCache.acquire() */
47
+ clearExpiryTimer(): void;
48
+ /** Called by PageCache.release() internally */
49
+ release(): void;
50
+ /** Tear down _all_ sub-pointers & the page. */
51
+ disposeImmediate(): void;
52
+ /** Always safe: opens (once) and returns the text-page ptr. */
53
+ getTextPage(): number;
54
+ /** Always safe: opens (once) and returns the form-fill handle. */
55
+ getFormHandle(): number;
56
+ /**
57
+ * Safely execute `fn` with an annotation pointer.
58
+ * Pointer is ALWAYS closed afterwards.
59
+ */
60
+ withAnnotation<T>(annotIdx: number, fn: (annotPtr: number) => T): T;
61
+ private ensureAlive;
62
+ }
@@ -1,16 +1,71 @@
1
- import { PdfEngine, Logger, Task, PdfErrorReason, PdfFileUrl, PdfUrlOptions, PdfDocumentObject, PdfFile, PdfFileLoader, PdfSignatureObject, PdfBookmarkObject, PdfPageObject, Rotation, PdfRenderOptions, ImageConversionTypes, PdfTask, Rect, PdfAnnotationObject, PdfTextRectObject, PdfAttachmentObject, PdfWidgetAnnoObject, FormFieldValue, PdfPageFlattenFlag, PdfPageFlattenResult, PageTextSlice, PdfInkAnnoObject, PdfHighlightAnnoObject, PdfUnderlineAnnoObject, PdfStrikeOutAnnoObject, PdfSquigglyAnnoObject, PdfStampAnnoObjectContents, Position, PdfPageGeometry, PdfGlyphObject, AppearanceMode, PdfAnnotationObjectBase, WebAlphaColor, MatchFlag, SearchAllPagesResult, PdfImage } from '@embedpdf/models';
1
+ import { PdfAnnotationObject, PdfTextRectObject, PdfWidgetAnnoObject, Logger, SearchTarget, MatchFlag, PdfBookmarkObject, PdfDocumentObject, PdfEngine, PdfPageObject, Rotation, Rect, PdfAttachmentObject, PdfSignatureObject, PdfRenderOptions, PdfInkAnnoObject, Position, PdfSquigglyAnnoObject, PdfStrikeOutAnnoObject, PdfUnderlineAnnoObject, PdfFile, AppearanceMode, PdfHighlightAnnoObject, PdfStampAnnoObjectContents, FormFieldValue, PdfPageFlattenFlag, PdfPageFlattenResult, PdfTask, PdfFileLoader, SearchAllPagesResult, PdfUrlOptions, PdfFileUrl, Task, PdfErrorReason, PdfGlyphObject, PdfPageGeometry, PdfImage, ImageConversionTypes, PdfAnnotationObjectBase, PageTextSlice, WebAlphaColor } from '@embedpdf/models';
2
2
  import { WrappedPdfiumModule } from '@embedpdf/pdfium';
3
-
3
+ /**
4
+ * Format of bitmap
5
+ */
6
+ export declare enum BitmapFormat {
7
+ Bitmap_Gray = 1,
8
+ Bitmap_BGR = 2,
9
+ Bitmap_BGRx = 3,
10
+ Bitmap_BGRA = 4
11
+ }
12
+ /**
13
+ * Pdf rendering flag
14
+ */
15
+ export declare enum RenderFlag {
16
+ ANNOT = 1,// Set if annotations are to be rendered.
17
+ LCD_TEXT = 2,// Set if using text rendering optimized for LCD display.
18
+ NO_NATIVETEXT = 4,// Don't use the native text output available on some platforms
19
+ GRAYSCALE = 8,// Grayscale output.
20
+ DEBUG_INFO = 128,// Set if you want to get some debug info. Please discuss with Foxit first if you need to collect debug info.
21
+ NO_CATCH = 256,// Set if you don't want to catch exception.
22
+ RENDER_LIMITEDIMAGECACHE = 512,// Limit image cache size.
23
+ RENDER_FORCEHALFTONE = 1024,// Always use halftone for image stretching.
24
+ PRINTING = 2048,// Render for printing.
25
+ REVERSE_BYTE_ORDER = 16
26
+ }
27
+ /**
28
+ * Context used for searching
29
+ */
30
+ export interface SearchContext {
31
+ /**
32
+ * search target
33
+ */
34
+ target: SearchTarget;
35
+ /**
36
+ * current page index
37
+ */
38
+ currPageIndex: number;
39
+ /**
40
+ * index of text in the current pdf page, -1 means reach the end
41
+ */
42
+ startIndex: number;
43
+ }
44
+ /**
45
+ * Error code of pdfium library
46
+ */
47
+ export declare enum PdfiumErrorCode {
48
+ Success = 0,
49
+ Unknown = 1,
50
+ File = 2,
51
+ Format = 3,
52
+ Password = 4,
53
+ Security = 5,
54
+ Page = 6,
55
+ XFALoad = 7,
56
+ XFALayout = 8
57
+ }
4
58
  /**
5
59
  * Function type for converting ImageData to Blob
6
60
  * In browser: uses OffscreenCanvas
7
61
  * In Node.js: can use Sharp or other image processing libraries
8
62
  */
9
- type ImageDataConverter<T = Blob> = (imageData: PdfImage, imageType?: ImageConversionTypes) => Promise<T>;
63
+ export type ImageDataConverter<T = Blob> = (imageData: PdfImage, imageType?: ImageConversionTypes) => Promise<T>;
64
+ export declare const browserImageDataToBlobConverter: ImageDataConverter<Blob>;
10
65
  /**
11
66
  * Pdf engine that based on pdfium wasm
12
67
  */
13
- declare class PdfiumEngine<T = Blob> implements PdfEngine<T> {
68
+ export declare class PdfiumEngine<T = Blob> implements PdfEngine<T> {
14
69
  private pdfiumModule;
15
70
  private logger;
16
71
  private imageDataConverter;
@@ -853,6 +908,20 @@ declare class PdfiumEngine<T = Blob> implements PdfEngine<T> {
853
908
  * @private
854
909
  */
855
910
  private getAnnotString;
911
+ /**
912
+ * Fetches the /IT (Intent) name from an annotation as a UTF-8 JS string.
913
+ *
914
+ * Mirrors getAnnotString(): calls EPDFAnnot_GetIntent twice (length probe + copy).
915
+ * Returns `undefined` if no intent present.
916
+ */
917
+ private getAnnotIntent;
918
+ /**
919
+ * Returns the rich‑content string stored in the annotation’s `/RC` entry.
920
+ *
921
+ * Works like `getAnnotIntent()`: first probe for length, then copy.
922
+ * `undefined` when the annotation has no rich content.
923
+ */
924
+ private getAnnotRichContent;
856
925
  /**
857
926
  * Set a string value (`/T`, `/M`, `/State`, …) to an annotation.
858
927
  *
@@ -1085,7 +1154,3 @@ declare class PdfiumEngine<T = Blob> implements PdfEngine<T> {
1085
1154
  */
1086
1155
  private searchAllInPage;
1087
1156
  }
1088
-
1089
- declare function createPdfiumEngine(wasmUrl: string, logger?: Logger): Promise<PdfiumEngine>;
1090
-
1091
- export { createPdfiumEngine };
@@ -0,0 +1,21 @@
1
+ import { PdfiumRuntimeMethods, PdfiumModule } from '@embedpdf/pdfium';
2
+ /**
3
+ * Read string from WASM heap
4
+ * @param wasmModule - pdfium wasm module instance
5
+ * @param readChars - function to read chars
6
+ * @param parseChars - function to parse chars
7
+ * @param defaultLength - default length of chars that needs to read
8
+ * @returns string from the heap
9
+ *
10
+ * @public
11
+ */
12
+ export declare function readString(wasmModule: PdfiumRuntimeMethods & PdfiumModule, readChars: (buffer: number, bufferLength: number) => number, parseChars: (buffer: number) => string, defaultLength?: number): string;
13
+ /**
14
+ * Read arraybyffer from WASM heap
15
+ * @param wasmModule - pdfium wasm module instance
16
+ * @param readChars - function to read chars
17
+ * @returns arraybuffer from the heap
18
+ *
19
+ * @public
20
+ */
21
+ export declare function readArrayBuffer(wasmModule: PdfiumRuntimeMethods & PdfiumModule, readChars: (buffer: number, bufferLength: number) => number): ArrayBuffer;
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../engine-B7CS6Qyp.cjs"),e=require("../../runner-BcS-WEof.cjs");exports.BitmapFormat=r.BitmapFormat,exports.PdfiumEngine=r.PdfiumEngine,exports.PdfiumErrorCode=r.PdfiumErrorCode,exports.RenderFlag=r.RenderFlag,exports.browserImageDataToBlobConverter=r.browserImageDataToBlobConverter,exports.readArrayBuffer=r.readArrayBuffer,exports.readString=r.readString,exports.PdfiumEngineRunner=e.PdfiumEngineRunner;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './engine';
2
+ export * from './helper';
3
+ export * from './runner';
@@ -0,0 +1,13 @@
1
+ import { B, a, P, R, b, c, r } from "../../engine-M0_XZhss.js";
2
+ import { P as P2 } from "../../runner-DUp_7Uu_.js";
3
+ export {
4
+ B as BitmapFormat,
5
+ a as PdfiumEngine,
6
+ P2 as PdfiumEngineRunner,
7
+ P as PdfiumErrorCode,
8
+ R as RenderFlag,
9
+ b as browserImageDataToBlobConverter,
10
+ c as readArrayBuffer,
11
+ r as readString
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,16 @@
1
+ import { EngineRunner } from '../webworker/runner';
2
+ /**
3
+ * EngineRunner for pdfium-based wasm engine
4
+ */
5
+ export declare class PdfiumEngineRunner extends EngineRunner {
6
+ private wasmBinary;
7
+ /**
8
+ * Create an instance of PdfiumEngineRunner
9
+ * @param wasmBinary - wasm binary that contains the pdfium wasm file
10
+ */
11
+ constructor(wasmBinary: ArrayBuffer);
12
+ /**
13
+ * Initialize runner
14
+ */
15
+ prepare(): Promise<void>;
16
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/pdfium"),i=require("../../../engine-B7CS6Qyp.cjs");exports.createPdfiumEngine=async function(t,n){const r=await fetch(t),a=await r.arrayBuffer(),u=await e.init({wasmBinary:a});return new i.PdfiumEngine(u,n)};
2
+ //# sourceMappingURL=direct-engine.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-engine.cjs","sources":["../../../../src/lib/pdfium/web/direct-engine.ts"],"sourcesContent":["import { Logger } from '@embedpdf/models';\nimport { init } from '@embedpdf/pdfium';\n\nimport { PdfiumEngine } from '../engine';\n\nexport async function createPdfiumEngine(wasmUrl: string, logger?: Logger): Promise<PdfiumEngine> {\n const response = await fetch(wasmUrl);\n const wasmBinary = await response.arrayBuffer();\n const wasmModule = await init({ wasmBinary });\n return new PdfiumEngine(wasmModule, logger);\n}\n"],"names":["async","wasmUrl","logger","response","fetch","wasmBinary","arrayBuffer","wasmModule","init","PdfiumEngine"],"mappings":"yLAKsBA,eAAmBC,EAAiBC,GAClD,MAAAC,QAAiBC,MAAMH,GACvBI,QAAmBF,EAASG,cAC5BC,QAAmBC,OAAK,CAAEH,eACzB,OAAA,IAAII,EAAAA,aAAaF,EAAYL,EACtC"}
@@ -0,0 +1,3 @@
1
+ import { Logger } from '@embedpdf/models';
2
+ import { PdfiumEngine } from '../engine';
3
+ export declare function createPdfiumEngine(wasmUrl: string, logger?: Logger): Promise<PdfiumEngine>;
@@ -0,0 +1,12 @@
1
+ import { init } from "@embedpdf/pdfium";
2
+ import { a as PdfiumEngine } from "../../../engine-M0_XZhss.js";
3
+ async function createPdfiumEngine(wasmUrl, logger) {
4
+ const response = await fetch(wasmUrl);
5
+ const wasmBinary = await response.arrayBuffer();
6
+ const wasmModule = await init({ wasmBinary });
7
+ return new PdfiumEngine(wasmModule, logger);
8
+ }
9
+ export {
10
+ createPdfiumEngine
11
+ };
12
+ //# sourceMappingURL=direct-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"direct-engine.js","sources":["../../../../src/lib/pdfium/web/direct-engine.ts"],"sourcesContent":["import { Logger } from '@embedpdf/models';\nimport { init } from '@embedpdf/pdfium';\n\nimport { PdfiumEngine } from '../engine';\n\nexport async function createPdfiumEngine(wasmUrl: string, logger?: Logger): Promise<PdfiumEngine> {\n const response = await fetch(wasmUrl);\n const wasmBinary = await response.arrayBuffer();\n const wasmModule = await init({ wasmBinary });\n return new PdfiumEngine(wasmModule, logger);\n}\n"],"names":[],"mappings":";;AAKsB,eAAA,mBAAmB,SAAiB,QAAwC;AAC1F,QAAA,WAAW,MAAM,MAAM,OAAO;AAC9B,QAAA,aAAa,MAAM,SAAS,YAAY;AAC9C,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AACrC,SAAA,IAAI,aAAa,YAAY,MAAM;AAC5C;"}