unpdf 0.12.1 → 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 +135 -75
- package/dist/index.d.cts +46 -36
- package/dist/index.d.mts +46 -36
- package/dist/index.d.ts +46 -36
- package/dist/index.mjs +134 -74
- 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,31 +1,38 @@
|
|
|
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
|
|
|
6
|
-
|
|
5
|
+
interface ExtractedImageObject {
|
|
6
|
+
data: Uint8ClampedArray;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
channels: 1 | 3 | 4;
|
|
10
|
+
key: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Extracts images from a specific page of a PDF document, including necessary metadata,
|
|
14
|
+
* such as width, height, and calculated color channels.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const imagesData = await extractImages(pdf, pageNum)
|
|
18
|
+
*
|
|
19
|
+
* for (const imgData of imagesData) {
|
|
20
|
+
* const imageIndex = totalImagesProcessed + 1
|
|
21
|
+
* await sharp(imgData.data, {
|
|
22
|
+
* raw: { width: imgData.width, height: imgData.height, channels: imgData.channels }
|
|
23
|
+
* })
|
|
24
|
+
* .png()
|
|
25
|
+
* .toFile(`${imageIndex}.png`)
|
|
26
|
+
* }
|
|
27
|
+
*/
|
|
28
|
+
declare function extractImages$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number): Promise<ExtractedImageObject[]>;
|
|
7
29
|
declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options?: {
|
|
8
|
-
|
|
9
|
-
/** @default 1 */
|
|
30
|
+
canvasImport?: () => Promise<typeof _napi_rs_canvas>;
|
|
31
|
+
/** @default 1.0 */
|
|
10
32
|
scale?: number;
|
|
11
33
|
width?: number;
|
|
12
34
|
height?: number;
|
|
13
35
|
}): Promise<ArrayBuffer>;
|
|
14
|
-
declare function createIsomorphicCanvasFactory(canvas?: () => Promise<typeof canvas>): Promise<{
|
|
15
|
-
_createCanvas(width: number, height: number): Canvas | HTMLCanvasElement;
|
|
16
|
-
create(width: number, height: number): {
|
|
17
|
-
canvas: Canvas | HTMLCanvasElement;
|
|
18
|
-
context: CanvasRenderingContext2D;
|
|
19
|
-
};
|
|
20
|
-
reset(ctx: {
|
|
21
|
-
canvas?: Canvas;
|
|
22
|
-
context?: CanvasRenderingContext2D;
|
|
23
|
-
}, width: number, height: number): void;
|
|
24
|
-
destroy(ctx: {
|
|
25
|
-
canvas?: Canvas;
|
|
26
|
-
context?: CanvasRenderingContext2D;
|
|
27
|
-
}): void;
|
|
28
|
-
}>;
|
|
29
36
|
|
|
30
37
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
31
38
|
info: Record<string, any>;
|
|
@@ -45,21 +52,24 @@ declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumen
|
|
|
45
52
|
text: string;
|
|
46
53
|
}>;
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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: {
|
|
59
69
|
pdfjs?: () => Promise<any>;
|
|
60
|
-
}
|
|
70
|
+
}): Promise<void>;
|
|
61
71
|
|
|
62
|
-
|
|
72
|
+
type PDFJS = typeof _PDFJS;
|
|
63
73
|
|
|
64
74
|
/**
|
|
65
75
|
* Returns a PDFDocumentProxy instance from a given binary data.
|
|
@@ -70,8 +80,8 @@ declare function configureUnPDF(options: UnPDFConfiguration): Promise<void>;
|
|
|
70
80
|
*/
|
|
71
81
|
declare function getDocumentProxy(data: DocumentInitParameters['data'], options?: DocumentInitParameters): Promise<PDFDocumentProxy>;
|
|
72
82
|
declare function getResolvedPDFJS(): Promise<PDFJS>;
|
|
73
|
-
declare function
|
|
74
|
-
|
|
83
|
+
declare function resolvePDFJSImport(pdfjsResolver?: () => Promise<any>, { reload }?: {
|
|
84
|
+
reload?: boolean | undefined;
|
|
75
85
|
}): Promise<void>;
|
|
76
86
|
|
|
77
87
|
declare const getMeta: typeof getMeta$1;
|
|
@@ -79,4 +89,4 @@ declare const extractText: typeof extractText$1;
|
|
|
79
89
|
declare const extractImages: typeof extractImages$1;
|
|
80
90
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
81
91
|
|
|
82
|
-
export { configureUnPDF,
|
|
92
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,31 +1,38 @@
|
|
|
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
|
|
|
6
|
-
|
|
5
|
+
interface ExtractedImageObject {
|
|
6
|
+
data: Uint8ClampedArray;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
channels: 1 | 3 | 4;
|
|
10
|
+
key: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Extracts images from a specific page of a PDF document, including necessary metadata,
|
|
14
|
+
* such as width, height, and calculated color channels.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const imagesData = await extractImages(pdf, pageNum)
|
|
18
|
+
*
|
|
19
|
+
* for (const imgData of imagesData) {
|
|
20
|
+
* const imageIndex = totalImagesProcessed + 1
|
|
21
|
+
* await sharp(imgData.data, {
|
|
22
|
+
* raw: { width: imgData.width, height: imgData.height, channels: imgData.channels }
|
|
23
|
+
* })
|
|
24
|
+
* .png()
|
|
25
|
+
* .toFile(`${imageIndex}.png`)
|
|
26
|
+
* }
|
|
27
|
+
*/
|
|
28
|
+
declare function extractImages$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number): Promise<ExtractedImageObject[]>;
|
|
7
29
|
declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options?: {
|
|
8
|
-
|
|
9
|
-
/** @default 1 */
|
|
30
|
+
canvasImport?: () => Promise<typeof _napi_rs_canvas>;
|
|
31
|
+
/** @default 1.0 */
|
|
10
32
|
scale?: number;
|
|
11
33
|
width?: number;
|
|
12
34
|
height?: number;
|
|
13
35
|
}): Promise<ArrayBuffer>;
|
|
14
|
-
declare function createIsomorphicCanvasFactory(canvas?: () => Promise<typeof canvas>): Promise<{
|
|
15
|
-
_createCanvas(width: number, height: number): Canvas | HTMLCanvasElement;
|
|
16
|
-
create(width: number, height: number): {
|
|
17
|
-
canvas: Canvas | HTMLCanvasElement;
|
|
18
|
-
context: CanvasRenderingContext2D;
|
|
19
|
-
};
|
|
20
|
-
reset(ctx: {
|
|
21
|
-
canvas?: Canvas;
|
|
22
|
-
context?: CanvasRenderingContext2D;
|
|
23
|
-
}, width: number, height: number): void;
|
|
24
|
-
destroy(ctx: {
|
|
25
|
-
canvas?: Canvas;
|
|
26
|
-
context?: CanvasRenderingContext2D;
|
|
27
|
-
}): void;
|
|
28
|
-
}>;
|
|
29
36
|
|
|
30
37
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
31
38
|
info: Record<string, any>;
|
|
@@ -45,21 +52,24 @@ declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumen
|
|
|
45
52
|
text: string;
|
|
46
53
|
}>;
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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: {
|
|
59
69
|
pdfjs?: () => Promise<any>;
|
|
60
|
-
}
|
|
70
|
+
}): Promise<void>;
|
|
61
71
|
|
|
62
|
-
|
|
72
|
+
type PDFJS = typeof _PDFJS;
|
|
63
73
|
|
|
64
74
|
/**
|
|
65
75
|
* Returns a PDFDocumentProxy instance from a given binary data.
|
|
@@ -70,8 +80,8 @@ declare function configureUnPDF(options: UnPDFConfiguration): Promise<void>;
|
|
|
70
80
|
*/
|
|
71
81
|
declare function getDocumentProxy(data: DocumentInitParameters['data'], options?: DocumentInitParameters): Promise<PDFDocumentProxy>;
|
|
72
82
|
declare function getResolvedPDFJS(): Promise<PDFJS>;
|
|
73
|
-
declare function
|
|
74
|
-
|
|
83
|
+
declare function resolvePDFJSImport(pdfjsResolver?: () => Promise<any>, { reload }?: {
|
|
84
|
+
reload?: boolean | undefined;
|
|
75
85
|
}): Promise<void>;
|
|
76
86
|
|
|
77
87
|
declare const getMeta: typeof getMeta$1;
|
|
@@ -79,4 +89,4 @@ declare const extractText: typeof extractText$1;
|
|
|
79
89
|
declare const extractImages: typeof extractImages$1;
|
|
80
90
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
81
91
|
|
|
82
|
-
export { configureUnPDF,
|
|
92
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,31 +1,38 @@
|
|
|
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
|
|
|
6
|
-
|
|
5
|
+
interface ExtractedImageObject {
|
|
6
|
+
data: Uint8ClampedArray;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
channels: 1 | 3 | 4;
|
|
10
|
+
key: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Extracts images from a specific page of a PDF document, including necessary metadata,
|
|
14
|
+
* such as width, height, and calculated color channels.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* const imagesData = await extractImages(pdf, pageNum)
|
|
18
|
+
*
|
|
19
|
+
* for (const imgData of imagesData) {
|
|
20
|
+
* const imageIndex = totalImagesProcessed + 1
|
|
21
|
+
* await sharp(imgData.data, {
|
|
22
|
+
* raw: { width: imgData.width, height: imgData.height, channels: imgData.channels }
|
|
23
|
+
* })
|
|
24
|
+
* .png()
|
|
25
|
+
* .toFile(`${imageIndex}.png`)
|
|
26
|
+
* }
|
|
27
|
+
*/
|
|
28
|
+
declare function extractImages$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number): Promise<ExtractedImageObject[]>;
|
|
7
29
|
declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFDocumentProxy, pageNumber: number, options?: {
|
|
8
|
-
|
|
9
|
-
/** @default 1 */
|
|
30
|
+
canvasImport?: () => Promise<typeof _napi_rs_canvas>;
|
|
31
|
+
/** @default 1.0 */
|
|
10
32
|
scale?: number;
|
|
11
33
|
width?: number;
|
|
12
34
|
height?: number;
|
|
13
35
|
}): Promise<ArrayBuffer>;
|
|
14
|
-
declare function createIsomorphicCanvasFactory(canvas?: () => Promise<typeof canvas>): Promise<{
|
|
15
|
-
_createCanvas(width: number, height: number): Canvas | HTMLCanvasElement;
|
|
16
|
-
create(width: number, height: number): {
|
|
17
|
-
canvas: Canvas | HTMLCanvasElement;
|
|
18
|
-
context: CanvasRenderingContext2D;
|
|
19
|
-
};
|
|
20
|
-
reset(ctx: {
|
|
21
|
-
canvas?: Canvas;
|
|
22
|
-
context?: CanvasRenderingContext2D;
|
|
23
|
-
}, width: number, height: number): void;
|
|
24
|
-
destroy(ctx: {
|
|
25
|
-
canvas?: Canvas;
|
|
26
|
-
context?: CanvasRenderingContext2D;
|
|
27
|
-
}): void;
|
|
28
|
-
}>;
|
|
29
36
|
|
|
30
37
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
31
38
|
info: Record<string, any>;
|
|
@@ -45,21 +52,24 @@ declare function extractText$1(data: DocumentInitParameters['data'] | PDFDocumen
|
|
|
45
52
|
text: string;
|
|
46
53
|
}>;
|
|
47
54
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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: {
|
|
59
69
|
pdfjs?: () => Promise<any>;
|
|
60
|
-
}
|
|
70
|
+
}): Promise<void>;
|
|
61
71
|
|
|
62
|
-
|
|
72
|
+
type PDFJS = typeof _PDFJS;
|
|
63
73
|
|
|
64
74
|
/**
|
|
65
75
|
* Returns a PDFDocumentProxy instance from a given binary data.
|
|
@@ -70,8 +80,8 @@ declare function configureUnPDF(options: UnPDFConfiguration): Promise<void>;
|
|
|
70
80
|
*/
|
|
71
81
|
declare function getDocumentProxy(data: DocumentInitParameters['data'], options?: DocumentInitParameters): Promise<PDFDocumentProxy>;
|
|
72
82
|
declare function getResolvedPDFJS(): Promise<PDFJS>;
|
|
73
|
-
declare function
|
|
74
|
-
|
|
83
|
+
declare function resolvePDFJSImport(pdfjsResolver?: () => Promise<any>, { reload }?: {
|
|
84
|
+
reload?: boolean | undefined;
|
|
75
85
|
}): Promise<void>;
|
|
76
86
|
|
|
77
87
|
declare const getMeta: typeof getMeta$1;
|
|
@@ -79,4 +89,4 @@ declare const extractText: typeof extractText$1;
|
|
|
79
89
|
declare const extractImages: typeof extractImages$1;
|
|
80
90
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
81
91
|
|
|
82
|
-
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,12 +47,93 @@ 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
|
-
const page = await pdf.getPage(pageNumber);
|
|
56
133
|
if (pageNumber < 1 || pageNumber > pdf.numPages) {
|
|
57
134
|
throw new Error(`Invalid page number. Must be between 1 and ${pdf.numPages}.`);
|
|
58
135
|
}
|
|
136
|
+
const page = await pdf.getPage(pageNumber);
|
|
59
137
|
const operatorList = await page.getOperatorList();
|
|
60
138
|
const { OPS } = await getResolvedPDFJS();
|
|
61
139
|
const images = [];
|
|
@@ -66,79 +144,61 @@ async function extractImages$1(data, pageNumber) {
|
|
|
66
144
|
}
|
|
67
145
|
const imageKey = operatorList.argsArray[i][0];
|
|
68
146
|
const image = await page.objs.get(imageKey);
|
|
69
|
-
|
|
147
|
+
if (!image || !image.data || !image.width || !image.height) {
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
const { width, height, data: data2 } = image;
|
|
151
|
+
const calculatedChannels = data2.length / (width * height);
|
|
152
|
+
if (![1, 3, 4].includes(calculatedChannels)) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
const channels = calculatedChannels;
|
|
156
|
+
images.push({
|
|
157
|
+
data: data2,
|
|
158
|
+
width,
|
|
159
|
+
height,
|
|
160
|
+
channels,
|
|
161
|
+
key: imageKey
|
|
162
|
+
});
|
|
70
163
|
}
|
|
71
164
|
return images;
|
|
72
165
|
}
|
|
73
166
|
async function renderPageAsImage$1(data, pageNumber, options = {}) {
|
|
74
|
-
const
|
|
75
|
-
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 });
|
|
76
169
|
const page = await pdf.getPage(pageNumber);
|
|
77
170
|
if (pageNumber < 1 || pageNumber > pdf.numPages) {
|
|
78
171
|
throw new Error(`Invalid page number. Must be between 1 and ${pdf.numPages}.`);
|
|
79
172
|
}
|
|
80
|
-
|
|
81
|
-
let
|
|
173
|
+
const defaultViewport = page.getViewport({ scale: 1 });
|
|
174
|
+
let scale = options.scale || 1;
|
|
82
175
|
if (options.width) {
|
|
83
|
-
|
|
176
|
+
scale = options.width / defaultViewport.width;
|
|
84
177
|
} else if (options.height) {
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
if (outputScale !== 1 && outputScale > 0) {
|
|
88
|
-
viewport = page.getViewport({ scale: outputScale });
|
|
178
|
+
scale = options.height / defaultViewport.height;
|
|
89
179
|
}
|
|
90
|
-
const
|
|
180
|
+
const viewport = page.getViewport({ scale: Math.max(0, scale) });
|
|
181
|
+
const drawingContext = new CanvasFactory().create(viewport.width, viewport.height);
|
|
91
182
|
await page.render({
|
|
92
|
-
canvasContext:
|
|
183
|
+
canvasContext: drawingContext.context,
|
|
93
184
|
viewport
|
|
94
185
|
}).promise;
|
|
95
|
-
const dataUrl =
|
|
186
|
+
const dataUrl = drawingContext.canvas.toDataURL();
|
|
96
187
|
const response = await fetch(dataUrl);
|
|
97
188
|
return await response.arrayBuffer();
|
|
98
189
|
}
|
|
99
|
-
async function createIsomorphicCanvasFactory(
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
canvas2.width = width;
|
|
106
|
-
canvas2.height = height;
|
|
107
|
-
return canvas2;
|
|
108
|
-
}
|
|
109
|
-
if (isNode) {
|
|
110
|
-
if (!_canvas) {
|
|
111
|
-
throw new Error('Failed to resolve "canvas" package.');
|
|
112
|
-
}
|
|
113
|
-
return _canvas.createCanvas(width, height);
|
|
114
|
-
}
|
|
115
|
-
throw new Error("Unsupported environment for canvas creation.");
|
|
116
|
-
},
|
|
117
|
-
create(width, height) {
|
|
118
|
-
const _canvas2 = this._createCanvas(width, height);
|
|
119
|
-
const context = _canvas2.getContext(
|
|
120
|
-
"2d"
|
|
121
|
-
);
|
|
122
|
-
return {
|
|
123
|
-
canvas: _canvas2,
|
|
124
|
-
context
|
|
125
|
-
};
|
|
126
|
-
},
|
|
127
|
-
reset(ctx, width, height) {
|
|
128
|
-
if (ctx.canvas) {
|
|
129
|
-
ctx.canvas.width = width;
|
|
130
|
-
ctx.canvas.height = height;
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
destroy(ctx) {
|
|
134
|
-
if (ctx.canvas) {
|
|
135
|
-
ctx.canvas.width = 0;
|
|
136
|
-
ctx.canvas.height = 0;
|
|
137
|
-
}
|
|
138
|
-
ctx.canvas = void 0;
|
|
139
|
-
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.');
|
|
140
196
|
}
|
|
141
|
-
|
|
197
|
+
await resolveCanvasModule(canvasImport);
|
|
198
|
+
injectCanvasConstructors();
|
|
199
|
+
return NodeCanvasFactory;
|
|
200
|
+
}
|
|
201
|
+
throw new Error("Unsupported environment for canvas creation.");
|
|
142
202
|
}
|
|
143
203
|
|
|
144
204
|
async function getMeta$1(data) {
|
|
@@ -151,7 +211,7 @@ async function getMeta$1(data) {
|
|
|
151
211
|
}
|
|
152
212
|
|
|
153
213
|
async function extractText$1(data, options = {}) {
|
|
154
|
-
const { mergePages = false } =
|
|
214
|
+
const { mergePages = false } = options;
|
|
155
215
|
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
|
|
156
216
|
const texts = await Promise.all(
|
|
157
217
|
Array.from({ length: pdf.numPages }, (_, i) => getPageText(pdf, i + 1))
|
|
@@ -167,28 +227,28 @@ async function getPageText(document, pageNumber) {
|
|
|
167
227
|
return content.items.filter((item) => item.str != null).map((item) => item.str + (item.hasEOL ? "\n" : "")).join("");
|
|
168
228
|
}
|
|
169
229
|
|
|
230
|
+
async function definePDFJSModule(pdfjs) {
|
|
231
|
+
await resolvePDFJSImport(pdfjs, { reload: true });
|
|
232
|
+
}
|
|
170
233
|
async function configureUnPDF(options) {
|
|
171
|
-
|
|
172
|
-
if (pdfjs) {
|
|
173
|
-
await resolvePDFJSImports(pdfjs, { force: true });
|
|
174
|
-
}
|
|
234
|
+
await resolvePDFJSImport(options.pdfjs, { reload: true });
|
|
175
235
|
}
|
|
176
236
|
|
|
177
237
|
const getMeta = async (...args) => {
|
|
178
|
-
await
|
|
238
|
+
await resolvePDFJSImport();
|
|
179
239
|
return await getMeta$1(...args);
|
|
180
240
|
};
|
|
181
241
|
const extractText = async (...args) => {
|
|
182
|
-
await
|
|
242
|
+
await resolvePDFJSImport();
|
|
183
243
|
return await extractText$1(...args);
|
|
184
244
|
};
|
|
185
245
|
const extractImages = async (...args) => {
|
|
186
|
-
await
|
|
246
|
+
await resolvePDFJSImport();
|
|
187
247
|
return await extractImages$1(...args);
|
|
188
248
|
};
|
|
189
249
|
const renderPageAsImage = async (...args) => {
|
|
190
|
-
await
|
|
250
|
+
await resolvePDFJSImport();
|
|
191
251
|
return await renderPageAsImage$1(...args);
|
|
192
252
|
};
|
|
193
253
|
|
|
194
|
-
export { configureUnPDF,
|
|
254
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|