unpdf 1.1.0 → 1.2.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.
Files changed (47) hide show
  1. package/README.md +48 -5
  2. package/dist/index.cjs +4 -0
  3. package/dist/index.d.cts +9 -0
  4. package/dist/index.d.mts +9 -0
  5. package/dist/index.d.ts +9 -0
  6. package/dist/index.mjs +4 -0
  7. package/dist/pdfjs.mjs +1 -1
  8. package/dist/types/src/display/annotation_layer.d.ts +5 -2
  9. package/dist/types/src/display/api.d.ts +30 -74
  10. package/dist/types/src/display/api_utils.d.ts +13 -0
  11. package/dist/types/src/display/canvas.d.ts +2 -2
  12. package/dist/types/src/display/display_utils.d.ts +2 -1
  13. package/dist/types/src/display/draw_layer.d.ts +2 -2
  14. package/dist/types/src/display/editor/alt_text.d.ts +1 -1
  15. package/dist/types/src/display/editor/annotation_editor_layer.d.ts +6 -6
  16. package/dist/types/src/display/editor/color_picker.d.ts +20 -1
  17. package/dist/types/src/display/editor/comment.d.ts +32 -0
  18. package/dist/types/src/display/editor/draw.d.ts +8 -8
  19. package/dist/types/src/display/editor/drawers/freedraw.d.ts +3 -3
  20. package/dist/types/src/display/editor/drawers/signaturedraw.d.ts +13 -13
  21. package/dist/types/src/display/editor/editor.d.ts +48 -5
  22. package/dist/types/src/display/editor/freetext.d.ts +9 -7
  23. package/dist/types/src/display/editor/highlight.d.ts +6 -3
  24. package/dist/types/src/display/editor/ink.d.ts +4 -0
  25. package/dist/types/src/display/editor/signature.d.ts +2 -0
  26. package/dist/types/src/display/editor/stamp.d.ts +2 -0
  27. package/dist/types/src/display/editor/toolbar.d.ts +3 -0
  28. package/dist/types/src/display/editor/tools.d.ts +14 -3
  29. package/dist/types/src/display/pdf_objects.d.ts +40 -0
  30. package/dist/types/src/display/text_layer.d.ts +9 -9
  31. package/dist/types/src/display/worker_options.d.ts +2 -2
  32. package/dist/types/src/pdf.d.ts +3 -2
  33. package/dist/types/src/shared/scripting_utils.d.ts +2 -0
  34. package/dist/types/src/shared/util.d.ts +2 -2
  35. package/dist/types/web/app_options.d.ts +1 -1
  36. package/dist/types/web/autolinker.d.ts +2 -2
  37. package/dist/types/web/base_pdf_page_view.d.ts +0 -1
  38. package/dist/types/web/event_utils.d.ts +1 -1
  39. package/dist/types/web/genericl10n.d.ts +5 -5
  40. package/dist/types/web/l10n.d.ts +2 -2
  41. package/dist/types/web/pdf_find_controller.d.ts +1 -1
  42. package/dist/types/web/pdf_page_view.d.ts +9 -7
  43. package/dist/types/web/pdf_thumbnail_view.d.ts +2 -10
  44. package/dist/types/web/pdf_viewer.d.ts +42 -1
  45. package/dist/types/web/text_accessibility.d.ts +1 -1
  46. package/dist/types/web/text_layer_builder.d.ts +4 -4
  47. package/package.json +11 -11
package/README.md CHANGED
@@ -18,7 +18,7 @@ This library is also intended as a modern alternative to the unmaintained but st
18
18
  ## PDF.js Compatibility
19
19
 
20
20
  > [!Tip]
21
- > The serverless PDF.js bundle provided by `unpdf` is built from PDF.js v5.2.133.
21
+ > The serverless PDF.js bundle provided by `unpdf` is built from PDF.js v5.4.54.
22
22
 
