unpdf 0.12.2 → 1.0.0
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.
- package/README.md +147 -79
- package/dist/index.cjs +118 -73
- package/dist/index.d.cts +24 -41
- package/dist/index.d.mts +24 -41
- package/dist/index.d.ts +24 -41
- package/dist/index.mjs +117 -72
- package/dist/pdfjs.mjs +1 -1
- package/dist/types/src/display/annotation_layer.d.ts +25 -1
- package/dist/types/src/display/annotation_storage.d.ts +1 -8
- package/dist/types/src/display/api.d.ts +147 -57
- package/dist/types/src/display/canvas.d.ts +21 -28
- package/dist/types/src/display/canvas_factory.d.ts +27 -0
- package/dist/types/src/display/cmap_reader_factory.d.ts +25 -0
- package/dist/types/src/display/display_utils.d.ts +40 -60
- package/dist/types/src/display/draw_layer.d.ts +7 -19
- package/dist/types/src/display/editor/alt_text.d.ts +3 -2
- package/dist/types/src/display/editor/annotation_editor_layer.d.ts +16 -11
- package/dist/types/src/display/editor/color_picker.d.ts +1 -0
- package/dist/types/src/display/editor/draw.d.ts +121 -0
- package/dist/types/src/display/editor/drawers/contour.d.ts +3 -0
- package/dist/types/src/display/editor/drawers/freedraw.d.ts +31 -0
- package/dist/types/src/display/editor/drawers/highlight.d.ts +36 -0
- package/dist/types/src/display/editor/drawers/inkdraw.d.ts +129 -0
- package/dist/types/src/display/editor/drawers/outline.d.ts +19 -0
- package/dist/types/src/display/editor/drawers/signaturedraw.d.ts +79 -0
- package/dist/types/src/display/editor/editor.d.ts +55 -13
- package/dist/types/src/display/editor/freetext.d.ts +5 -16
- package/dist/types/src/display/editor/highlight.d.ts +8 -25
- package/dist/types/src/display/editor/ink.d.ts +21 -74
- package/dist/types/src/display/editor/signature.d.ts +80 -0
- package/dist/types/src/display/editor/stamp.d.ts +16 -22
- package/dist/types/src/display/editor/toolbar.d.ts +5 -2
- package/dist/types/src/display/editor/tools.d.ts +17 -9
- package/dist/types/src/display/fetch_stream.d.ts +6 -13
- package/dist/types/src/display/filter_factory.d.ts +29 -0
- package/dist/types/src/display/font_loader.d.ts +3 -6
- package/dist/types/src/display/metadata.d.ts +1 -2
- package/dist/types/src/display/network.d.ts +11 -7
- package/dist/types/src/display/network_utils.d.ts +7 -6
- package/dist/types/src/display/node_stream.d.ts +6 -22
- package/dist/types/src/display/node_utils.d.ts +15 -11
- package/dist/types/src/display/optional_content_config.d.ts +2 -2
- package/dist/types/src/display/pattern_helper.d.ts +4 -2
- package/dist/types/src/display/standard_fontdata_factory.d.ts +20 -0
- package/dist/types/src/display/svg_factory.d.ts +14 -0
- package/dist/types/src/display/text_layer.d.ts +12 -9
- package/dist/types/src/display/touch_manager.d.ts +18 -0
- package/dist/types/src/display/transport_stream.d.ts +1 -1
- package/dist/types/src/display/wasm_factory.d.ts +20 -0
- package/dist/types/src/display/worker_options.d.ts +2 -2
- package/dist/types/src/interfaces.d.ts +4 -0
- package/dist/types/src/pdf.d.ts +13 -5
- package/dist/types/src/shared/message_handler.d.ts +9 -4
- package/dist/types/src/shared/util.d.ts +137 -129
- package/dist/types/web/annotation_editor_layer_builder.d.ts +20 -5
- package/dist/types/web/annotation_layer_builder.d.ts +35 -4
- package/dist/types/web/app_options.d.ts +1 -1
- package/dist/types/web/autolinker.d.ts +28 -0
- package/dist/types/web/base_pdf_page_view.d.ts +27 -0
- package/dist/types/web/draw_layer_builder.d.ts +13 -2
- package/dist/types/web/event_utils.d.ts +2 -2
- package/dist/types/web/genericl10n.d.ts +5 -5
- package/dist/types/web/interfaces.d.ts +5 -5
- package/dist/types/web/l10n.d.ts +2 -2
- package/dist/types/web/pdf_find_controller.d.ts +2 -0
- package/dist/types/web/pdf_link_service.d.ts +1 -2
- package/dist/types/web/pdf_page_detail_view.d.ts +32 -0
- package/dist/types/web/pdf_page_view.d.ts +44 -23
- package/dist/types/web/pdf_rendering_queue.d.ts +2 -1
- package/dist/types/web/pdf_thumbnail_view.d.ts +23 -3
- package/dist/types/web/pdf_thumbnail_viewer.d.ts +21 -1
- package/dist/types/web/pdf_viewer.d.ts +44 -16
- package/dist/types/web/struct_tree_layer_builder.d.ts +20 -2
- package/dist/types/web/text_accessibility.d.ts +1 -1
- package/dist/types/web/text_layer_builder.d.ts +25 -17
- package/dist/types/web/ui_utils.d.ts +3 -19
- package/dist/types/web/xfa_layer_builder.d.ts +14 -3
- package/package.json +31 -28
- package/dist/types/src/display/base_factory.d.ts +0 -60
- package/dist/types/src/display/editor/outliner.d.ts +0 -70
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { Canvas } from 'canvas';
|
|
1
|
+
import * as _napi_rs_canvas from '@napi-rs/canvas';
|
|
3
2
|
import { DocumentInitParameters, PDFDocumentProxy } from './types/src/display/api';
|
|
4
3
|
import * as _PDFJS from './types/src/pdf';
|
|
5
4
|
|
|
@@ -14,45 +13,26 @@ interface ExtractedImageObject {
|
|
|
14
13
|
* Extracts images from a specific page of a PDF document, including necessary metadata,
|
|
15
14
|
* such as width, height, and calculated color channels.
|
|
16
15
|
*
|
|
17
|
-
* This version calculates channels based on image data length, width, and height,
|
|
18
|
-
* as the `kind` property provided by PDF.js might not reliably indicate the actual
|
|
19
|
-
* channel count of the raw pixel data (e.g., returning RGBA data even when kind is 3).
|
|
20
|
-
*
|
|
21
16
|
* @example
|
|
22
17
|
* const imagesData = await extractImages(pdf, pageNum)
|
|
23
18
|
*
|
|
24
19
|
* for (const imgData of imagesData) {
|
|
25
|
-
* const imageIndex = totalImagesProcessed + 1
|
|
20
|
+
* const imageIndex = totalImagesProcessed + 1
|
|
26
21
|
* await sharp(imgData.data, {
|
|
27
22
|
* raw: { width: imgData.width, height: imgData.height, channels: imgData.channels }
|
|
28
23
|
* })
|
|
29
24
|
* .png()
|
|
30
|
-
* .toFile(`${imageIndex}.png`)
|
|
25
|
+
* .toFile(`${imageIndex}.png`)
|
|
31
26
|
* }
|
|
32
27
|
*/
|
|
33
28
|
declare function extractImages$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number): Promise<ExtractedImageObject[]>;
|
|
34
29
|
declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options?: {
|
|
35
|
-
|
|
36
|
-
/** @default 1 */
|
|
30
|
+
canvasImport?: () => Promise<typeof _napi_rs_canvas>;
|
|
31
|
+
/** @default 1.0 */
|
|
37
32
|
scale?: number;
|
|
38
33
|
width?: number;
|
|
39
34
|
height?: number;
|
|
40
35
|
}): Promise<ArrayBuffer>;
|
|
41
|
-
declare function createIsomorphicCanvasFactory(canvas?: () => Promise<typeof canvas>): Promise<{
|
|
42
|
-
_createCanvas(width: number, height: number): Canvas | HTMLCanvasElement;
|
|
43
|
-
create(width: number, height: number): {
|
|
44
|
-
canvas: Canvas | HTMLCanvasElement;
|
|
45
|
-
context: CanvasRenderingContext2D;
|
|
46
|
-
};
|
|
47
|
-
reset(ctx: {
|
|
48
|
-
canvas?: Canvas;
|
|
49
|
-
context?: CanvasRenderingContext2D;
|
|
50
|
-
}, width: number, height: number): void;
|
|
51
|
-
destroy(ctx: {
|
|
52
|
-
canvas?: Canvas;
|
|
53
|
-
context?: CanvasRenderingContext2D;
|
|
54
|
-
}): void;
|
|
55
|
-
}>;
|
|
56
36
|
|
|
57
37
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
58
38
|
info: Record<string, any>;
|
|
@@ -72,21 +52,24 @@ declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumen
|
|
|
72
52
|
text: string;
|
|
73
53
|
}>;
|
|
74
54
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
55
|
+
/**
|
|
56
|
+
* By default, unpdf will use the latest version of PDF.js compiled for
|
|
57
|
+
* serverless environments. If you want to use a different version, you can
|
|
58
|
+
* provide a custom resolver function.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Use the official PDF.js build (make sure to install it first)
|
|
62
|
+
* import { definePDFJSModule } from 'unpdf'
|
|
63
|
+
*
|
|
64
|
+
* await definePDFJSModule(() => import('pdfjs-dist'))
|
|
65
|
+
*/
|
|
66
|
+
declare function definePDFJSModule(pdfjs: () => Promise<any>): Promise<void>;
|
|
67
|
+
/** @deprecated Use `definePDFJSModule` instead. */
|
|
68
|
+
declare function configureUnPDF(options: {
|
|
86
69
|
pdfjs?: () => Promise<any>;
|
|
87
|
-
}
|
|
70
|
+
}): Promise<void>;
|
|
88
71
|
|
|
89
|
-
|
|
72
|
+
type PDFJS = typeof _PDFJS;
|
|
90
73
|
|
|
91
74
|
/**
|
|
92
75
|
* Returns a PDFDocumentProxy instance from a given binary data.
|
|
@@ -97,8 +80,8 @@ declare function configureUnPDF(options: UnPDFConfiguration): Promise<void>;
|
|
|
97
80
|
*/
|
|
98
81
|
declare function getDocumentProxy(data: DocumentInitParameters['data'], options?: DocumentInitParameters): Promise<PDFDocumentProxy>;
|
|
99
82
|
declare function getResolvedPDFJS(): Promise<PDFJS>;
|
|
100
|
-
declare function
|
|
101
|
-
|
|
83
|
+
declare function resolvePDFJSImport(pdfjsResolver?: () => Promise<any>, { reload }?: {
|
|
84
|
+
reload?: boolean | undefined;
|
|
102
85
|
}): Promise<void>;
|
|
103
86
|
|
|
104
87
|
declare const getMeta: typeof getMeta$1;
|
|
@@ -106,4 +89,4 @@ declare const extractText: typeof extractText$1;
|
|
|
106
89
|
declare const extractImages: typeof extractImages$1;
|
|
107
90
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
108
91
|
|
|
109
|
-
export { configureUnPDF,
|
|
92
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { Canvas } from 'canvas';
|
|
1
|
+
import * as _napi_rs_canvas from '@napi-rs/canvas';
|
|
3
2
|
import { DocumentInitParameters, PDFDocumentProxy } from './types/src/display/api';
|
|
4
3
|
import * as _PDFJS from './types/src/pdf';
|
|
5
4
|
|
|
@@ -14,45 +13,26 @@ interface ExtractedImageObject {
|
|
|
14
13
|
* Extracts images from a specific page of a PDF document, including necessary metadata,
|
|
15
14
|
* such as width, height, and calculated color channels.
|
|
16
15
|
*
|
|
17
|
-
* This version calculates channels based on image data length, width, and height,
|
|
18
|
-
* as the `kind` property provided by PDF.js might not reliably indicate the actual
|
|
19
|
-
* channel count of the raw pixel data (e.g., returning RGBA data even when kind is 3).
|
|
20
|
-
*
|
|
21
16
|
* @example
|
|
22
17
|
* const imagesData = await extractImages(pdf, pageNum)
|
|
23
18
|
*
|
|
24
19
|
* for (const imgData of imagesData) {
|
|
25
|
-
* const imageIndex = totalImagesProcessed + 1
|
|
20
|
+
* const imageIndex = totalImagesProcessed + 1
|
|
26
21
|
* await sharp(imgData.data, {
|
|
27
22
|
* raw: { width: imgData.width, height: imgData.height, channels: imgData.channels }
|
|
28
23
|
* })
|
|
29
24
|
* .png()
|
|
30
|
-
* .toFile(`${imageIndex}.png`)
|
|
25
|
+
* .toFile(`${imageIndex}.png`)
|
|
31
26
|
* }
|
|
32
27
|
*/
|
|
33
28
|
declare function extractImages$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number): Promise<ExtractedImageObject[]>;
|
|
34
29
|
declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options?: {
|
|
35
|
-
|
|
36
|
-
/** @default 1 */
|
|
30
|
+
canvasImport?: () => Promise<typeof _napi_rs_canvas>;
|
|
31
|
+
/** @default 1.0 */
|
|
37
32
|
scale?: number;
|
|
38
33
|
width?: number;
|
|
39
34
|
height?: number;
|
|
40
35
|
}): Promise<ArrayBuffer>;
|
|
41
|
-
declare function createIsomorphicCanvasFactory(canvas?: () => Promise<typeof canvas>): Promise<{
|
|
42
|
-
_createCanvas(width: number, height: number): Canvas | HTMLCanvasElement;
|
|
43
|
-
create(width: number, height: number): {
|
|
44
|
-
canvas: Canvas | HTMLCanvasElement;
|
|
45
|
-
context: CanvasRenderingContext2D;
|
|
46
|
-
};
|
|
47
|
-
reset(ctx: {
|
|
48
|
-
canvas?: Canvas;
|
|
49
|
-
context?: CanvasRenderingContext2D;
|
|
50
|
-
}, width: number, height: number): void;
|
|
51
|
-
destroy(ctx: {
|
|
52
|
-
canvas?: Canvas;
|
|
53
|
-
context?: CanvasRenderingContext2D;
|
|
54
|
-
}): void;
|
|
55
|
-
}>;
|
|
56
36
|
|
|
57
37
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
58
38
|
info: Record<string, any>;
|
|
@@ -72,21 +52,24 @@ declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumen
|
|
|
72
52
|
text: string;
|
|
73
53
|
}>;
|
|
74
54
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
55
|
+
/**
|
|
56
|
+
* By default, unpdf will use the latest version of PDF.js compiled for
|
|
57
|
+
* serverless environments. If you want to use a different version, you can
|
|
58
|
+
* provide a custom resolver function.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Use the official PDF.js build (make sure to install it first)
|
|
62
|
+
* import { definePDFJSModule } from 'unpdf'
|
|
63
|
+
*
|
|
64
|
+
* await definePDFJSModule(() => import('pdfjs-dist'))
|
|
65
|
+
*/
|
|
66
|
+
declare function definePDFJSModule(pdfjs: () => Promise<any>): Promise<void>;
|
|
67
|
+
/** @deprecated Use `definePDFJSModule` instead. */
|
|
68
|
+
declare function configureUnPDF(options: {
|
|
86
69
|
pdfjs?: () => Promise<any>;
|
|
87
|
-
}
|
|
70
|
+
}): Promise<void>;
|
|
88
71
|
|
|
89
|
-
|
|
72
|
+
type PDFJS = typeof _PDFJS;
|
|
90
73
|
|
|
91
74
|
/**
|
|
92
75
|
* Returns a PDFDocumentProxy instance from a given binary data.
|
|
@@ -97,8 +80,8 @@ declare function configureUnPDF(options: UnPDFConfiguration): Promise<void>;
|
|
|
97
80
|
*/
|
|
98
81
|
declare function getDocumentProxy(data: DocumentInitParameters['data'], options?: DocumentInitParameters): Promise<PDFDocumentProxy>;
|
|
99
82
|
declare function getResolvedPDFJS(): Promise<PDFJS>;
|
|
100
|
-
declare function
|
|
101
|
-
|
|
83
|
+
declare function resolvePDFJSImport(pdfjsResolver?: () => Promise<any>, { reload }?: {
|
|
84
|
+
reload?: boolean | undefined;
|
|
102
85
|
}): Promise<void>;
|
|
103
86
|
|
|
104
87
|
declare const getMeta: typeof getMeta$1;
|
|
@@ -106,4 +89,4 @@ declare const extractText: typeof extractText$1;
|
|
|
106
89
|
declare const extractImages: typeof extractImages$1;
|
|
107
90
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
108
91
|
|
|
109
|
-
export { configureUnPDF,
|
|
92
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import { Canvas } from 'canvas';
|
|
1
|
+
import * as _napi_rs_canvas from '@napi-rs/canvas';
|
|
3
2
|
import { DocumentInitParameters, PDFDocumentProxy } from './types/src/display/api';
|
|
4
3
|
import * as _PDFJS from './types/src/pdf';
|
|
5
4
|
|
|
@@ -14,45 +13,26 @@ interface ExtractedImageObject {
|
|
|
14
13
|
* Extracts images from a specific page of a PDF document, including necessary metadata,
|
|
15
14
|
* such as width, height, and calculated color channels.
|
|
16
15
|
*
|
|
17
|
-
* This version calculates channels based on image data length, width, and height,
|
|
18
|
-
* as the `kind` property provided by PDF.js might not reliably indicate the actual
|
|
19
|
-
* channel count of the raw pixel data (e.g., returning RGBA data even when kind is 3).
|
|
20
|
-
*
|
|
21
16
|
* @example
|
|
22
17
|
* const imagesData = await extractImages(pdf, pageNum)
|
|
23
18
|
*
|
|
24
19
|
* for (const imgData of imagesData) {
|
|
25
|
-
* const imageIndex = totalImagesProcessed + 1
|
|
20
|
+
* const imageIndex = totalImagesProcessed + 1
|
|
26
21
|
* await sharp(imgData.data, {
|
|
27
22
|
* raw: { width: imgData.width, height: imgData.height, channels: imgData.channels }
|
|
28
23
|
* })
|
|
29
24
|
* .png()
|
|
30
|
-
* .toFile(`${imageIndex}.png`)
|
|
25
|
+
* .toFile(`${imageIndex}.png`)
|
|
31
26
|
* }
|
|
32
27
|
*/
|
|
33
28
|
declare function extractImages$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number): Promise<ExtractedImageObject[]>;
|
|
34
29
|
declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options?: {
|
|
35
|
-
|
|
36
|
-
/** @default 1 */
|
|
30
|
+
canvasImport?: () => Promise<typeof _napi_rs_canvas>;
|
|
31
|
+
/** @default 1.0 */
|
|
37
32
|
scale?: number;
|
|
38
33
|
width?: number;
|
|
39
34
|
height?: number;
|
|
40
35
|
}): Promise<ArrayBuffer>;
|
|
41
|
-
declare function createIsomorphicCanvasFactory(canvas?: () => Promise<typeof canvas>): Promise<{
|
|
42
|
-
_createCanvas(width: number, height: number): Canvas | HTMLCanvasElement;
|
|
43
|
-
create(width: number, height: number): {
|
|
44
|
-
canvas: Canvas | HTMLCanvasElement;
|
|
45
|
-
context: CanvasRenderingContext2D;
|
|
46
|
-
};
|
|
47
|
-
reset(ctx: {
|
|
48
|
-
canvas?: Canvas;
|
|
49
|
-
context?: CanvasRenderingContext2D;
|
|
50
|
-
}, width: number, height: number): void;
|
|
51
|
-
destroy(ctx: {
|
|
52
|
-
canvas?: Canvas;
|
|
53
|
-
context?: CanvasRenderingContext2D;
|
|
54
|
-
}): void;
|
|
55
|
-
}>;
|
|
56
36
|
|
|
57
37
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
58
38
|
info: Record<string, any>;
|
|
@@ -72,21 +52,24 @@ declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumen
|
|
|
72
52
|
text: string;
|
|
73
53
|
}>;
|
|
74
54
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
55
|
+
/**
|
|
56
|
+
* By default, unpdf will use the latest version of PDF.js compiled for
|
|
57
|
+
* serverless environments. If you want to use a different version, you can
|
|
58
|
+
* provide a custom resolver function.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* // Use the official PDF.js build (make sure to install it first)
|
|
62
|
+
* import { definePDFJSModule } from 'unpdf'
|
|
63
|
+
*
|
|
64
|
+
* await definePDFJSModule(() => import('pdfjs-dist'))
|
|
65
|
+
*/
|
|
66
|
+
declare function definePDFJSModule(pdfjs: () => Promise<any>): Promise<void>;
|
|
67
|
+
/** @deprecated Use `definePDFJSModule` instead. */
|
|
68
|
+
declare function configureUnPDF(options: {
|
|
86
69
|
pdfjs?: () => Promise<any>;
|
|
87
|
-
}
|
|
70
|
+
}): Promise<void>;
|
|
88
71
|
|
|
89
|
-
|
|
72
|
+
type PDFJS = typeof _PDFJS;
|
|
90
73
|
|
|
91
74
|
/**
|
|
92
75
|
* Returns a PDFDocumentProxy instance from a given binary data.
|
|
@@ -97,8 +80,8 @@ declare function configureUnPDF(options: UnPDFConfiguration): Promise<void>;
|
|
|
97
80
|
*/
|
|
98
81
|
declare function getDocumentProxy(data: DocumentInitParameters['data'], options?: DocumentInitParameters): Promise<PDFDocumentProxy>;
|
|
99
82
|
declare function getResolvedPDFJS(): Promise<PDFJS>;
|
|
100
|
-
declare function
|
|
101
|
-
|
|
83
|
+
declare function resolvePDFJSImport(pdfjsResolver?: () => Promise<any>, { reload }?: {
|
|
84
|
+
reload?: boolean | undefined;
|
|
102
85
|
}): Promise<void>;
|
|
103
86
|
|
|
104
87
|
declare const getMeta: typeof getMeta$1;
|
|
@@ -106,4 +89,4 @@ declare const extractText: typeof extractText$1;
|
|
|
106
89
|
declare const extractImages: typeof extractImages$1;
|
|
107
90
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
108
91
|
|
|
109
|
-
export { configureUnPDF,
|
|
92
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.mjs
CHANGED
|
@@ -14,24 +14,21 @@ async function getDocumentProxy(data, options = {}) {
|
|
|
14
14
|
}
|
|
15
15
|
async function getResolvedPDFJS() {
|
|
16
16
|
if (!resolvedModule) {
|
|
17
|
-
await
|
|
17
|
+
await resolvePDFJSImport();
|
|
18
18
|
}
|
|
19
19
|
return resolvedModule;
|
|
20
20
|
}
|
|
21
|
-
async function
|
|
22
|
-
if (resolvedModule && !
|
|
21
|
+
async function resolvePDFJSImport(pdfjsResolver, { reload = false } = {}) {
|
|
22
|
+
if (resolvedModule && !reload) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
if (pdfjsResolver) {
|
|
26
26
|
try {
|
|
27
27
|
resolvedModule = await interopDefault(pdfjsResolver());
|
|
28
|
-
if (resolvedModule && "resolvePDFJS" in resolvedModule) {
|
|
29
|
-
resolvedModule = await resolvedModule.resolvePDFJS();
|
|
30
|
-
}
|
|
31
28
|
return;
|
|
32
29
|
} catch (error) {
|
|
33
30
|
console.error(error);
|
|
34
|
-
throw new Error("
|
|
31
|
+
throw new Error("PDF.js could not be resolved. Please check the resolver function.");
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
try {
|
|
@@ -39,7 +36,7 @@ async function resolvePDFJSImports(pdfjsResolver, { force = false } = {}) {
|
|
|
39
36
|
resolvedModule = await resolvePDFJS();
|
|
40
37
|
} catch (error) {
|
|
41
38
|
console.error(error);
|
|
42
|
-
throw new Error("PDF.js
|
|
39
|
+
throw new Error("PDF.js package not available. Please install it first.");
|
|
43
40
|
}
|
|
44
41
|
}
|
|
45
42
|
function isPDFDocumentProxy(data) {
|
|
@@ -50,6 +47,87 @@ async function interopDefault(m) {
|
|
|
50
47
|
return resolved.default || resolved;
|
|
51
48
|
}
|
|
52
49
|
|
|
50
|
+
let canvasModule;
|
|
51
|
+
/**
|
|
52
|
+
* Derived from the PDF.js project by the Mozilla Foundation.
|
|
53
|
+
* @see https://github.com/mozilla/pdf.js/blob/b8de9a372f9bbf7e33adb362eeae5ef1919dba73/src/display/canvas_factory.js#L18
|
|
54
|
+
* @license Apache-2.0
|
|
55
|
+
*/
|
|
56
|
+
class BaseCanvasFactory {
|
|
57
|
+
#enableHWA = false;
|
|
58
|
+
constructor({ enableHWA = false } = {}) {
|
|
59
|
+
this.#enableHWA = enableHWA;
|
|
60
|
+
}
|
|
61
|
+
create(width, height) {
|
|
62
|
+
const canvas = this._createCanvas(width, height);
|
|
63
|
+
return {
|
|
64
|
+
canvas,
|
|
65
|
+
context: canvas.getContext("2d", {
|
|
66
|
+
willReadFrequently: !this.#enableHWA
|
|
67
|
+
})
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
reset({ canvas }, width, height) {
|
|
71
|
+
if (!canvas) {
|
|
72
|
+
throw new Error("Canvas is not specified");
|
|
73
|
+
}
|
|
74
|
+
canvas.width = width;
|
|
75
|
+
canvas.height = height;
|
|
76
|
+
}
|
|
77
|
+
destroy(context) {
|
|
78
|
+
if (!context.canvas) {
|
|
79
|
+
throw new Error("Canvas is not specified");
|
|
80
|
+
}
|
|
81
|
+
context.canvas.width = 0;
|
|
82
|
+
context.canvas.height = 0;
|
|
83
|
+
context.canvas = void 0;
|
|
84
|
+
context.context = void 0;
|
|
85
|
+
}
|
|
86
|
+
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
87
|
+
_createCanvas(width, height) {
|
|
88
|
+
throw new Error("Not implemented");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Derived from the PDF.js project by the Mozilla Foundation.
|
|
93
|
+
* @see https://github.com/mozilla/pdf.js/blob/b8de9a372f9bbf7e33adb362eeae5ef1919dba73/src/display/canvas_factory.js#L18
|
|
94
|
+
* @license Apache-2.0
|
|
95
|
+
*/
|
|
96
|
+
class DOMCanvasFactory extends BaseCanvasFactory {
|
|
97
|
+
_document;
|
|
98
|
+
constructor({ ownerDocument = globalThis.document, enableHWA = false } = {}) {
|
|
99
|
+
super({ enableHWA });
|
|
100
|
+
this._document = ownerDocument;
|
|
101
|
+
}
|
|
102
|
+
_createCanvas(width, height) {
|
|
103
|
+
const canvas = this._document.createElement("canvas");
|
|
104
|
+
canvas.width = width;
|
|
105
|
+
canvas.height = height;
|
|
106
|
+
return canvas;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
class NodeCanvasFactory extends BaseCanvasFactory {
|
|
110
|
+
constructor({ enableHWA = false } = {}) {
|
|
111
|
+
super({ enableHWA });
|
|
112
|
+
}
|
|
113
|
+
_createCanvas(width, height) {
|
|
114
|
+
if (!canvasModule) {
|
|
115
|
+
throw new Error("@napi-rs/canvas module is not resolved");
|
|
116
|
+
}
|
|
117
|
+
return canvasModule.createCanvas(width, height);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function resolveCanvasModule(canvasImport) {
|
|
121
|
+
canvasModule ??= await interopDefault(canvasImport());
|
|
122
|
+
}
|
|
123
|
+
function injectCanvasConstructors() {
|
|
124
|
+
if (!canvasModule)
|
|
125
|
+
return;
|
|
126
|
+
globalThis.DOMMatrix ??= canvasModule.DOMMatrix;
|
|
127
|
+
globalThis.ImageData ??= canvasModule.ImageData;
|
|
128
|
+
globalThis.Path2D ??= canvasModule.Path2D;
|
|
129
|
+
}
|
|
130
|
+
|
|
53
131
|
async function extractImages$1(data, pageNumber) {
|
|
54
132
|
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
|
|
55
133
|
if (pageNumber < 1 || pageNumber > pdf.numPages) {
|
|
@@ -86,74 +164,41 @@ async function extractImages$1(data, pageNumber) {
|
|
|
86
164
|
return images;
|
|
87
165
|
}
|
|
88
166
|
async function renderPageAsImage$1(data, pageNumber, options = {}) {
|
|
89
|
-
const
|
|
90
|
-
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data, {
|
|
167
|
+
const CanvasFactory = await createIsomorphicCanvasFactory(options.canvasImport);
|
|
168
|
+
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data, { CanvasFactory });
|
|
91
169
|
const page = await pdf.getPage(pageNumber);
|
|
92
170
|
if (pageNumber < 1 || pageNumber > pdf.numPages) {
|
|
93
171
|
throw new Error(`Invalid page number. Must be between 1 and ${pdf.numPages}.`);
|
|
94
172
|
}
|
|
95
|
-
|
|
96
|
-
let
|
|
173
|
+
const defaultViewport = page.getViewport({ scale: 1 });
|
|
174
|
+
let scale = options.scale || 1;
|
|
97
175
|
if (options.width) {
|
|
98
|
-
|
|
176
|
+
scale = options.width / defaultViewport.width;
|
|
99
177
|
} else if (options.height) {
|
|
100
|
-
|
|
178
|
+
scale = options.height / defaultViewport.height;
|
|
101
179
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
const ctx = canvasFactory.create(viewport.width, viewport.height);
|
|
180
|
+
const viewport = page.getViewport({ scale: Math.max(0, scale) });
|
|
181
|
+
const drawingContext = new CanvasFactory().create(viewport.width, viewport.height);
|
|
106
182
|
await page.render({
|
|
107
|
-
canvasContext:
|
|
183
|
+
canvasContext: drawingContext.context,
|
|
108
184
|
viewport
|
|
109
185
|
}).promise;
|
|
110
|
-
const dataUrl =
|
|
186
|
+
const dataUrl = drawingContext.canvas.toDataURL();
|
|
111
187
|
const response = await fetch(dataUrl);
|
|
112
188
|
return await response.arrayBuffer();
|
|
113
189
|
}
|
|
114
|
-
async function createIsomorphicCanvasFactory(
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
canvas2.width = width;
|
|
121
|
-
canvas2.height = height;
|
|
122
|
-
return canvas2;
|
|
123
|
-
}
|
|
124
|
-
if (isNode) {
|
|
125
|
-
if (!_canvas) {
|
|
126
|
-
throw new Error('Failed to resolve "canvas" package.');
|
|
127
|
-
}
|
|
128
|
-
return _canvas.createCanvas(width, height);
|
|
129
|
-
}
|
|
130
|
-
throw new Error("Unsupported environment for canvas creation.");
|
|
131
|
-
},
|
|
132
|
-
create(width, height) {
|
|
133
|
-
const _canvas2 = this._createCanvas(width, height);
|
|
134
|
-
const context = _canvas2.getContext(
|
|
135
|
-
"2d"
|
|
136
|
-
);
|
|
137
|
-
return {
|
|
138
|
-
canvas: _canvas2,
|
|
139
|
-
context
|
|
140
|
-
};
|
|
141
|
-
},
|
|
142
|
-
reset(ctx, width, height) {
|
|
143
|
-
if (ctx.canvas) {
|
|
144
|
-
ctx.canvas.width = width;
|
|
145
|
-
ctx.canvas.height = height;
|
|
146
|
-
}
|
|
147
|
-
},
|
|
148
|
-
destroy(ctx) {
|
|
149
|
-
if (ctx.canvas) {
|
|
150
|
-
ctx.canvas.width = 0;
|
|
151
|
-
ctx.canvas.height = 0;
|
|
152
|
-
}
|
|
153
|
-
ctx.canvas = void 0;
|
|
154
|
-
ctx.context = void 0;
|
|
190
|
+
async function createIsomorphicCanvasFactory(canvasImport) {
|
|
191
|
+
if (isBrowser)
|
|
192
|
+
return DOMCanvasFactory;
|
|
193
|
+
if (isNode) {
|
|
194
|
+
if (!canvasImport) {
|
|
195
|
+
throw new Error('Parameter "canvasImport" is required in Node.js environment.');
|
|
155
196
|
}
|
|
156
|
-
|
|
197
|
+
await resolveCanvasModule(canvasImport);
|
|
198
|
+
injectCanvasConstructors();
|
|
199
|
+
return NodeCanvasFactory;
|
|
200
|
+
}
|
|
201
|
+
throw new Error("Unsupported environment for canvas creation.");
|
|
157
202
|
}
|
|
158
203
|
|
|
159
204
|
async function getMeta$1(data) {
|
|
@@ -166,7 +211,7 @@ async function getMeta$1(data) {
|
|
|
166
211
|
}
|
|
167
212
|
|
|
168
213
|
async function extractText$1(data, options = {}) {
|
|
169
|
-
const { mergePages = false } =
|
|
214
|
+
const { mergePages = false } = options;
|
|
170
215
|
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
|
|
171
216
|
const texts = await Promise.all(
|
|
172
217
|
Array.from({ length: pdf.numPages }, (_, i) => getPageText(pdf, i + 1))
|
|
@@ -182,28 +227,28 @@ async function getPageText(document, pageNumber) {
|
|
|
182
227
|
return content.items.filter((item) => item.str != null).map((item) => item.str + (item.hasEOL ? "\n" : "")).join("");
|
|
183
228
|
}
|
|
184
229
|
|
|
230
|
+
async function definePDFJSModule(pdfjs) {
|
|
231
|
+
await resolvePDFJSImport(pdfjs, { reload: true });
|
|
232
|
+
}
|
|
185
233
|
async function configureUnPDF(options) {
|
|
186
|
-
|
|
187
|
-
if (pdfjs) {
|
|
188
|
-
await resolvePDFJSImports(pdfjs, { force: true });
|
|
189
|
-
}
|
|
234
|
+
await resolvePDFJSImport(options.pdfjs, { reload: true });
|
|
190
235
|
}
|
|
191
236
|
|
|
192
237
|
const getMeta = async (...args) => {
|
|
193
|
-
await
|
|
238
|
+
await resolvePDFJSImport();
|
|
194
239
|
return await getMeta$1(...args);
|
|
195
240
|
};
|
|
196
241
|
const extractText = async (...args) => {
|
|
197
|
-
await
|
|
242
|
+
await resolvePDFJSImport();
|
|
198
243
|
return await extractText$1(...args);
|
|
199
244
|
};
|
|
200
245
|
const extractImages = async (...args) => {
|
|
201
|
-
await
|
|
246
|
+
await resolvePDFJSImport();
|
|
202
247
|
return await extractImages$1(...args);
|
|
203
248
|
};
|
|
204
249
|
const renderPageAsImage = async (...args) => {
|
|
205
|
-
await
|
|
250
|
+
await resolvePDFJSImport();
|
|
206
251
|
return await renderPageAsImage$1(...args);
|
|
207
252
|
};
|
|
208
253
|
|
|
209
|
-
export { configureUnPDF,
|
|
254
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|