@pdfme/converter 6.1.5 → 6.1.7-dev.1

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.
@@ -0,0 +1 @@
1
+ export {};
@@ -1,35 +1,32 @@
1
1
  import { mm2pt, pt2mm } from "@pdfme/common";
2
2
  import { PDFDocument } from "@pdfme/pdf-lib";
3
3
  //#region src/pdf2img.ts
4
+ var uint8ArrayToArrayBuffer = (bytes) => {
5
+ const buffer = new ArrayBuffer(bytes.byteLength);
6
+ new Uint8Array(buffer).set(bytes);
7
+ return buffer;
8
+ };
4
9
  async function pdf2img(pdf, options = {}, env) {
5
10
  try {
6
- const { scale = 1, imageType = "jpeg", range = {} } = options;
11
+ const { scale = 1, range = {} } = options;
7
12
  const { start = 0, end = Infinity } = range;
8
- const { getDocument, destroyDocument, createCanvas, canvasToArrayBuffer } = env;
9
- const pdfDoc = await getDocument(pdf);
13
+ const { openDocument } = env;
14
+ const pdfDoc = await openDocument(pdf);
10
15
  try {
11
- const numPages = pdfDoc.numPages;
16
+ const numPages = pdfDoc.pageCount;
12
17
  const startPage = Math.max(start + 1, 1);
13
18
  const endPage = Math.min(end + 1, numPages);
14
19
  const results = [];
15
20
  for (let pageNum = startPage; pageNum <= endPage; pageNum++) {
16
- const page = await pdfDoc.getPage(pageNum);
17
- const viewport = page.getViewport({ scale });
18
- const canvas = createCanvas(viewport.width, viewport.height);
19
- if (!canvas) throw new Error("Failed to create canvas");
20
- const context = canvas.getContext("2d");
21
- if (!context) throw new Error("Failed to get canvas context");
22
- await page.render({
23
- canvas,
24
- canvasContext: context,
25
- viewport
26
- }).promise;
27
- const arrayBuffer = canvasToArrayBuffer(canvas, imageType);
28
- results.push(arrayBuffer);
21
+ const png = await pdfDoc.page(pageNum).png({
22
+ scale,
23
+ forms: true
24
+ });
25
+ results.push(uint8ArrayToArrayBuffer(png));
29
26
  }
30
27
  return results;
31
28
  } finally {
32
- await destroyDocument?.(pdfDoc);
29
+ await pdfDoc.destroy?.();
33
30
  }
34
31
  } catch (error) {
35
32
  throw new Error(`[@pdfme/converter] pdf2img failed: ${error.message}`);
@@ -39,23 +36,18 @@ async function pdf2img(pdf, options = {}, env) {
39
36
  //#region src/pdf2size.ts
40
37
  async function pdf2size(pdf, options = {}, env) {
41
38
  const { scale = 1 } = options;
42
- const { getDocument, destroyDocument } = env;
43
- const pdfDoc = await getDocument(pdf);
39
+ const { openDocument } = env;
40
+ const pdfDoc = await openDocument(pdf);
44
41
  try {
45
- return await Promise.all(Array.from({ length: pdfDoc.numPages }, async (_, i) => {
46
- return await pdfDoc.getPage(i + 1).then((page) => {
47
- const { height, width } = page.getViewport({
48
- scale,
49
- rotation: 0
50
- });
51
- return {
52
- height: pt2mm(height),
53
- width: pt2mm(width)
54
- };
55
- });
56
- }));
42
+ return Array.from({ length: pdfDoc.pageCount }, (_, i) => {
43
+ const page = pdfDoc.page(i + 1);
44
+ return {
45
+ height: pt2mm(page.height * scale),
46
+ width: pt2mm(page.width * scale)
47
+ };
48
+ });
57
49
  } finally {
58
- await destroyDocument?.(pdfDoc);
50
+ await pdfDoc.destroy?.();
59
51
  }
60
52
  }
61
53
  //#endregion
@@ -121,4 +113,4 @@ async function img2pdf(imgs, options = {}) {
121
113
  //#endregion
122
114
  export { pdf2size as n, pdf2img as r, img2pdf as t };
123
115
 
124
- //# sourceMappingURL=img2pdf-CTJv8er1.js.map
116
+ //# sourceMappingURL=img2pdf-D4JvZkBO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"img2pdf-D4JvZkBO.js","names":[],"sources":["../src/pdf2img.ts","../src/pdf2size.ts","../src/img2pdf.ts"],"sourcesContent":["interface Environment {\n openDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PdfDocument>;\n}\n\ninterface PdfDocument {\n readonly pageCount: number;\n page: (pageNumber: number) => PdfPage;\n destroy?: () => Promise<void> | void;\n}\n\ninterface PdfPage {\n png: (options?: { scale?: number; forms?: boolean }) => Promise<Uint8Array>;\n}\n\nexport interface Pdf2ImgOptions {\n scale?: number;\n range?: {\n start?: number;\n end?: number;\n };\n}\n\nconst uint8ArrayToArrayBuffer = (bytes: Uint8Array): ArrayBuffer => {\n const buffer = new ArrayBuffer(bytes.byteLength);\n new Uint8Array(buffer).set(bytes);\n return buffer;\n};\n\nexport async function pdf2img(\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n env: Environment,\n): Promise<ArrayBuffer[]> {\n try {\n const { scale = 1, range = {} } = options;\n const { start = 0, end = Infinity } = range;\n\n const { openDocument } = env;\n\n const pdfDoc = await openDocument(pdf);\n try {\n const numPages = pdfDoc.pageCount;\n\n const startPage = Math.max(start + 1, 1);\n const endPage = Math.min(end + 1, numPages);\n\n const results: ArrayBuffer[] = [];\n\n for (let pageNum = startPage; pageNum <= endPage; pageNum++) {\n const png = await pdfDoc.page(pageNum).png({ scale, forms: true });\n results.push(uint8ArrayToArrayBuffer(png));\n }\n\n return results;\n } finally {\n await pdfDoc.destroy?.();\n }\n } catch (error) {\n throw new Error(`[@pdfme/converter] pdf2img failed: ${(error as Error).message}`);\n }\n}\n","import { Size, pt2mm } from '@pdfme/common';\n\ninterface Environment {\n openDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PdfDocument>;\n}\n\ninterface PdfDocument {\n readonly pageCount: number;\n page: (pageNumber: number) => PdfPage;\n destroy?: () => Promise<void> | void;\n}\n\ninterface PdfPage {\n readonly width: number;\n readonly height: number;\n}\n\nexport interface Pdf2SizeOptions {\n scale?: number;\n}\n\nexport async function pdf2size(\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2SizeOptions = {},\n env: Environment,\n): Promise<Size[]> {\n const { scale = 1 } = options;\n const { openDocument } = env;\n const pdfDoc = await openDocument(pdf);\n\n try {\n return Array.from({ length: pdfDoc.pageCount }, (_, i) => {\n const page = pdfDoc.page(i + 1);\n return { height: pt2mm(page.height * scale), width: pt2mm(page.width * scale) };\n });\n } finally {\n await pdfDoc.destroy?.();\n }\n}\n","import { PDFDocument } from '@pdfme/pdf-lib';\nimport { mm2pt } from '@pdfme/common';\n\ninterface Img2PdfOptions {\n scale?: number;\n size?: { height: number; width: number }; // in millimeters\n margin?: [number, number, number, number]; // in millimeters [top, right, bottom, left]\n}\n\nfunction detectImageType(buffer: ArrayBuffer): 'jpeg' | 'png' | 'unknown' {\n const bytes = new Uint8Array(buffer);\n\n if (bytes.length >= 2 && bytes[0] === 0xff && bytes[1] === 0xd8) {\n return 'jpeg';\n }\n\n if (\n bytes.length >= 8 &&\n bytes[0] === 0x89 &&\n bytes[1] === 0x50 &&\n bytes[2] === 0x4e &&\n bytes[3] === 0x47 &&\n bytes[4] === 0x0d &&\n bytes[5] === 0x0a &&\n bytes[6] === 0x1a &&\n bytes[7] === 0x0a\n ) {\n return 'png';\n }\n\n return 'unknown';\n}\n\nexport async function img2pdf(\n imgs: ArrayBuffer[],\n options: Img2PdfOptions = {},\n): Promise<ArrayBuffer> {\n try {\n const { scale = 1, size, margin = [0, 0, 0, 0] } = options;\n\n if (!Array.isArray(imgs) || imgs.length === 0) {\n throw new Error('Input must be a non-empty array of image buffers');\n }\n\n const doc = await PDFDocument.create();\n for (const img of imgs) {\n try {\n let image;\n const type = detectImageType(img);\n\n if (type === 'jpeg') {\n image = await doc.embedJpg(img);\n } else if (type === 'png') {\n image = await doc.embedPng(img);\n } else {\n try {\n image = await doc.embedJpg(img);\n } catch {\n image = await doc.embedPng(img);\n }\n }\n\n const page = doc.addPage();\n const { width: imgWidth, height: imgHeight } = image.scale(scale);\n\n // Set page size based on size option or image dimensions\n const pageWidth = size ? mm2pt(size.width) : imgWidth;\n const pageHeight = size ? mm2pt(size.height) : imgHeight;\n page.setSize(pageWidth, pageHeight);\n\n // Convert margins from mm to points\n const [topMargin, rightMargin, bottomMargin, leftMargin] = margin.map(mm2pt);\n\n // Calculate available space for the image after applying margins\n const availableWidth = pageWidth - leftMargin - rightMargin;\n const availableHeight = pageHeight - topMargin - bottomMargin;\n\n // Calculate scaling to fit image within available space while maintaining aspect ratio\n const widthRatio = availableWidth / imgWidth;\n const heightRatio = availableHeight / imgHeight;\n const ratio = Math.min(widthRatio, heightRatio, 1); // Don't upscale images\n\n // Calculate final image dimensions and position\n const finalWidth = imgWidth * ratio;\n const finalHeight = imgHeight * ratio;\n const x = leftMargin + (availableWidth - finalWidth) / 2; // Center horizontally\n const y = bottomMargin + (availableHeight - finalHeight) / 2; // Center vertically\n\n page.drawImage(image, {\n x,\n y,\n width: finalWidth,\n height: finalHeight,\n });\n } catch (error) {\n throw new Error(`Failed to process image: ${(error as Error).message}`);\n }\n }\n const pdfUint8Array = await doc.save();\n // Create a new ArrayBuffer from the Uint8Array to ensure we return only ArrayBuffer\n const buffer = new ArrayBuffer(pdfUint8Array.byteLength);\n const view = new Uint8Array(buffer);\n view.set(pdfUint8Array);\n return buffer;\n } catch (error) {\n throw new Error(`[@pdfme/converter] img2pdf failed: ${(error as Error).message}`);\n }\n}\n"],"mappings":"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"}
package/dist/img2pdf.d.ts CHANGED
@@ -1,7 +1,5 @@
1
- import type { ImageType } from './types.js';
2
1
  interface Img2PdfOptions {
3
2
  scale?: number;
4
- imageType?: ImageType;
5
3
  size?: {
6
4
  height: number;
7
5
  width: number;
package/dist/index.js CHANGED
@@ -1,48 +1,72 @@
1
- import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-CTJv8er1.js";
2
- import * as pdfjsLib from "pdfjs-dist/legacy/build/pdf.mjs";
3
- //#region src/pdfjs-worker.js?worker&url
4
- var pdfjs_worker_default = "" + new URL("assets/pdfjs-worker-CxCIrMGa.js", import.meta.url).href;
1
+ import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-D4JvZkBO.js";
2
+ //#region src/clawpdf-worker.ts?worker&url
3
+ var clawpdf_worker_default = "" + new URL("assets/clawpdf-worker-BXU-6mDf.js", import.meta.url).href;
5
4
  //#endregion
6
5
  //#region src/index.browser.ts
7
- var clonePdfData = (pdf) => pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);
8
- var loadingTaskMap = /* @__PURE__ */ new WeakMap();
9
- var getDocument = async (pdf) => {
10
- if (typeof Worker !== "undefined" && pdfjsLib.GlobalWorkerOptions.workerSrc !== "" + new URL("assets/pdfjs-worker-CxCIrMGa.js", import.meta.url).href) pdfjsLib.GlobalWorkerOptions.workerSrc = pdfjs_worker_default;
11
- const loadingTask = pdfjsLib.getDocument({ data: clonePdfData(pdf) });
12
- const document = await loadingTask.promise;
13
- loadingTaskMap.set(document, { destroy: () => loadingTask.destroy() });
14
- return document;
6
+ var clonePdfData = (pdf) => new Uint8Array(pdf instanceof Uint8Array ? pdf : new Uint8Array(pdf));
7
+ var enginePromise;
8
+ var clawpdfPromise;
9
+ var worker;
10
+ var workerRequestId = 0;
11
+ var pendingWorkerRequests = /* @__PURE__ */ new Map();
12
+ var getEngine = () => {
13
+ enginePromise ?? (enginePromise = (async () => {
14
+ clawpdfPromise ?? (clawpdfPromise = import("clawpdf/browser"));
15
+ const { createEngine } = await clawpdfPromise;
16
+ return createEngine();
17
+ })());
18
+ return enginePromise;
15
19
  };
16
- var destroyDocument = async (document) => {
17
- const loadingTask = loadingTaskMap.get(document);
18
- loadingTaskMap.delete(document);
19
- await loadingTask?.destroy();
20
+ var openDocument = async (pdf) => (await getEngine()).open(clonePdfData(pdf));
21
+ var runInWorker = (type, pdf, options) => {
22
+ worker ?? (worker = createRenderWorker());
23
+ const id = ++workerRequestId;
24
+ const pdfBuffer = clonePdfData(pdf).buffer;
25
+ return new Promise((resolve, reject) => {
26
+ pendingWorkerRequests.set(id, {
27
+ resolve,
28
+ reject
29
+ });
30
+ worker?.postMessage({
31
+ id,
32
+ type,
33
+ pdf: pdfBuffer,
34
+ options
35
+ }, [pdfBuffer]);
36
+ });
20
37
  };
21
- function dataURLToArrayBuffer(dataURL) {
22
- const base64String = dataURL.split(",")[1];
23
- const byteString = atob(base64String);
24
- const arrayBuffer = new ArrayBuffer(byteString.length);
25
- const uintArray = new Uint8Array(arrayBuffer);
26
- for (let i = 0; i < byteString.length; i++) uintArray[i] = byteString.charCodeAt(i);
27
- return arrayBuffer;
28
- }
29
- var pdf2img = async (pdf, options = {}) => pdf2img$1(pdf, options, {
30
- getDocument,
31
- destroyDocument,
32
- createCanvas: (width, height) => {
33
- const canvas = document.createElement("canvas");
34
- canvas.width = width;
35
- canvas.height = height;
36
- return canvas;
37
- },
38
- canvasToArrayBuffer: (canvas, imageType) => {
39
- return dataURLToArrayBuffer(canvas.toDataURL(`image/${imageType}`));
40
- }
41
- });
42
- var pdf2size = async (pdf, options = {}) => pdf2size$1(pdf, options, {
43
- getDocument,
44
- destroyDocument
45
- });
38
+ var createRenderWorker = () => {
39
+ const nextWorker = new Worker(clawpdf_worker_default, { type: "module" });
40
+ nextWorker.addEventListener("message", (event) => {
41
+ const response = event.data;
42
+ const pending = pendingWorkerRequests.get(response.id);
43
+ if (!pending) return;
44
+ pendingWorkerRequests.delete(response.id);
45
+ if (response.ok) {
46
+ pending.resolve(response.result);
47
+ return;
48
+ }
49
+ const error = new Error(response.error.message);
50
+ error.name = response.error.name || error.name;
51
+ error.stack = response.error.stack;
52
+ pending.reject(error);
53
+ });
54
+ nextWorker.addEventListener("error", (event) => {
55
+ const error = new Error(event.message || "PDF render worker failed");
56
+ for (const pending of pendingWorkerRequests.values()) pending.reject(error);
57
+ pendingWorkerRequests.clear();
58
+ worker?.terminate();
59
+ worker = void 0;
60
+ });
61
+ return nextWorker;
62
+ };
63
+ var runPdf2imgDirect = (pdf, options = {}) => pdf2img$1(pdf, options, { openDocument });
64
+ var runPdf2sizeDirect = (pdf, options = {}) => pdf2size$1(pdf, options, { openDocument });
65
+ var pdf2img = async (pdf, options = {}) => {
66
+ if (typeof Worker === "undefined") return runPdf2imgDirect(pdf, options);
67
+ return runInWorker("pdf2img", pdf, options);
68
+ };
69
+ var pdf2size = async (pdf, options = {}) => typeof Worker === "undefined" ? runPdf2sizeDirect(pdf, options) : runInWorker("pdf2size", pdf, options);
46
70
  //#endregion
47
71
  export { img2pdf, pdf2img, pdf2size };
48
72
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.browser.ts"],"sourcesContent":["import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\nimport workerSrc from './pdfjs-worker.js?worker&url';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);\n\nconst loadingTaskMap = new WeakMap<object, { destroy: () => Promise<void> }>();\n\nconst getDocument = async (pdf: ArrayBuffer | Uint8Array) => {\n if (typeof Worker !== 'undefined' && pdfjsLib.GlobalWorkerOptions.workerSrc !== workerSrc) {\n pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc;\n }\n\n const loadingTask = pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n });\n const document = await loadingTask.promise;\n loadingTaskMap.set(document, { destroy: () => loadingTask.destroy() });\n return document;\n};\n\nconst destroyDocument = async (document: object) => {\n const loadingTask = loadingTaskMap.get(document);\n loadingTaskMap.delete(document);\n await loadingTask?.destroy();\n};\n\nfunction dataURLToArrayBuffer(dataURL: string): ArrayBuffer {\n // Split out the actual base64 string from the data URL scheme\n const base64String = dataURL.split(',')[1];\n\n // Decode the Base64 string to get the binary data\n const byteString = atob(base64String);\n\n // Create a typed array from the binary string\n const arrayBuffer = new ArrayBuffer(byteString.length);\n const uintArray = new Uint8Array(arrayBuffer);\n\n for (let i = 0; i < byteString.length; i++) {\n uintArray[i] = byteString.charCodeAt(i);\n }\n\n return arrayBuffer;\n}\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> =>\n _pdf2img(pdf, options, {\n getDocument,\n destroyDocument,\n createCanvas: (width, height) => {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n return canvas;\n },\n canvasToArrayBuffer: (canvas, imageType) => {\n // Using type assertion to handle the canvas method\n const dataUrl = (canvas as HTMLCanvasElement).toDataURL(`image/${imageType}`);\n return dataURLToArrayBuffer(dataUrl);\n },\n });\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) =>\n _pdf2size(pdf, options, {\n getDocument,\n destroyDocument,\n });\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;;;;AAKA,IAAM,gBAAgB,QACpB,eAAe,aAAa,IAAI,WAAW,GAAG,IAAI,IAAI,WAAW,GAAG;AAEtE,IAAM,iCAAiB,IAAI,QAAkD;AAE7E,IAAM,cAAc,OAAO,QAAkC;CAC3D,IAAI,OAAO,WAAW,eAAe,SAAS,oBAAoB,cAAA,KAAA,IAAA,IAAA,mCAAA,OAAA,KAAA,GAAA,EAAA,MAChE,SAAS,oBAAoB,YAAY;CAG3C,MAAM,cAAc,SAAS,YAAY,EACvC,MAAM,aAAa,GAAG,EACxB,CAAC;CACD,MAAM,WAAW,MAAM,YAAY;CACnC,eAAe,IAAI,UAAU,EAAE,eAAe,YAAY,QAAQ,EAAE,CAAC;CACrE,OAAO;AACT;AAEA,IAAM,kBAAkB,OAAO,aAAqB;CAClD,MAAM,cAAc,eAAe,IAAI,QAAQ;CAC/C,eAAe,OAAO,QAAQ;CAC9B,MAAM,aAAa,QAAQ;AAC7B;AAEA,SAAS,qBAAqB,SAA8B;CAE1D,MAAM,eAAe,QAAQ,MAAM,GAAG,EAAE;CAGxC,MAAM,aAAa,KAAK,YAAY;CAGpC,MAAM,cAAc,IAAI,YAAY,WAAW,MAAM;CACrD,MAAM,YAAY,IAAI,WAAW,WAAW;CAE5C,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,UAAU,KAAK,WAAW,WAAW,CAAC;CAGxC,OAAO;AACT;AAEA,IAAa,UAAU,OACrB,KACA,UAA0B,CAAC,MAE3B,UAAS,KAAK,SAAS;CACrB;CACA;CACA,eAAe,OAAO,WAAW;EAC/B,MAAM,SAAS,SAAS,cAAc,QAAQ;EAC9C,OAAO,QAAQ;EACf,OAAO,SAAS;EAChB,OAAO;CACT;CACA,sBAAsB,QAAQ,cAAc;EAG1C,OAAO,qBADU,OAA6B,UAAU,SAAS,WACrC,CAAO;CACrC;AACF,CAAC;AAEH,IAAa,WAAW,OAAO,KAA+B,UAA2B,CAAC,MACxF,WAAU,KAAK,SAAS;CACtB;CACA;AACF,CAAC"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.browser.ts"],"sourcesContent":["import type { PdfDocument, PdfEngine } from 'clawpdf/browser';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\nimport workerSrc from './clawpdf-worker.js?worker&url';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n new Uint8Array(pdf instanceof Uint8Array ? pdf : new Uint8Array(pdf));\n\ntype WorkerRequestType = 'pdf2img' | 'pdf2size';\n\ntype WorkerSuccessResponse<T> = {\n id: number;\n ok: true;\n result: T;\n};\n\ntype WorkerErrorResponse = {\n id: number;\n ok: false;\n error: {\n name?: string;\n message: string;\n stack?: string;\n };\n};\n\ntype PendingWorkerRequest = {\n resolve: (value: unknown) => void;\n reject: (reason?: unknown) => void;\n};\n\nlet enginePromise: Promise<PdfEngine> | undefined;\nlet clawpdfPromise: Promise<typeof import('clawpdf/browser')> | undefined;\nlet worker: Worker | undefined;\nlet workerRequestId = 0;\nconst pendingWorkerRequests = new Map<number, PendingWorkerRequest>();\n\nconst getEngine = () => {\n enginePromise ??= (async () => {\n clawpdfPromise ??= import('clawpdf/browser');\n const { createEngine } = await clawpdfPromise;\n return createEngine();\n })();\n return enginePromise;\n};\n\nconst openDocument = async (pdf: ArrayBuffer | Uint8Array): Promise<PdfDocument> =>\n (await getEngine()).open(clonePdfData(pdf));\n\nconst runInWorker = <T>(\n type: WorkerRequestType,\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions | Pdf2SizeOptions,\n): Promise<T> => {\n worker ??= createRenderWorker();\n\n const id = ++workerRequestId;\n const pdfData = clonePdfData(pdf);\n const pdfBuffer = pdfData.buffer as ArrayBuffer;\n\n return new Promise((resolve, reject) => {\n pendingWorkerRequests.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n });\n worker?.postMessage({ id, type, pdf: pdfBuffer, options }, [pdfBuffer]);\n });\n};\n\nconst createRenderWorker = () => {\n const nextWorker = new Worker(workerSrc, { type: 'module' });\n\n nextWorker.addEventListener(\n 'message',\n (\n event: MessageEvent<\n | WorkerSuccessResponse<ArrayBuffer[] | Awaited<ReturnType<typeof pdf2size>>>\n | WorkerErrorResponse\n >,\n ) => {\n const response = event.data;\n const pending = pendingWorkerRequests.get(response.id);\n if (!pending) return;\n\n pendingWorkerRequests.delete(response.id);\n if (response.ok) {\n pending.resolve(response.result);\n return;\n }\n\n const error = new Error(response.error.message);\n error.name = response.error.name || error.name;\n error.stack = response.error.stack;\n pending.reject(error);\n },\n );\n\n nextWorker.addEventListener('error', (event) => {\n const error = new Error(event.message || 'PDF render worker failed');\n for (const pending of pendingWorkerRequests.values()) {\n pending.reject(error);\n }\n pendingWorkerRequests.clear();\n worker?.terminate();\n worker = undefined;\n });\n\n return nextWorker;\n};\n\nconst runPdf2imgDirect = (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> =>\n _pdf2img(pdf, options, {\n openDocument,\n });\n\nconst runPdf2sizeDirect = (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) =>\n _pdf2size(pdf, options, {\n openDocument,\n });\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> => {\n if (typeof Worker === 'undefined') {\n return runPdf2imgDirect(pdf, options);\n }\n\n return runInWorker<ArrayBuffer[]>('pdf2img', pdf, options);\n};\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) =>\n typeof Worker === 'undefined'\n ? runPdf2sizeDirect(pdf, options)\n : runInWorker<Awaited<ReturnType<typeof runPdf2sizeDirect>>>('pdf2size', pdf, options);\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;;;AAKA,IAAM,gBAAgB,QACpB,IAAI,WAAW,eAAe,aAAa,MAAM,IAAI,WAAW,GAAG,CAAC;AAyBtE,IAAI;AACJ,IAAI;AACJ,IAAI;AACJ,IAAI,kBAAkB;AACtB,IAAM,wCAAwB,IAAI,IAAkC;AAEpE,IAAM,kBAAkB;CACtB,kBAAA,iBAAmB,YAAY;EAC7B,mBAAA,iBAAmB,OAAO;EAC1B,MAAM,EAAE,iBAAiB,MAAM;EAC/B,OAAO,aAAa;CACtB,GAAG;CACH,OAAO;AACT;AAEA,IAAM,eAAe,OAAO,SACzB,MAAM,UAAU,GAAG,KAAK,aAAa,GAAG,CAAC;AAE5C,IAAM,eACJ,MACA,KACA,YACe;CACf,WAAA,SAAW,mBAAmB;CAE9B,MAAM,KAAK,EAAE;CAEb,MAAM,YADU,aAAa,GACX,EAAQ;CAE1B,OAAO,IAAI,SAAS,SAAS,WAAW;EACtC,sBAAsB,IAAI,IAAI;GACnB;GACT;EACF,CAAC;EACD,QAAQ,YAAY;GAAE;GAAI;GAAM,KAAK;GAAW;EAAQ,GAAG,CAAC,SAAS,CAAC;CACxE,CAAC;AACH;AAEA,IAAM,2BAA2B;CAC/B,MAAM,aAAa,IAAI,OAAO,wBAAW,EAAE,MAAM,SAAS,CAAC;CAE3D,WAAW,iBACT,YAEE,UAIG;EACH,MAAM,WAAW,MAAM;EACvB,MAAM,UAAU,sBAAsB,IAAI,SAAS,EAAE;EACrD,IAAI,CAAC,SAAS;EAEd,sBAAsB,OAAO,SAAS,EAAE;EACxC,IAAI,SAAS,IAAI;GACf,QAAQ,QAAQ,SAAS,MAAM;GAC/B;EACF;EAEA,MAAM,QAAQ,IAAI,MAAM,SAAS,MAAM,OAAO;EAC9C,MAAM,OAAO,SAAS,MAAM,QAAQ,MAAM;EAC1C,MAAM,QAAQ,SAAS,MAAM;EAC7B,QAAQ,OAAO,KAAK;CACtB,CACF;CAEA,WAAW,iBAAiB,UAAU,UAAU;EAC9C,MAAM,QAAQ,IAAI,MAAM,MAAM,WAAW,0BAA0B;EACnE,KAAK,MAAM,WAAW,sBAAsB,OAAO,GACjD,QAAQ,OAAO,KAAK;EAEtB,sBAAsB,MAAM;EAC5B,QAAQ,UAAU;EAClB,SAAS,KAAA;CACX,CAAC;CAED,OAAO;AACT;AAEA,IAAM,oBACJ,KACA,UAA0B,CAAC,MAE3B,UAAS,KAAK,SAAS,EACrB,aACF,CAAC;AAEH,IAAM,qBAAqB,KAA+B,UAA2B,CAAC,MACpF,WAAU,KAAK,SAAS,EACtB,aACF,CAAC;AAEH,IAAa,UAAU,OACrB,KACA,UAA0B,CAAC,MACA;CAC3B,IAAI,OAAO,WAAW,aACpB,OAAO,iBAAiB,KAAK,OAAO;CAGtC,OAAO,YAA2B,WAAW,KAAK,OAAO;AAC3D;AAEA,IAAa,WAAW,OAAO,KAA+B,UAA2B,CAAC,MACxF,OAAO,WAAW,cACd,kBAAkB,KAAK,OAAO,IAC9B,YAA2D,YAAY,KAAK,OAAO"}
@@ -1,36 +1,18 @@
1
- import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-CTJv8er1.js";
2
- import * as pdfjsLib from "pdfjs-dist/legacy/build/pdf.mjs";
3
- import { createCanvas } from "@napi-rs/canvas";
4
- import { createRequire } from "node:module";
5
- import { dirname, join } from "node:path";
6
- //#region src/pdfjs.node.ts
7
- var pdfJsDistRoot = dirname(createRequire(import.meta.url).resolve("pdfjs-dist/package.json"));
8
- var getPdfJsWasmUrl = () => join(pdfJsDistRoot, "wasm/");
9
- //#endregion
1
+ import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-D4JvZkBO.js";
2
+ import { createEngine } from "clawpdf";
10
3
  //#region src/index.node.ts
11
- var clonePdfData = (pdf) => pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);
12
- var pdfJsWasmUrl = getPdfJsWasmUrl();
4
+ var clonePdfData = (pdf) => new Uint8Array(pdf instanceof Uint8Array ? pdf : new Uint8Array(pdf));
5
+ var enginePromise;
6
+ var getEngine = () => {
7
+ enginePromise ?? (enginePromise = createEngine());
8
+ return enginePromise;
9
+ };
10
+ var openDocument = async (pdf) => (await getEngine()).open(clonePdfData(pdf));
13
11
  var pdf2img = async (pdf, options = {}) => {
14
- return pdf2img$1(pdf, options, {
15
- getDocument: (pdf) => pdfjsLib.getDocument({
16
- data: clonePdfData(pdf),
17
- wasmUrl: pdfJsWasmUrl
18
- }).promise,
19
- createCanvas: (width, height) => createCanvas(width, height),
20
- canvasToArrayBuffer: (canvas, imageType) => {
21
- const nodeCanvas = canvas;
22
- const buffer = imageType === "png" ? nodeCanvas.toBuffer("image/png") : nodeCanvas.toBuffer("image/jpeg");
23
- const arrayBuffer = new ArrayBuffer(buffer.byteLength);
24
- new Uint8Array(arrayBuffer).set(buffer);
25
- return arrayBuffer;
26
- }
27
- });
12
+ return pdf2img$1(pdf, options, { openDocument });
28
13
  };
29
14
  var pdf2size = async (pdf, options = {}) => {
30
- return pdf2size$1(pdf, options, { getDocument: (pdf) => pdfjsLib.getDocument({
31
- data: clonePdfData(pdf),
32
- wasmUrl: pdfJsWasmUrl
33
- }).promise });
15
+ return pdf2size$1(pdf, options, { openDocument });
34
16
  };
35
17
  //#endregion
36
18
  export { img2pdf, pdf2img, pdf2size };
@@ -1 +1 @@
1
- {"version":3,"file":"index.node.js","names":[],"sources":["../src/pdfjs.node.ts","../src/index.node.ts"],"sourcesContent":["import { createRequire } from 'node:module';\nimport { dirname, join } from 'node:path';\n\nconst require = createRequire(import.meta.url);\nconst pdfJsDistRoot = dirname(require.resolve('pdfjs-dist/package.json'));\n\nexport const getPdfJsWasmUrl = (): string => join(pdfJsDistRoot, 'wasm/');\n","import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';\nimport { Canvas, createCanvas } from '@napi-rs/canvas';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\nimport { getPdfJsWasmUrl } from './pdfjs.node.js';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n pdf instanceof Uint8Array ? new Uint8Array(pdf) : new Uint8Array(pdf);\nconst pdfJsWasmUrl = getPdfJsWasmUrl();\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> => {\n return _pdf2img(pdf, options, {\n getDocument: (pdf) =>\n pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n wasmUrl: pdfJsWasmUrl,\n }).promise,\n createCanvas: (width, height) => createCanvas(width, height) as unknown as HTMLCanvasElement,\n canvasToArrayBuffer: (canvas, imageType) => {\n const nodeCanvas = canvas as unknown as Canvas;\n const buffer =\n imageType === 'png' ? nodeCanvas.toBuffer('image/png') : nodeCanvas.toBuffer('image/jpeg');\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n new Uint8Array(arrayBuffer).set(buffer);\n return arrayBuffer;\n },\n });\n};\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) => {\n return _pdf2size(pdf, options, {\n getDocument: (pdf) =>\n pdfjsLib.getDocument({\n data: clonePdfData(pdf),\n wasmUrl: pdfJsWasmUrl,\n }).promise,\n });\n};\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;;;;AAIA,IAAM,gBAAgB,QADN,cAAc,OAAO,KAAK,GACZ,EAAQ,QAAQ,yBAAyB,CAAC;AAExE,IAAa,wBAAgC,KAAK,eAAe,OAAO;;;ACAxE,IAAM,gBAAgB,QACpB,eAAe,aAAa,IAAI,WAAW,GAAG,IAAI,IAAI,WAAW,GAAG;AACtE,IAAM,eAAe,gBAAgB;AAErC,IAAa,UAAU,OACrB,KACA,UAA0B,CAAC,MACA;CAC3B,OAAO,UAAS,KAAK,SAAS;EAC5B,cAAc,QACZ,SAAS,YAAY;GACnB,MAAM,aAAa,GAAG;GACtB,SAAS;EACX,CAAC,EAAE;EACL,eAAe,OAAO,WAAW,aAAa,OAAO,MAAM;EAC3D,sBAAsB,QAAQ,cAAc;GAC1C,MAAM,aAAa;GACnB,MAAM,SACJ,cAAc,QAAQ,WAAW,SAAS,WAAW,IAAI,WAAW,SAAS,YAAY;GAC3F,MAAM,cAAc,IAAI,YAAY,OAAO,UAAU;GACrD,IAAI,WAAW,WAAW,EAAE,IAAI,MAAM;GACtC,OAAO;EACT;CACF,CAAC;AACH;AAEA,IAAa,WAAW,OAAO,KAA+B,UAA2B,CAAC,MAAM;CAC9F,OAAO,WAAU,KAAK,SAAS,EAC7B,cAAc,QACZ,SAAS,YAAY;EACnB,MAAM,aAAa,GAAG;EACtB,SAAS;CACX,CAAC,EAAE,QACP,CAAC;AACH"}
1
+ {"version":3,"file":"index.node.js","names":[],"sources":["../src/index.node.ts"],"sourcesContent":["import { createEngine, type PdfDocument, type PdfEngine } from 'clawpdf';\nimport { pdf2img as _pdf2img, Pdf2ImgOptions } from './pdf2img.js';\nimport { pdf2size as _pdf2size, Pdf2SizeOptions } from './pdf2size.js';\n\nconst clonePdfData = (pdf: ArrayBuffer | Uint8Array) =>\n new Uint8Array(pdf instanceof Uint8Array ? pdf : new Uint8Array(pdf));\n\nlet enginePromise: Promise<PdfEngine> | undefined;\n\nconst getEngine = () => {\n enginePromise ??= createEngine();\n return enginePromise;\n};\n\nconst openDocument = async (pdf: ArrayBuffer | Uint8Array): Promise<PdfDocument> =>\n (await getEngine()).open(clonePdfData(pdf));\n\nexport const pdf2img = async (\n pdf: ArrayBuffer | Uint8Array,\n options: Pdf2ImgOptions = {},\n): Promise<ArrayBuffer[]> => {\n return _pdf2img(pdf, options, {\n openDocument,\n });\n};\n\nexport const pdf2size = async (pdf: ArrayBuffer | Uint8Array, options: Pdf2SizeOptions = {}) => {\n return _pdf2size(pdf, options, {\n openDocument,\n });\n};\n\nexport { img2pdf } from './img2pdf.js';\n"],"mappings":";;;AAIA,IAAM,gBAAgB,QACpB,IAAI,WAAW,eAAe,aAAa,MAAM,IAAI,WAAW,GAAG,CAAC;AAEtE,IAAI;AAEJ,IAAM,kBAAkB;CACtB,kBAAA,gBAAkB,aAAa;CAC/B,OAAO;AACT;AAEA,IAAM,eAAe,OAAO,SACzB,MAAM,UAAU,GAAG,KAAK,aAAa,GAAG,CAAC;AAE5C,IAAa,UAAU,OACrB,KACA,UAA0B,CAAC,MACA;CAC3B,OAAO,UAAS,KAAK,SAAS,EAC5B,aACF,CAAC;AACH;AAEA,IAAa,WAAW,OAAO,KAA+B,UAA2B,CAAC,MAAM;CAC9F,OAAO,WAAU,KAAK,SAAS,EAC7B,aACF,CAAC;AACH"}
package/dist/pdf2img.d.ts CHANGED
@@ -1,14 +1,19 @@
1
- import type { PDFDocumentProxy } from 'pdfjs-dist';
2
- import type { ImageType } from './types.js';
3
1
  interface Environment {
4
- getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;
5
- destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;
6
- createCanvas: (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas;
7
- canvasToArrayBuffer: (canvas: HTMLCanvasElement | OffscreenCanvas, imageType: ImageType) => ArrayBuffer;
2
+ openDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PdfDocument>;
3
+ }
4
+ interface PdfDocument {
5
+ readonly pageCount: number;
6
+ page: (pageNumber: number) => PdfPage;
7
+ destroy?: () => Promise<void> | void;
8
+ }
9
+ interface PdfPage {
10
+ png: (options?: {
11
+ scale?: number;
12
+ forms?: boolean;
13
+ }) => Promise<Uint8Array>;
8
14
  }
9
15
  export interface Pdf2ImgOptions {
10
16
  scale?: number;
11
- imageType?: ImageType;
12
17
  range?: {
13
18
  start?: number;
14
19
  end?: number;
@@ -1,8 +1,15 @@
1
- import type { PDFDocumentProxy } from 'pdfjs-dist';
2
1
  import { Size } from '@pdfme/common';
3
2
  interface Environment {
4
- getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;
5
- destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;
3
+ openDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PdfDocument>;
4
+ }
5
+ interface PdfDocument {
6
+ readonly pageCount: number;
7
+ page: (pageNumber: number) => PdfPage;
8
+ destroy?: () => Promise<void> | void;
9
+ }
10
+ interface PdfPage {
11
+ readonly width: number;
12
+ readonly height: number;
6
13
  }
7
14
  export interface Pdf2SizeOptions {
8
15
  scale?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/converter",
3
- "version": "6.1.5",
3
+ "version": "6.1.7-dev.1",
4
4
  "description": "TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!",
5
5
  "keywords": [
6
6
  "pdf",
@@ -55,10 +55,9 @@
55
55
  "test": "vitest run --config ../../vitest.config.ts"
56
56
  },
57
57
  "dependencies": {
58
- "@napi-rs/canvas": "^0.1.100",
59
58
  "@pdfme/common": "*",
60
59
  "@pdfme/pdf-lib": "*",
61
- "pdfjs-dist": "^5.7.284",
60
+ "clawpdf": "^0.3.0",
62
61
  "remark-gfm": "^4.0.1",
63
62
  "remark-parse": "^11.0.0",
64
63
  "unified": "^11.0.5"
@@ -67,5 +66,8 @@
67
66
  "@pdfme/generator": "*",
68
67
  "@pdfme/schemas": "*",
69
68
  "@types/mdast": "^4.0.4"
69
+ },
70
+ "engines": {
71
+ "node": ">=20"
70
72
  }
71
73
  }