23
23
  You can use an [official PDF.js build](#official-or-legacy-pdfjs-build) by using the [`definePDFJSModule`](#definepdfjsmodule) method. This is useful if you want to use a specific version or a custom build of PDF.js.
24
24
 
@@ -273,7 +273,7 @@ extractPdfImages().catch(console.error)
273
273
 
274
274
  ### `renderPageAsImage`
275
275
 
276
- To render a PDF page as an image, you can use the `renderPageAsImage` method. This method will return an `ArrayBuffer` of the rendered image.
276
+ To render a PDF page as an image, you can use the `renderPageAsImage` method. This method will return an `ArrayBuffer` of the rendered image. It can also return a data URL (`string`) if `toDataURL` option is set to `true`.
277
277
 
278
278
  > [!NOTE]
279
279
  > This method will only work in Node.js and browser environments.
@@ -286,8 +286,8 @@ In order to use this method, make sure to meet the following requirements:
286
286
  **Type Declaration**
287
287
 
288
288
  ```ts
289
- declare function renderPageAsImage(
290
- data: DocumentInitParameters['data'],
289
+ function renderPageAsImage(
290
+ data: DocumentInitParameters['data'] | PDFDocumentProxy,
291
291
  pageNumber: number,
292
292
  options?: {
293
293
  canvasImport?: () => Promise<typeof import('@napi-rs/canvas')>
@@ -295,11 +295,24 @@ declare function renderPageAsImage(
295
295
  scale?: number
296
296
  width?: number
297
297
  height?: number
298
+ toDataURL?: false
298
299
  },
299
300
  ): Promise<ArrayBuffer>
301
+ function renderPageAsImage(
302
+ data: DocumentInitParameters['data'] | PDFDocumentProxy,
303
+ pageNumber: number,
304
+ options: {
305
+ canvasImport?: () => Promise<typeof import('@napi-rs/canvas')>
306
+ /** @default 1.0 */
307
+ scale?: number
308
+ width?: number
309
+ height?: number
310
+ toDataURL: true
311
+ },
312
+ ): Promise<string>
300
313
  ```
301
314
 
302
- **Example**
315
+ **Examples**
303
316
 
304
317
  ```ts
305
318
  import { definePDFJSModule, renderPageAsImage } from 'unpdf'
@@ -318,6 +331,36 @@ const result = await renderPageAsImage(buffer, pageNumber, {
318
331
  await writeFile('dummy-page-1.png', new Uint8Array(result))
319
332
  ```
320
333
 
334
+ ```ts
335
+ import { definePDFJSModule, renderPageAsImage } from 'unpdf'
336
+
337
+ await definePDFJSModule(() => import('pdfjs-dist'))
338
+
339
+ const pdf = await readFile('./dummy.pdf')
340
+ const buffer = new Uint8Array(pdf)
341
+ const pageNumber = 1
342
+
343
+ const result = await renderPageAsImage(buffer, pageNumber, {
344
+ canvasImport: () => import('@napi-rs/canvas'),
345
+ scale: 2,
346
+ toDataURL: true,
347
+ })
348
+
349
+ const html = `<!DOCTYPE html>
350
+ <html lang="en">
351
+ <head>
352
+ <meta charset="UTF-8">
353
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
354
+ <title>Dummy Page</title>
355
+ </head>
356
+ <body>
357
+ <img alt="Example Page" src="${result}">
358
+ </body>
359
+ </html>`
360
+
361
+ await writeFile('dummy-page-1.html', html)
362
+ ```
363
+
321
364
  ## License
322
365
 
323
366
  [MIT](./LICENSE) License © 2023-PRESENT [Johann Schopplich](https://github.com/johannschopplich)
package/dist/index.cjs CHANGED
@@ -182,10 +182,14 @@ async function renderPageAsImage$1(data, pageNumber, options = {}) {
182
182
  const viewport = page.getViewport({ scale: Math.max(0, scale) });
183
183
  const drawingContext = new CanvasFactory().create(viewport.width, viewport.height);
184
184
  await page.render({
185
+ canvas: drawingContext.canvas,
185
186
  canvasContext: drawingContext.context,
186
187
  viewport
187
188
  }).promise;
188
189
  const dataUrl = drawingContext.canvas.toDataURL();
190
+ if (options.toDataURL) {
191
+ return dataUrl;
192
+ }
189
193
  const response = await fetch(dataUrl);
190
194
  return await response.arrayBuffer();
191
195
  }
package/dist/index.d.cts CHANGED
@@ -32,7 +32,16 @@ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFD
32
32
  scale?: number;
33
33
  width?: number;
34
34
  height?: number;
35
+ toDataURL?: false;
35
36
  }): Promise<ArrayBuffer>;
37
+ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options: {
38
+ canvasImport?: () => Promise<typeof _napi_rs_canvas>;
39
+ /** @default 1.0 */
40
+ scale?: number;
41
+ width?: number;
42
+ height?: number;
43
+ toDataURL: true;
44
+ }): Promise<string>;
36
45
 
37
46
  declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
38
47
  totalPages: number;
package/dist/index.d.mts CHANGED
@@ -32,7 +32,16 @@ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFD
32
32
  scale?: number;
33
33
  width?: number;
34
34
  height?: number;
35
+ toDataURL?: false;
35
36
  }): Promise<ArrayBuffer>;
37
+ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options: {
38
+ canvasImport?: () => Promise<typeof _napi_rs_canvas>;
39
+ /** @default 1.0 */
40
+ scale?: number;
41
+ width?: number;
42
+ height?: number;
43
+ toDataURL: true;
44
+ }): Promise<string>;
36
45
 
37
46
  declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
38
47
  totalPages: number;
package/dist/index.d.ts CHANGED
@@ -32,7 +32,16 @@ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFD
32
32
  scale?: number;
33
33
  width?: number;
34
34
  height?: number;
35
+ toDataURL?: false;
35
36
  }): Promise<ArrayBuffer>;
37
+ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options: {
38
+ canvasImport?: () => Promise<typeof _napi_rs_canvas>;
39
+ /** @default 1.0 */
40
+ scale?: number;
41
+ width?: number;
42
+ height?: number;
43
+ toDataURL: true;
44
+ }): Promise<string>;
36
45
 
37
46
  declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
38
47
  totalPages: number;
package/dist/index.mjs CHANGED
@@ -180,10 +180,14 @@ async function renderPageAsImage$1(data, pageNumber, options = {}) {
180
180
  const viewport = page.getViewport({ scale: Math.max(0, scale) });
181
181
  const drawingContext = new CanvasFactory().create(viewport.width, viewport.height);
182
182
  await page.render({
183
+ canvas: drawingContext.canvas,
183
184
  canvasContext: drawingContext.context,
184
185
  viewport
185
186
  }).promise;
186
187
  const dataUrl = drawingContext.canvas.toDataURL();
188
+ if (options.toDataURL) {
189
+ return dataUrl;
190
+ }
187
191
  const response = await fetch(dataUrl);
188
192
  return await response.arrayBuffer();
189
193
  }