unpdf 1.0.6 → 1.2.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 +35 -2
- package/dist/index.cjs +28 -0
- package/dist/index.d.cts +7 -1
- package/dist/index.d.mts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.mjs +28 -1
- package/dist/pdfjs.mjs +1 -1
- package/dist/types/src/display/annotation_layer.d.ts +5 -2
- package/dist/types/src/display/api.d.ts +30 -74
- package/dist/types/src/display/api_utils.d.ts +13 -0
- package/dist/types/src/display/canvas.d.ts +2 -2
- package/dist/types/src/display/display_utils.d.ts +2 -1
- package/dist/types/src/display/draw_layer.d.ts +2 -2
- package/dist/types/src/display/editor/alt_text.d.ts +1 -1
- package/dist/types/src/display/editor/annotation_editor_layer.d.ts +6 -6
- package/dist/types/src/display/editor/color_picker.d.ts +20 -1
- package/dist/types/src/display/editor/comment.d.ts +32 -0
- package/dist/types/src/display/editor/draw.d.ts +8 -8
- package/dist/types/src/display/editor/drawers/freedraw.d.ts +3 -3
- package/dist/types/src/display/editor/drawers/signaturedraw.d.ts +13 -13
- package/dist/types/src/display/editor/editor.d.ts +48 -5
- package/dist/types/src/display/editor/freetext.d.ts +9 -7
- package/dist/types/src/display/editor/highlight.d.ts +6 -3
- package/dist/types/src/display/editor/ink.d.ts +4 -0
- package/dist/types/src/display/editor/signature.d.ts +2 -0
- package/dist/types/src/display/editor/stamp.d.ts +2 -0
- package/dist/types/src/display/editor/toolbar.d.ts +3 -0
- package/dist/types/src/display/editor/tools.d.ts +14 -3
- package/dist/types/src/display/pdf_objects.d.ts +40 -0
- package/dist/types/src/display/text_layer.d.ts +9 -9
- package/dist/types/src/display/worker_options.d.ts +2 -2
- package/dist/types/src/pdf.d.ts +3 -2
- package/dist/types/src/shared/scripting_utils.d.ts +2 -0
- package/dist/types/src/shared/util.d.ts +2 -2
- package/dist/types/web/app_options.d.ts +1 -1
- package/dist/types/web/autolinker.d.ts +2 -2
- package/dist/types/web/base_pdf_page_view.d.ts +0 -1
- package/dist/types/web/event_utils.d.ts +1 -1
- package/dist/types/web/genericl10n.d.ts +5 -5
- package/dist/types/web/l10n.d.ts +2 -2
- package/dist/types/web/pdf_find_controller.d.ts +1 -1
- package/dist/types/web/pdf_page_view.d.ts +9 -7
- package/dist/types/web/pdf_thumbnail_view.d.ts +2 -10
- package/dist/types/web/pdf_viewer.d.ts +42 -1
- package/dist/types/web/text_accessibility.d.ts +1 -1
- package/dist/types/web/text_layer_builder.d.ts +4 -4
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ This library is also intended as a modern alternative to the unmaintained but st
|
|
|
10
10
|
|
|
11
11
|
- 🏗️ Made for Node.js, browser and serverless environments
|
|
12
12
|
- 🪭 Includes serverless build of PDF.js ([`unpdf/pdfjs`](./package.json#L34))
|
|
13
|
-
- 💬 Extract [text](#extract-text-from-pdf) and [images](#extractimages) from PDF files
|
|
13
|
+
- 💬 Extract [text](#extract-text-from-pdf), [links](#extractlinks), and [images](#extractimages) from PDF files
|
|
14
14
|
- 🧠 Perfect for AI applications and PDF summarization
|
|
15
15
|
- 🧱 Opt-in to legacy PDF.js build
|
|
16
16
|
- 💨 Zero dependencies
|
|
@@ -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.
|
|
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
|
|
|
@@ -169,6 +169,39 @@ function extractText(
|
|
|
169
169
|
}>
|
|
170
170
|
```
|
|
171
171
|
|
|
172
|
+
### `extractLinks`
|
|
173
|
+
|
|
174
|
+
Extracts all links from a PDF document, including hyperlinks and external URLs.
|
|
175
|
+
|
|
176
|
+
**Type Declaration**
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
function extractLinks(
|
|
180
|
+
data: DocumentInitParameters['data'] | PDFDocumentProxy,
|
|
181
|
+
): Promise<{
|
|
182
|
+
totalPages: number
|
|
183
|
+
links: string[]
|
|
184
|
+
}>
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Example**
|
|
188
|
+
|
|
189
|
+
```ts
|
|
190
|
+
import { readFile } from 'node:fs/promises'
|
|
191
|
+
import { extractLinks, getDocumentProxy } from 'unpdf'
|
|
192
|
+
|
|
193
|
+
// Load a PDF file
|
|
194
|
+
const buffer = await readFile('./document.pdf')
|
|
195
|
+
const pdf = await getDocumentProxy(new Uint8Array(buffer))
|
|
196
|
+
|
|
197
|
+
// Extract all links from the PDF
|
|
198
|
+
const { totalPages, links } = await extractLinks(pdf)
|
|
199
|
+
|
|
200
|
+
console.log(`Total pages: ${totalPages}`)
|
|
201
|
+
console.log(`Found ${links.length} links:`)
|
|
202
|
+
for (const link of links) console.log(link)
|
|
203
|
+
```
|
|
204
|
+
|
|
172
205
|
### `extractImages`
|
|
173
206
|
|
|
174
207
|
Extracts images from a specific page of a PDF document, including necessary metadata such as width, height, and calculated color channels.
|
package/dist/index.cjs
CHANGED
|
@@ -182,6 +182,7 @@ 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;
|
|
@@ -203,6 +204,28 @@ async function createIsomorphicCanvasFactory(canvasImport) {
|
|
|
203
204
|
throw new Error("Unsupported environment for canvas creation.");
|
|
204
205
|
}
|
|
205
206
|
|
|
207
|
+
async function extractLinks$1(data) {
|
|
208
|
+
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
|
|
209
|
+
const pageLinks = await Promise.all(
|
|
210
|
+
Array.from({ length: pdf.numPages }, (_, i) => getPageLinks(pdf, i + 1))
|
|
211
|
+
);
|
|
212
|
+
return {
|
|
213
|
+
totalPages: pdf.numPages,
|
|
214
|
+
links: pageLinks.flat()
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
async function getPageLinks(document, pageNumber) {
|
|
218
|
+
const page = await document.getPage(pageNumber);
|
|
219
|
+
const annotations = await page.getAnnotations();
|
|
220
|
+
const links = [];
|
|
221
|
+
for (const annotation of annotations) {
|
|
222
|
+
if (annotation.subtype === "Link" && annotation.url) {
|
|
223
|
+
links.push(annotation.url);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return links;
|
|
227
|
+
}
|
|
228
|
+
|
|
206
229
|
async function getMeta$1(data) {
|
|
207
230
|
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
|
|
208
231
|
const meta = await pdf.getMetadata();
|
|
@@ -252,10 +275,15 @@ const renderPageAsImage = async (...args) => {
|
|
|
252
275
|
await resolvePDFJSImport();
|
|
253
276
|
return await renderPageAsImage$1(...args);
|
|
254
277
|
};
|
|
278
|
+
const extractLinks = async (...args) => {
|
|
279
|
+
await resolvePDFJSImport();
|
|
280
|
+
return await extractLinks$1(...args);
|
|
281
|
+
};
|
|
255
282
|
|
|
256
283
|
exports.configureUnPDF = configureUnPDF;
|
|
257
284
|
exports.definePDFJSModule = definePDFJSModule;
|
|
258
285
|
exports.extractImages = extractImages;
|
|
286
|
+
exports.extractLinks = extractLinks;
|
|
259
287
|
exports.extractText = extractText;
|
|
260
288
|
exports.getDocumentProxy = getDocumentProxy;
|
|
261
289
|
exports.getMeta = getMeta;
|
package/dist/index.d.cts
CHANGED
|
@@ -34,6 +34,11 @@ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFD
|
|
|
34
34
|
height?: number;
|
|
35
35
|
}): Promise<ArrayBuffer>;
|
|
36
36
|
|
|
37
|
+
declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
38
|
+
totalPages: number;
|
|
39
|
+
links: string[];
|
|
40
|
+
}>;
|
|
41
|
+
|
|
37
42
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
38
43
|
info: Record<string, any>;
|
|
39
44
|
metadata: Record<string, any>;
|
|
@@ -86,5 +91,6 @@ declare const getMeta: typeof getMeta$1;
|
|
|
86
91
|
declare const extractText: typeof extractText$1;
|
|
87
92
|
declare const extractImages: typeof extractImages$1;
|
|
88
93
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
94
|
+
declare const extractLinks: typeof extractLinks$1;
|
|
89
95
|
|
|
90
|
-
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
|
96
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractLinks, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.d.mts
CHANGED
|
@@ -34,6 +34,11 @@ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFD
|
|
|
34
34
|
height?: number;
|
|
35
35
|
}): Promise<ArrayBuffer>;
|
|
36
36
|
|
|
37
|
+
declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
38
|
+
totalPages: number;
|
|
39
|
+
links: string[];
|
|
40
|
+
}>;
|
|
41
|
+
|
|
37
42
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
38
43
|
info: Record<string, any>;
|
|
39
44
|
metadata: Record<string, any>;
|
|
@@ -86,5 +91,6 @@ declare const getMeta: typeof getMeta$1;
|
|
|
86
91
|
declare const extractText: typeof extractText$1;
|
|
87
92
|
declare const extractImages: typeof extractImages$1;
|
|
88
93
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
94
|
+
declare const extractLinks: typeof extractLinks$1;
|
|
89
95
|
|
|
90
|
-
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
|
96
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractLinks, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,11 @@ declare function renderPageAsImage$1(data: DocumentInitParameters['data'] | PDFD
|
|
|
34
34
|
height?: number;
|
|
35
35
|
}): Promise<ArrayBuffer>;
|
|
36
36
|
|
|
37
|
+
declare function extractLinks$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
38
|
+
totalPages: number;
|
|
39
|
+
links: string[];
|
|
40
|
+
}>;
|
|
41
|
+
|
|
37
42
|
declare function getMeta$1(data: DocumentInitParameters['data'] | PDFDocumentProxy): Promise<{
|
|
38
43
|
info: Record<string, any>;
|
|
39
44
|
metadata: Record<string, any>;
|
|
@@ -86,5 +91,6 @@ declare const getMeta: typeof getMeta$1;
|
|
|
86
91
|
declare const extractText: typeof extractText$1;
|
|
87
92
|
declare const extractImages: typeof extractImages$1;
|
|
88
93
|
declare const renderPageAsImage: typeof renderPageAsImage$1;
|
|
94
|
+
declare const extractLinks: typeof extractLinks$1;
|
|
89
95
|
|
|
90
|
-
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
|
96
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractLinks, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
package/dist/index.mjs
CHANGED
|
@@ -180,6 +180,7 @@ 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;
|
|
@@ -201,6 +202,28 @@ async function createIsomorphicCanvasFactory(canvasImport) {
|
|
|
201
202
|
throw new Error("Unsupported environment for canvas creation.");
|
|
202
203
|
}
|
|
203
204
|
|
|
205
|
+
async function extractLinks$1(data) {
|
|
206
|
+
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
|
|
207
|
+
const pageLinks = await Promise.all(
|
|
208
|
+
Array.from({ length: pdf.numPages }, (_, i) => getPageLinks(pdf, i + 1))
|
|
209
|
+
);
|
|
210
|
+
return {
|
|
211
|
+
totalPages: pdf.numPages,
|
|
212
|
+
links: pageLinks.flat()
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
async function getPageLinks(document, pageNumber) {
|
|
216
|
+
const page = await document.getPage(pageNumber);
|
|
217
|
+
const annotations = await page.getAnnotations();
|
|
218
|
+
const links = [];
|
|
219
|
+
for (const annotation of annotations) {
|
|
220
|
+
if (annotation.subtype === "Link" && annotation.url) {
|
|
221
|
+
links.push(annotation.url);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return links;
|
|
225
|
+
}
|
|
226
|
+
|
|
204
227
|
async function getMeta$1(data) {
|
|
205
228
|
const pdf = isPDFDocumentProxy(data) ? data : await getDocumentProxy(data);
|
|
206
229
|
const meta = await pdf.getMetadata();
|
|
@@ -250,5 +273,9 @@ const renderPageAsImage = async (...args) => {
|
|
|
250
273
|
await resolvePDFJSImport();
|
|
251
274
|
return await renderPageAsImage$1(...args);
|
|
252
275
|
};
|
|
276
|
+
const extractLinks = async (...args) => {
|
|
277
|
+
await resolvePDFJSImport();
|
|
278
|
+
return await extractLinks$1(...args);
|
|
279
|
+
};
|
|
253
280
|
|
|
254
|
-
export { configureUnPDF, definePDFJSModule, extractImages, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|
|
281
|
+
export { configureUnPDF, definePDFJSModule, extractImages, extractLinks, extractText, getDocumentProxy, getMeta, getResolvedPDFJS, renderPageAsImage, resolvePDFJSImport };
|