@pdfme/converter 6.1.5-dev.17 → 6.1.5-dev.19

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.
@@ -3,7 +3,7 @@ import { PDFDocument } from "@pdfme/pdf-lib";
3
3
  //#region src/pdf2img.ts
4
4
  async function pdf2img(pdf, options = {}, env) {
5
5
  try {
6
- const { scale = 1, imageType = "jpeg", range = {}, maxCanvasPixels } = options;
6
+ const { scale = 1, imageType = "jpeg", range = {} } = options;
7
7
  const { start = 0, end = Infinity } = range;
8
8
  const { getDocument, destroyDocument, createCanvas, canvasToArrayBuffer } = env;
9
9
  const pdfDoc = await getDocument(pdf);
@@ -14,13 +14,7 @@ async function pdf2img(pdf, options = {}, env) {
14
14
  const results = [];
15
15
  for (let pageNum = startPage; pageNum <= endPage; pageNum++) {
16
16
  const page = await pdfDoc.getPage(pageNum);
17
- let renderScale = scale;
18
- if (maxCanvasPixels && maxCanvasPixels > 0) {
19
- const baseViewport = page.getViewport({ scale: 1 });
20
- const baseArea = baseViewport.width * baseViewport.height;
21
- if (baseArea > 0) renderScale = Math.min(scale, Math.sqrt(maxCanvasPixels / baseArea));
22
- }
23
- const viewport = page.getViewport({ scale: renderScale });
17
+ const viewport = page.getViewport({ scale });
24
18
  const canvas = createCanvas(viewport.width, viewport.height);
25
19
  if (!canvas) throw new Error("Failed to create canvas");
26
20
  const context = canvas.getContext("2d");
@@ -127,4 +121,4 @@ async function img2pdf(imgs, options = {}) {
127
121
  //#endregion
128
122
  export { pdf2size as n, pdf2img as r, img2pdf as t };
129
123
 
130
- //# sourceMappingURL=img2pdf-BWYwe2Xi.js.map
124
+ //# sourceMappingURL=img2pdf-CTJv8er1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"img2pdf-CTJv8er1.js","names":[],"sources":["../src/pdf2img.ts","../src/pdf2size.ts","../src/img2pdf.ts"],"sourcesContent":["import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport type { ImageType } from './types.js';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\n createCanvas: (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas;\n canvasToArrayBuffer: (\n canvas: HTMLCanvasElement | OffscreenCanvas,\n imageType: ImageType,\n ) => ArrayBuffer;\n}\n\nexport interface Pdf2ImgOptions {\n scale?: number;\n imageType?: ImageType;\n range?: {\n start?: number;\n end?: number;\n };\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, imageType = 'jpeg', range = {} } = options;\n const { start = 0, end = Infinity } = range;\n\n const { getDocument, destroyDocument, createCanvas, canvasToArrayBuffer } = env;\n\n const pdfDoc = await getDocument(pdf);\n try {\n const numPages = pdfDoc.numPages;\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 page = await pdfDoc.getPage(pageNum);\n const viewport = page.getViewport({ scale });\n\n const canvas = createCanvas(viewport.width, viewport.height);\n if (!canvas) {\n throw new Error('Failed to create canvas');\n }\n\n const context = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (!context) {\n throw new Error('Failed to get canvas context');\n }\n\n await page.render({\n canvas: canvas as unknown as HTMLCanvasElement,\n canvasContext: context,\n viewport,\n }).promise;\n const arrayBuffer = canvasToArrayBuffer(canvas, imageType);\n results.push(arrayBuffer);\n }\n\n return results;\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n } catch (error) {\n throw new Error(`[@pdfme/converter] pdf2img failed: ${(error as Error).message}`);\n }\n}\n","import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport { Size, pt2mm } from '@pdfme/common';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\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 { getDocument, destroyDocument } = env;\n const pdfDoc = await getDocument(pdf);\n\n try {\n return await Promise.all(\n Array.from({ length: pdfDoc.numPages }, async (_, i) => {\n return await pdfDoc.getPage(i + 1).then((page) => {\n const { height, width } = page.getViewport({ scale, rotation: 0 });\n\n return { height: pt2mm(height), width: pt2mm(width) };\n });\n }),\n );\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n}\n","import { PDFDocument } from '@pdfme/pdf-lib';\nimport { mm2pt } from '@pdfme/common';\nimport type { ImageType } from './types.js';\n\ninterface Img2PdfOptions {\n scale?: number;\n imageType?: ImageType;\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/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-BWYwe2Xi.js";
1
+ import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-CTJv8er1.js";
2
2
  import * as pdfjsLib from "pdfjs-dist/legacy/build/pdf.mjs";
3
3
  //#region src/pdfjs-worker.js?worker&url
4
4
  var pdfjs_worker_default = "" + new URL("assets/pdfjs-worker-Vdj5Aq5w.js", import.meta.url).href;
@@ -1,4 +1,4 @@
1
- import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-BWYwe2Xi.js";
1
+ import { n as pdf2size$1, r as pdf2img$1, t as img2pdf } from "./img2pdf-CTJv8er1.js";
2
2
  import * as pdfjsLib from "pdfjs-dist/legacy/build/pdf.mjs";
3
3
  import { createCanvas } from "@napi-rs/canvas";
4
4
  import { createRequire } from "node:module";
package/dist/pdf2img.d.ts CHANGED
@@ -13,14 +13,6 @@ export interface Pdf2ImgOptions {
13
13
  start?: number;
14
14
  end?: number;
15
15
  };
16
- /**
17
- * Upper bound for the rendered canvas area (width * height) per page.
18
- * When rendering at `scale` would exceed this limit, the scale is reduced
19
- * so the canvas stays within it. Useful to avoid exceeding browser canvas
20
- * size limits and memory crashes on mobile devices (e.g. iOS Safari caps
21
- * canvases around 16.7M pixels).
22
- */
23
- maxCanvasPixels?: number;
24
16
  }
25
17
  export declare function pdf2img(pdf: ArrayBuffer | Uint8Array, options: Pdf2ImgOptions | undefined, env: Environment): Promise<ArrayBuffer[]>;
26
18
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pdfme/converter",
3
- "version": "6.1.5-dev.17",
3
+ "version": "6.1.5-dev.19",
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",
@@ -1 +0,0 @@
1
- {"version":3,"file":"img2pdf-BWYwe2Xi.js","names":[],"sources":["../src/pdf2img.ts","../src/pdf2size.ts","../src/img2pdf.ts"],"sourcesContent":["import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport type { ImageType } from './types.js';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\n createCanvas: (width: number, height: number) => HTMLCanvasElement | OffscreenCanvas;\n canvasToArrayBuffer: (\n canvas: HTMLCanvasElement | OffscreenCanvas,\n imageType: ImageType,\n ) => ArrayBuffer;\n}\n\nexport interface Pdf2ImgOptions {\n scale?: number;\n imageType?: ImageType;\n range?: {\n start?: number;\n end?: number;\n };\n /**\n * Upper bound for the rendered canvas area (width * height) per page.\n * When rendering at `scale` would exceed this limit, the scale is reduced\n * so the canvas stays within it. Useful to avoid exceeding browser canvas\n * size limits and memory crashes on mobile devices (e.g. iOS Safari caps\n * canvases around 16.7M pixels).\n */\n maxCanvasPixels?: number;\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, imageType = 'jpeg', range = {}, maxCanvasPixels } = options;\n const { start = 0, end = Infinity } = range;\n\n const { getDocument, destroyDocument, createCanvas, canvasToArrayBuffer } = env;\n\n const pdfDoc = await getDocument(pdf);\n try {\n const numPages = pdfDoc.numPages;\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 page = await pdfDoc.getPage(pageNum);\n let renderScale = scale;\n if (maxCanvasPixels && maxCanvasPixels > 0) {\n const baseViewport = page.getViewport({ scale: 1 });\n const baseArea = baseViewport.width * baseViewport.height;\n if (baseArea > 0) {\n renderScale = Math.min(scale, Math.sqrt(maxCanvasPixels / baseArea));\n }\n }\n const viewport = page.getViewport({ scale: renderScale });\n\n const canvas = createCanvas(viewport.width, viewport.height);\n if (!canvas) {\n throw new Error('Failed to create canvas');\n }\n\n const context = canvas.getContext('2d') as CanvasRenderingContext2D;\n if (!context) {\n throw new Error('Failed to get canvas context');\n }\n\n await page.render({\n canvas: canvas as unknown as HTMLCanvasElement,\n canvasContext: context,\n viewport,\n }).promise;\n const arrayBuffer = canvasToArrayBuffer(canvas, imageType);\n results.push(arrayBuffer);\n }\n\n return results;\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n } catch (error) {\n throw new Error(`[@pdfme/converter] pdf2img failed: ${(error as Error).message}`);\n }\n}\n","import type { PDFDocumentProxy } from 'pdfjs-dist';\nimport { Size, pt2mm } from '@pdfme/common';\n\ninterface Environment {\n getDocument: (pdf: ArrayBuffer | Uint8Array) => Promise<PDFDocumentProxy>;\n destroyDocument?: (pdfDoc: PDFDocumentProxy) => Promise<void>;\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 { getDocument, destroyDocument } = env;\n const pdfDoc = await getDocument(pdf);\n\n try {\n return await Promise.all(\n Array.from({ length: pdfDoc.numPages }, async (_, i) => {\n return await pdfDoc.getPage(i + 1).then((page) => {\n const { height, width } = page.getViewport({ scale, rotation: 0 });\n\n return { height: pt2mm(height), width: pt2mm(width) };\n });\n }),\n );\n } finally {\n await destroyDocument?.(pdfDoc);\n }\n}\n","import { PDFDocument } from '@pdfme/pdf-lib';\nimport { mm2pt } from '@pdfme/common';\nimport type { ImageType } from './types.js';\n\ninterface Img2PdfOptions {\n scale?: number;\n imageType?: ImageType;\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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"}