afpp 2.2.0 → 2.3.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 +38 -6
- package/dist/core.d.ts +28 -4
- package/dist/core.js +123 -62
- package/dist/core.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/parsePdf.d.ts +1 -1
- package/dist/parsePdf.js +1 -1
- package/dist/pdf2string.js.map +1 -1
- package/dist/streamPdf.d.ts +33 -0
- package/dist/streamPdf.js +39 -0
- package/dist/streamPdf.js.map +1 -0
- package/package.json +10 -13
package/README.md
CHANGED
|
@@ -75,6 +75,7 @@ All parsing functions accept the same input types:
|
|
|
75
75
|
```ts
|
|
76
76
|
import { readFile } from 'fs/promises';
|
|
77
77
|
import path from 'path';
|
|
78
|
+
|
|
78
79
|
import { pdf2string } from 'afpp';
|
|
79
80
|
|
|
80
81
|
(async () => {
|
|
@@ -103,6 +104,37 @@ import { pdf2image } from 'afpp';
|
|
|
103
104
|
|
|
104
105
|
---
|
|
105
106
|
|
|
107
|
+
### Streaming API (Large PDFs)
|
|
108
|
+
|
|
109
|
+
For large PDFs, use streaming functions to process pages incrementally without loading all results into memory:
|
|
110
|
+
|
|
111
|
+
```ts
|
|
112
|
+
import { writeFile } from 'fs/promises';
|
|
113
|
+
|
|
114
|
+
import { streamPdf2image, streamPdf2string } from 'afpp';
|
|
115
|
+
|
|
116
|
+
// Stream images - process each page as it's rendered
|
|
117
|
+
for await (const { pageNumber, pageCount, data } of streamPdf2image(
|
|
118
|
+
'./large.pdf',
|
|
119
|
+
)) {
|
|
120
|
+
await writeFile(`page-${pageNumber}.png`, data);
|
|
121
|
+
console.log(`Processed ${pageNumber}/${pageCount}`);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Stream text - process each page as it's extracted
|
|
125
|
+
for await (const { pageNumber, data } of streamPdf2string('./large.pdf')) {
|
|
126
|
+
console.log(`Page ${pageNumber}: ${data.substring(0, 100)}...`);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Benefits:**
|
|
131
|
+
|
|
132
|
+
- Lower peak memory usage
|
|
133
|
+
- Faster time-to-first-result
|
|
134
|
+
- Built-in progress tracking via `pageNumber` and `pageCount`
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
106
138
|
### Low-Level Parsing API
|
|
107
139
|
|
|
108
140
|
For advanced use cases, `parsePdf` exposes page-level control and transformation.
|
|
@@ -136,12 +168,12 @@ const result = await parsePdf(buffer, {
|
|
|
136
168
|
|
|
137
169
|
### AfppParseOptions
|
|
138
170
|
|
|
139
|
-
| Option | Type | Default | Description
|
|
140
|
-
| --------------- | ------------------------------------- | ------- |
|
|
141
|
-
| `concurrency` | `number` | `1` | Number of pages processed in parallel
|
|
142
|
-
| `imageEncoding` | `'png' \| 'jpeg' \| 'webp' \| 'avif'` | `'png'` | Output format for rendered images
|
|
143
|
-
| `password` | `string` | — | Password for encrypted PDFs
|
|
144
|
-
| `scale` | `number` | `
|
|
171
|
+
| Option | Type | Default | Description |
|
|
172
|
+
| --------------- | ------------------------------------- | ------- | --------------------------------------------- |
|
|
173
|
+
| `concurrency` | `number` | `1` | Number of pages processed in parallel |
|
|
174
|
+
| `imageEncoding` | `'png' \| 'jpeg' \| 'webp' \| 'avif'` | `'png'` | Output format for rendered images |
|
|
175
|
+
| `password` | `string` | — | Password for encrypted PDFs |
|
|
176
|
+
| `scale` | `number` | `1.0` | Rendering scale (1.0 = 72 DPI, 2.0 = 144 DPI) |
|
|
145
177
|
|
|
146
178
|
---
|
|
147
179
|
|
package/dist/core.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { Canvas, CanvasRenderingContext2D } from '@napi-rs/canvas';
|
|
1
2
|
export declare enum PROCESSING_TYPE {
|
|
2
3
|
IMAGE = "IMAGE",
|
|
3
4
|
MIXED = "MIXED",
|
|
4
5
|
TEXT = "TEXT"
|
|
5
6
|
}
|
|
6
|
-
import { Canvas, CanvasRenderingContext2D } from '@napi-rs/canvas';
|
|
7
7
|
export interface AfppParseOptions {
|
|
8
8
|
/**
|
|
9
9
|
* Concurrency level for page processing. Defaults to 1.
|
|
@@ -22,9 +22,11 @@ export interface AfppParseOptions {
|
|
|
22
22
|
*/
|
|
23
23
|
password?: string;
|
|
24
24
|
/**
|
|
25
|
-
* Scale
|
|
26
|
-
*
|
|
27
|
-
*
|
|
25
|
+
* Scale factor for image rendering. Defaults to 1.0.
|
|
26
|
+
* - 1.0: Standard quality (72 DPI equivalent)
|
|
27
|
+
* - 2.0: High quality (144 DPI equivalent, 4x memory)
|
|
28
|
+
* - 3.0: Print quality (216 DPI equivalent, 9x memory)
|
|
29
|
+
* @default 1.0
|
|
28
30
|
*/
|
|
29
31
|
scale?: number;
|
|
30
32
|
}
|
|
@@ -39,6 +41,28 @@ export interface PdfCanvasFactory {
|
|
|
39
41
|
destroy(canvasAndContext: CanvasAndContext): void;
|
|
40
42
|
reset(canvasAndContext: CanvasAndContext, width: number, height: number): void;
|
|
41
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Result yielded by streaming PDF parser
|
|
46
|
+
*/
|
|
47
|
+
export interface StreamingResult<T> {
|
|
48
|
+
data: T;
|
|
49
|
+
pageCount: number;
|
|
50
|
+
pageNumber: number;
|
|
51
|
+
}
|
|
42
52
|
export declare function parsePdfFile(type: PROCESSING_TYPE.IMAGE, input: Buffer | string | Uint8Array | URL, options?: AfppParseOptions, callback?: undefined): Promise<Buffer[]>;
|
|
43
53
|
export declare function parsePdfFile(type: PROCESSING_TYPE.TEXT, input: Buffer | string | Uint8Array | URL, options?: AfppParseOptions, callback?: undefined): Promise<string[]>;
|
|
44
54
|
export declare function parsePdfFile<T>(type: PROCESSING_TYPE.MIXED, input: Buffer | string | Uint8Array | URL, options: AfppParseOptions, callback: PageProcessor<T>): Promise<T[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Streaming PDF parser that yields results as pages are processed.
|
|
57
|
+
* Useful for large PDFs where you want to process pages as they become available
|
|
58
|
+
* rather than waiting for all pages to complete.
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* for await (const { pageNumber, data } of streamPdfFile(PROCESSING_TYPE.IMAGE, './large.pdf')) {
|
|
63
|
+
* await saveImage(data, `page-${pageNumber}.png`);
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function streamPdfFile(type: PROCESSING_TYPE.IMAGE, input: Buffer | string | Uint8Array | URL, options?: AfppParseOptions): AsyncGenerator<StreamingResult<Buffer>>;
|
|
68
|
+
export declare function streamPdfFile(type: PROCESSING_TYPE.TEXT, input: Buffer | string | Uint8Array | URL, options?: AfppParseOptions): AsyncGenerator<StreamingResult<string>>;
|
package/dist/core.js
CHANGED
|
@@ -5,15 +5,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.PROCESSING_TYPE = void 0;
|
|
7
7
|
exports.parsePdfFile = parsePdfFile;
|
|
8
|
+
exports.streamPdfFile = streamPdfFile;
|
|
9
|
+
const promises_1 = require("node:fs/promises");
|
|
10
|
+
const p_limit_1 = __importDefault(require("p-limit"));
|
|
11
|
+
const pdf_mjs_1 = require("pdfjs-dist/legacy/build/pdf.mjs");
|
|
8
12
|
var PROCESSING_TYPE;
|
|
9
13
|
(function (PROCESSING_TYPE) {
|
|
10
14
|
PROCESSING_TYPE["IMAGE"] = "IMAGE";
|
|
11
15
|
PROCESSING_TYPE["MIXED"] = "MIXED";
|
|
12
16
|
PROCESSING_TYPE["TEXT"] = "TEXT";
|
|
13
17
|
})(PROCESSING_TYPE || (exports.PROCESSING_TYPE = PROCESSING_TYPE = {}));
|
|
14
|
-
const promises_1 = require("node:fs/promises");
|
|
15
|
-
const p_limit_1 = __importDefault(require("p-limit"));
|
|
16
|
-
const pdf_mjs_1 = require("pdfjs-dist/legacy/build/pdf.mjs");
|
|
17
18
|
const processPdfPageTypeMixed = async (page, canvasFactory, pageNumber, pageCount, scale, encoding, callback) => {
|
|
18
19
|
const textContent = await page.getTextContent({
|
|
19
20
|
includeMarkedContent: false,
|
|
@@ -22,17 +23,28 @@ const processPdfPageTypeMixed = async (page, canvasFactory, pageNumber, pageCoun
|
|
|
22
23
|
if (items.length === 0) {
|
|
23
24
|
const viewport = page.getViewport({ scale });
|
|
24
25
|
const canvasAndContext = canvasFactory.create(viewport.width, viewport.height);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
try {
|
|
27
|
+
await page.render({
|
|
28
|
+
canvas: canvasAndContext.canvas,
|
|
29
|
+
canvasContext: canvasAndContext.context,
|
|
30
|
+
viewport,
|
|
31
|
+
}).promise;
|
|
32
|
+
//@ts-expect-error this should be fixed in release
|
|
33
|
+
const imageBuffer = await canvasAndContext.canvas.encode(encoding);
|
|
34
|
+
return callback(imageBuffer, pageNumber, pageCount);
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
canvasFactory.destroy(canvasAndContext);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
let pageText = '';
|
|
41
|
+
for (const item of items) {
|
|
42
|
+
if (item.str) {
|
|
43
|
+
if (pageText)
|
|
44
|
+
pageText += ' ';
|
|
45
|
+
pageText += item.str;
|
|
46
|
+
}
|
|
34
47
|
}
|
|
35
|
-
const pageText = items.map((item) => item.str || '').join(' ');
|
|
36
48
|
return callback(pageText, pageNumber, pageCount);
|
|
37
49
|
};
|
|
38
50
|
const processPdfPageTypeText = async (page) => {
|
|
@@ -44,21 +56,33 @@ const processPdfPageTypeText = async (page) => {
|
|
|
44
56
|
return '';
|
|
45
57
|
}
|
|
46
58
|
else {
|
|
47
|
-
|
|
59
|
+
let pageText = '';
|
|
60
|
+
for (const item of items) {
|
|
61
|
+
if (item.str) {
|
|
62
|
+
if (pageText)
|
|
63
|
+
pageText += ' ';
|
|
64
|
+
pageText += item.str;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return pageText;
|
|
48
68
|
}
|
|
49
69
|
};
|
|
50
70
|
const processPdfPageTypeImage = async (page, canvasFactory, pageNumber, pageCount, scale, encoding) => {
|
|
51
71
|
const viewport = page.getViewport({ scale });
|
|
52
72
|
const canvasAndContext = canvasFactory.create(viewport.width, viewport.height);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
73
|
+
try {
|
|
74
|
+
await page.render({
|
|
75
|
+
canvas: canvasAndContext.canvas,
|
|
76
|
+
canvasContext: canvasAndContext.context,
|
|
77
|
+
viewport,
|
|
78
|
+
}).promise;
|
|
79
|
+
//@ts-expect-error this should be fixed in release
|
|
80
|
+
const imageBuffer = await canvasAndContext.canvas.encode(encoding);
|
|
81
|
+
return imageBuffer;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
canvasFactory.destroy(canvasAndContext);
|
|
85
|
+
}
|
|
62
86
|
};
|
|
63
87
|
const validateParameters = async (input, options) => {
|
|
64
88
|
const documentInitParameters = {};
|
|
@@ -80,7 +104,11 @@ const validateParameters = async (input, options) => {
|
|
|
80
104
|
}
|
|
81
105
|
documentInitParameters.password = options?.password;
|
|
82
106
|
documentInitParameters.verbosity = pdf_mjs_1.VerbosityLevel.ERRORS;
|
|
83
|
-
|
|
107
|
+
// Performance optimizations for local file processing
|
|
108
|
+
documentInitParameters.disableAutoFetch = true; // Don't prefetch - we have full data
|
|
109
|
+
documentInitParameters.disableStream = true; // Don't stream - we have full data
|
|
110
|
+
documentInitParameters.disableRange = true; // Don't use range requests - we have full data
|
|
111
|
+
const scale = options?.scale ?? 1.0;
|
|
84
112
|
const concurrency = options?.concurrency ?? 1;
|
|
85
113
|
const encoding = options?.imageEncoding ?? 'png';
|
|
86
114
|
if (!['avif', 'jpeg', 'png', 'webp'].includes(encoding)) {
|
|
@@ -93,49 +121,82 @@ async function parsePdfFile(type, input, options, callback) {
|
|
|
93
121
|
const limit = (0, p_limit_1.default)(concurrency);
|
|
94
122
|
const loadingTask = (0, pdf_mjs_1.getDocument)(documentInitParameters);
|
|
95
123
|
const pdfDocument = await loadingTask.promise;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (
|
|
99
|
-
|
|
124
|
+
try {
|
|
125
|
+
const { numPages } = pdfDocument;
|
|
126
|
+
if (type === PROCESSING_TYPE.MIXED) {
|
|
127
|
+
if (!callback || typeof callback !== 'function') {
|
|
128
|
+
throw new Error(`Invalid callback type: ${typeof callback}`);
|
|
129
|
+
}
|
|
130
|
+
const results = Array.from({ length: numPages });
|
|
131
|
+
const pageTasks = Array.from({ length: numPages }, (_, i) => {
|
|
132
|
+
const pageNum = i + 1;
|
|
133
|
+
return limit(async () => {
|
|
134
|
+
const page = await pdfDocument.getPage(pageNum);
|
|
135
|
+
const canvasFactory = pdfDocument.canvasFactory;
|
|
136
|
+
const result = await processPdfPageTypeMixed(page, canvasFactory, pageNum, numPages, scale, encoding, callback);
|
|
137
|
+
results[i] = result;
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
await Promise.all(pageTasks);
|
|
141
|
+
return results;
|
|
100
142
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
143
|
+
if (type === PROCESSING_TYPE.TEXT) {
|
|
144
|
+
const results = Array.from({ length: numPages });
|
|
145
|
+
const pageTasks = Array.from({ length: numPages }, (_, i) => {
|
|
146
|
+
const pageNum = i + 1;
|
|
147
|
+
return limit(async () => {
|
|
148
|
+
const page = await pdfDocument.getPage(pageNum);
|
|
149
|
+
results[i] = await processPdfPageTypeText(page);
|
|
150
|
+
});
|
|
109
151
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
152
|
+
await Promise.all(pageTasks);
|
|
153
|
+
return results;
|
|
154
|
+
}
|
|
155
|
+
if (type === PROCESSING_TYPE.IMAGE) {
|
|
156
|
+
const results = Array.from({ length: numPages });
|
|
157
|
+
const pageTasks = Array.from({ length: numPages }, (_, i) => {
|
|
158
|
+
const pageNum = i + 1;
|
|
159
|
+
return limit(async () => {
|
|
160
|
+
const page = await pdfDocument.getPage(pageNum);
|
|
161
|
+
const canvasFactory = pdfDocument.canvasFactory;
|
|
162
|
+
results[i] = await processPdfPageTypeImage(page, canvasFactory, pageNum, numPages, scale, encoding);
|
|
163
|
+
});
|
|
121
164
|
});
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
165
|
+
await Promise.all(pageTasks);
|
|
166
|
+
return results;
|
|
167
|
+
}
|
|
168
|
+
throw new Error('Invalid PROCESSING_TYPE');
|
|
125
169
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
170
|
+
finally {
|
|
171
|
+
// Clean up pdfjs resources to prevent memory leaks
|
|
172
|
+
pdfDocument.cleanup();
|
|
173
|
+
await pdfDocument.destroy();
|
|
174
|
+
loadingTask.destroy();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async function* streamPdfFile(type, input, options) {
|
|
178
|
+
const { documentInitParameters, encoding, scale } = await validateParameters(input, options);
|
|
179
|
+
const loadingTask = (0, pdf_mjs_1.getDocument)(documentInitParameters);
|
|
180
|
+
const pdfDocument = await loadingTask.promise;
|
|
181
|
+
try {
|
|
182
|
+
const { numPages } = pdfDocument;
|
|
183
|
+
for (let pageNum = 1; pageNum <= numPages; pageNum++) {
|
|
184
|
+
const page = await pdfDocument.getPage(pageNum);
|
|
185
|
+
if (type === PROCESSING_TYPE.IMAGE) {
|
|
132
186
|
const canvasFactory = pdfDocument.canvasFactory;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
187
|
+
const data = await processPdfPageTypeImage(page, canvasFactory, pageNum, numPages, scale, encoding);
|
|
188
|
+
yield { data, pageCount: numPages, pageNumber: pageNum };
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
const data = await processPdfPageTypeText(page);
|
|
192
|
+
yield { data, pageCount: numPages, pageNumber: pageNum };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
pdfDocument.cleanup();
|
|
198
|
+
await pdfDocument.destroy();
|
|
199
|
+
loadingTask.destroy();
|
|
138
200
|
}
|
|
139
|
-
throw new Error('Invalid PROCESSING_TYPE');
|
|
140
201
|
}
|
|
141
202
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pdf2string = exports.pdf2image = exports.parsePdf = void 0;
|
|
3
|
+
exports.streamPdf2string = exports.streamPdf2image = exports.pdf2string = exports.pdf2image = exports.parsePdf = void 0;
|
|
4
4
|
var parsePdf_1 = require("./parsePdf");
|
|
5
5
|
Object.defineProperty(exports, "parsePdf", { enumerable: true, get: function () { return parsePdf_1.parsePdf; } });
|
|
6
6
|
var pdf2image_1 = require("./pdf2image");
|
|
7
7
|
Object.defineProperty(exports, "pdf2image", { enumerable: true, get: function () { return pdf2image_1.pdf2image; } });
|
|
8
8
|
var pdf2string_1 = require("./pdf2string");
|
|
9
9
|
Object.defineProperty(exports, "pdf2string", { enumerable: true, get: function () { return pdf2string_1.pdf2string; } });
|
|
10
|
+
var streamPdf_1 = require("./streamPdf");
|
|
11
|
+
Object.defineProperty(exports, "streamPdf2image", { enumerable: true, get: function () { return streamPdf_1.streamPdf2image; } });
|
|
12
|
+
Object.defineProperty(exports, "streamPdf2string", { enumerable: true, get: function () { return streamPdf_1.streamPdf2string; } });
|
|
10
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,+CAA8C;AAArC,oGAAA,QAAQ,OAAA;AACjB,iDAAgD;AAAvC,sGAAA,SAAS,OAAA;AAClB,mDAAkD;AAAzC,wGAAA,UAAU,OAAA;AACnB,iDAAwE;AAA/D,4GAAA,eAAe,OAAA;AAAE,6GAAA,gBAAgB,OAAA"}
|
package/dist/parsePdf.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { AfppParseOptions, PageProcessor } from './core';
|
|
|
8
8
|
* @param {Buffer|Uint8Array|string|URL} input - The PDF source, which can be a file path, URL, Buffer, or Uint8Array.
|
|
9
9
|
* @param {Object} [options] - Optional parsing options for customizing the PDF parsing process.
|
|
10
10
|
* @param {string} [options.password] - The password for encrypted PDF files, if required.
|
|
11
|
-
* @param {number} [options.scale=
|
|
11
|
+
* @param {number} [options.scale=1] - Scale factor for rendering pages (affects image resolution).
|
|
12
12
|
* @param {number} [options.concurrency=1] - Number of pages to process in parallel.
|
|
13
13
|
* @param {'png' | 'jpeg' | 'webp' | 'avif'} [options.imageEncoding='png'] - Image format for rendered PDF pages.
|
|
14
14
|
* @param {function} callback - callback function to add another layer of processing, default callback returns content of page withouth any added processing.
|
package/dist/parsePdf.js
CHANGED
|
@@ -11,7 +11,7 @@ const core_1 = require("./core");
|
|
|
11
11
|
* @param {Buffer|Uint8Array|string|URL} input - The PDF source, which can be a file path, URL, Buffer, or Uint8Array.
|
|
12
12
|
* @param {Object} [options] - Optional parsing options for customizing the PDF parsing process.
|
|
13
13
|
* @param {string} [options.password] - The password for encrypted PDF files, if required.
|
|
14
|
-
* @param {number} [options.scale=
|
|
14
|
+
* @param {number} [options.scale=1] - Scale factor for rendering pages (affects image resolution).
|
|
15
15
|
* @param {number} [options.concurrency=1] - Number of pages to process in parallel.
|
|
16
16
|
* @param {'png' | 'jpeg' | 'webp' | 'avif'} [options.imageEncoding='png'] - Image format for rendered PDF pages.
|
|
17
17
|
* @param {function} callback - callback function to add another layer of processing, default callback returns content of page withouth any added processing.
|
package/dist/pdf2string.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf2string.js","sourceRoot":"","sources":["../src/pdf2string.ts"],"names":[],"mappings":";;;AAAA,yCAIwB;
|
|
1
|
+
{"version":3,"file":"pdf2string.js","sourceRoot":"","sources":["../src/pdf2string.ts"],"names":[],"mappings":";;;AAAA,yCAIwB;AAExB;;;;;;;;;;;;;;;GAeG;AAEI,MAAM,UAAU,GAAG,KAAK,EAC7B,KAAyC,EACzC,OAA0B,EAC1B,EAAE,CAAC,IAAA,mBAAY,EAAC,sBAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAH3C,QAAA,UAAU,cAGiC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { AfppParseOptions, StreamingResult } from './core';
|
|
2
|
+
/**
|
|
3
|
+
* Streams PDF pages as images, yielding each page as it's processed.
|
|
4
|
+
* Useful for large PDFs where you want to process pages incrementally.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* for await (const { pageNumber, data } of streamPdf2image('./large.pdf')) {
|
|
9
|
+
* await fs.writeFile(`page-${pageNumber}.png`, data);
|
|
10
|
+
* }
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @param input - The PDF source (file path, URL, Buffer, or Uint8Array)
|
|
14
|
+
* @param options - Optional parsing options
|
|
15
|
+
* @yields {StreamingResult<Buffer>} Page data with page number and total count
|
|
16
|
+
*/
|
|
17
|
+
export declare const streamPdf2image: (input: Buffer | string | Uint8Array | URL, options?: AfppParseOptions) => AsyncGenerator<StreamingResult<Buffer>>;
|
|
18
|
+
/**
|
|
19
|
+
* Streams PDF pages as text, yielding each page as it's processed.
|
|
20
|
+
* Useful for large PDFs where you want to process pages incrementally.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* for await (const { pageNumber, data } of streamPdf2string('./large.pdf')) {
|
|
25
|
+
* console.log(`Page ${pageNumber}: ${data.substring(0, 100)}...`);
|
|
26
|
+
* }
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @param input - The PDF source (file path, URL, Buffer, or Uint8Array)
|
|
30
|
+
* @param options - Optional parsing options
|
|
31
|
+
* @yields {StreamingResult<string>} Page text with page number and total count
|
|
32
|
+
*/
|
|
33
|
+
export declare const streamPdf2string: (input: Buffer | string | Uint8Array | URL, options?: AfppParseOptions) => AsyncGenerator<StreamingResult<string>>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.streamPdf2string = exports.streamPdf2image = void 0;
|
|
4
|
+
const core_1 = require("./core");
|
|
5
|
+
/**
|
|
6
|
+
* Streams PDF pages as images, yielding each page as it's processed.
|
|
7
|
+
* Useful for large PDFs where you want to process pages incrementally.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* for await (const { pageNumber, data } of streamPdf2image('./large.pdf')) {
|
|
12
|
+
* await fs.writeFile(`page-${pageNumber}.png`, data);
|
|
13
|
+
* }
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* @param input - The PDF source (file path, URL, Buffer, or Uint8Array)
|
|
17
|
+
* @param options - Optional parsing options
|
|
18
|
+
* @yields {StreamingResult<Buffer>} Page data with page number and total count
|
|
19
|
+
*/
|
|
20
|
+
const streamPdf2image = (input, options) => (0, core_1.streamPdfFile)(core_1.PROCESSING_TYPE.IMAGE, input, options);
|
|
21
|
+
exports.streamPdf2image = streamPdf2image;
|
|
22
|
+
/**
|
|
23
|
+
* Streams PDF pages as text, yielding each page as it's processed.
|
|
24
|
+
* Useful for large PDFs where you want to process pages incrementally.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* for await (const { pageNumber, data } of streamPdf2string('./large.pdf')) {
|
|
29
|
+
* console.log(`Page ${pageNumber}: ${data.substring(0, 100)}...`);
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @param input - The PDF source (file path, URL, Buffer, or Uint8Array)
|
|
34
|
+
* @param options - Optional parsing options
|
|
35
|
+
* @yields {StreamingResult<string>} Page text with page number and total count
|
|
36
|
+
*/
|
|
37
|
+
const streamPdf2string = (input, options) => (0, core_1.streamPdfFile)(core_1.PROCESSING_TYPE.TEXT, input, options);
|
|
38
|
+
exports.streamPdf2string = streamPdf2string;
|
|
39
|
+
//# sourceMappingURL=streamPdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamPdf.js","sourceRoot":"","sources":["../src/streamPdf.ts"],"names":[],"mappings":";;;AAAA,yCAKwB;AAExB;;;;;;;;;;;;;;GAcG;AACI,MAAM,eAAe,GAAG,CAC7B,KAAyC,EACzC,OAA0B,EACe,EAAE,CAC3C,IAAA,oBAAa,EAAC,sBAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAJ1C,QAAA,eAAe,mBAI2B;AAEvD;;;;;;;;;;;;;;GAcG;AACI,MAAM,gBAAgB,GAAG,CAC9B,KAAyC,EACzC,OAA0B,EACe,EAAE,CAC3C,IAAA,oBAAa,EAAC,sBAAe,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAJzC,QAAA,gBAAgB,oBAIyB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "afpp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "Async Fast PDF Parser for Node.js — dependency-light, TypeScript-first, production-ready.",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
"build": "tsc -p tsconfig.build.json",
|
|
14
14
|
"commit": "git-cz",
|
|
15
15
|
"format": "prettier --write .",
|
|
16
|
-
"
|
|
17
|
-
"lint
|
|
16
|
+
"format:check": "prettier --check .",
|
|
17
|
+
"lint": "oxlint .",
|
|
18
|
+
"lint:fix": "oxlint . --fix",
|
|
18
19
|
"postbuild": "tsc-alias -p tsconfig.build.json",
|
|
19
20
|
"prebuild": "rm -rf dist",
|
|
20
21
|
"prepare": "husky",
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
"test": "NODE_ENV=test npx tsx --test --test-reporter @voxpelli/node-test-pretty-reporter test/*.test.ts",
|
|
23
24
|
"test:coverage": "c8 --reporter=lcov npm test",
|
|
24
25
|
"test:single": "NODE_ENV=test npx tsx --test --test-reporter @voxpelli/node-test-pretty-reporter",
|
|
26
|
+
"benchmark:cleanup": "npx tsx benchmark/cleanup.ts",
|
|
25
27
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
26
28
|
},
|
|
27
29
|
"repository": {
|
|
@@ -52,27 +54,22 @@
|
|
|
52
54
|
"devDependencies": {
|
|
53
55
|
"@commitlint/cli": "20.3.1",
|
|
54
56
|
"@commitlint/config-conventional": "20.3.1",
|
|
57
|
+
"@ianvs/prettier-plugin-sort-imports": "4.7.0",
|
|
55
58
|
"@semantic-release/changelog": "6.0.3",
|
|
56
59
|
"@semantic-release/git": "10.0.1",
|
|
57
|
-
"@types/node": "25.0.
|
|
60
|
+
"@types/node": "25.0.10",
|
|
58
61
|
"@voxpelli/node-test-pretty-reporter": "1.1.2",
|
|
59
62
|
"c8": "10.1.3",
|
|
60
63
|
"commitizen": "4.3.1",
|
|
61
64
|
"cz-conventional-changelog": "3.3.0",
|
|
62
|
-
"eslint": "9.39.2",
|
|
63
|
-
"eslint-config-prettier": "10.1.8",
|
|
64
|
-
"eslint-plugin-import": "2.32.0",
|
|
65
|
-
"eslint-plugin-perfectionist": "5.3.1",
|
|
66
|
-
"eslint-plugin-prettier": "5.5.5",
|
|
67
|
-
"eslint-plugin-promise": "7.2.1",
|
|
68
65
|
"husky": "9.1.7",
|
|
69
66
|
"lint-staged": "16.2.7",
|
|
70
|
-
"
|
|
67
|
+
"oxlint": "1.42.0",
|
|
68
|
+
"prettier": "3.8.1",
|
|
71
69
|
"semantic-release": "25.0.2",
|
|
72
70
|
"tsc-alias": "1.8.16",
|
|
73
71
|
"tsx": "4.21.0",
|
|
74
|
-
"typescript": "5.9.3"
|
|
75
|
-
"typescript-eslint": "8.50.0"
|
|
72
|
+
"typescript": "5.9.3"
|
|
76
73
|
},
|
|
77
74
|
"dependencies": {
|
|
78
75
|
"p-limit": "7.2.0",
|