@markitdownjs/pdf 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pdf-converter.d.ts +16 -33
- package/dist/pdf-converter.d.ts.map +1 -1
- package/dist/pdf-converter.js +250 -102
- package/dist/pdf-converter.js.map +1 -1
- package/package.json +12 -4
- package/dist/__tests__/pdf-converter.test.d.ts +0 -2
- package/dist/__tests__/pdf-converter.test.d.ts.map +0 -1
- package/dist/__tests__/pdf-converter.test.js +0 -39
- package/dist/__tests__/pdf-converter.test.js.map +0 -1
package/dist/pdf-converter.d.ts
CHANGED
|
@@ -4,49 +4,32 @@ export declare class PdfConverter implements Converter {
|
|
|
4
4
|
readonly id: "pdf";
|
|
5
5
|
readonly supportedMimeTypes: string[];
|
|
6
6
|
readonly supportedExtensions: string[];
|
|
7
|
+
canConvert(input: ConversionInput): Promise<boolean>;
|
|
8
|
+
convert(input: ConversionInput): Promise<ConversionResult>;
|
|
7
9
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @returns True if the input is a supported PDF.
|
|
10
|
+
* Detect multi-column layout by clustering text items by x-coordinate.
|
|
11
|
+
* Returns column groups sorted left-to-right.
|
|
11
12
|
*/
|
|
12
|
-
|
|
13
|
+
private detectColumns;
|
|
13
14
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* The converter dynamically imports pdfjs-dist, disables the worker, loads
|
|
17
|
-
* the PDF, and walks every page extracting text with positional data,
|
|
18
|
-
* annotations (links), and font-size information for heading detection.
|
|
19
|
-
* An AST is assembled first and then rendered to markdown.
|
|
20
|
-
*
|
|
21
|
-
* @param input - The conversion input containing PDF data.
|
|
22
|
-
* @returns A complete ConversionResult with markdown, AST, and metadata.
|
|
15
|
+
* Process a list of text items into AST nodes (headings and paragraphs).
|
|
23
16
|
*/
|
|
24
|
-
|
|
17
|
+
private processTextItems;
|
|
25
18
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* The transform array is `[scaleX, skewX, skewY, scaleY, x, y]`.
|
|
29
|
-
* The font size is derived from the absolute value of `scaleX`.
|
|
30
|
-
*
|
|
31
|
-
* @param item - A PDF text content item.
|
|
32
|
-
* @returns The detected font size, or 0 if unavailable.
|
|
19
|
+
* Detect tables by finding text items that align on consistent x-positions
|
|
20
|
+
* across multiple rows.
|
|
33
21
|
*/
|
|
34
|
-
private
|
|
22
|
+
private detectTables;
|
|
35
23
|
/**
|
|
36
|
-
*
|
|
37
|
-
* document body font size.
|
|
38
|
-
*
|
|
39
|
-
* @param text - The raw text of the line.
|
|
40
|
-
* @param fontSize - The font size of the line.
|
|
41
|
-
* @param bodyFontSize - The most common (body) font size in the document.
|
|
42
|
-
* @returns A HeadingInfo if the line qualifies as a heading, otherwise undefined.
|
|
24
|
+
* Group text items into rows by approximate y-position.
|
|
43
25
|
*/
|
|
44
|
-
private
|
|
26
|
+
private groupByRow;
|
|
45
27
|
/**
|
|
46
|
-
*
|
|
47
|
-
* @param data - The input data in any supported format.
|
|
48
|
-
* @returns The data as a Uint8Array.
|
|
28
|
+
* Build a TableNode AST node from TableData.
|
|
49
29
|
*/
|
|
30
|
+
private buildTableNode;
|
|
31
|
+
private extractFontSize;
|
|
32
|
+
private classifyHeading;
|
|
50
33
|
private toByteArray;
|
|
51
34
|
}
|
|
52
35
|
//# sourceMappingURL=pdf-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-converter.d.ts","sourceRoot":"","sources":["../src/pdf-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"pdf-converter.d.ts","sourceRoot":"","sources":["../src/pdf-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,gBAAgB,EAKjB,MAAM,sBAAsB,CAAC;AAgC9B,8DAA8D;AAC9D,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,EAAE,EAAG,KAAK,CAAU;IAC7B,QAAQ,CAAC,kBAAkB,WAAuB;IAClD,QAAQ,CAAC,mBAAmB,WAAY;IAElC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBpD,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmNhE;;;OAGG;IACH,OAAO,CAAC,aAAa;IAoCrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4DxB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAmEpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAqBlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,eAAe;YAuBT,WAAW;CAY1B"}
|
package/dist/pdf-converter.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { createNode, } from "@markitdownjs/shared";
|
|
2
2
|
import { MarkdownRenderer } from "@markitdownjs/ast";
|
|
3
|
+
/** Minimum text items per page to consider a PDF as having a text layer */
|
|
4
|
+
const SCANNED_PDF_THRESHOLD = 5;
|
|
5
|
+
/** Minimum x-gap (in PDF units) to consider items as separate columns */
|
|
6
|
+
const COLUMN_GAP_THRESHOLD = 50;
|
|
3
7
|
/** Convert PDF files to markdown via AST-first processing. */
|
|
4
8
|
export class PdfConverter {
|
|
5
9
|
id = "pdf";
|
|
6
10
|
supportedMimeTypes = ["application/pdf"];
|
|
7
11
|
supportedExtensions = [".pdf"];
|
|
8
|
-
/**
|
|
9
|
-
* Determine whether this converter can handle the given input.
|
|
10
|
-
* @param input - The conversion input to inspect.
|
|
11
|
-
* @returns True if the input is a supported PDF.
|
|
12
|
-
*/
|
|
13
12
|
async canConvert(input) {
|
|
14
13
|
if (input.mimeType && this.supportedMimeTypes.includes(input.mimeType)) {
|
|
15
14
|
return true;
|
|
@@ -32,23 +31,13 @@ export class PdfConverter {
|
|
|
32
31
|
}
|
|
33
32
|
return false;
|
|
34
33
|
}
|
|
35
|
-
/**
|
|
36
|
-
* Convert a PDF document into markdown via an AST intermediate.
|
|
37
|
-
*
|
|
38
|
-
* The converter dynamically imports pdfjs-dist, disables the worker, loads
|
|
39
|
-
* the PDF, and walks every page extracting text with positional data,
|
|
40
|
-
* annotations (links), and font-size information for heading detection.
|
|
41
|
-
* An AST is assembled first and then rendered to markdown.
|
|
42
|
-
*
|
|
43
|
-
* @param input - The conversion input containing PDF data.
|
|
44
|
-
* @returns A complete ConversionResult with markdown, AST, and metadata.
|
|
45
|
-
*/
|
|
46
34
|
async convert(input) {
|
|
47
35
|
const startTime = Date.now();
|
|
48
36
|
const data = await this.toByteArray(input.data);
|
|
49
37
|
const renderer = new MarkdownRenderer();
|
|
50
38
|
const opts = input.options ?? {};
|
|
51
39
|
const ratios = opts.headingSizeRatios ?? {};
|
|
40
|
+
const warnings = [];
|
|
52
41
|
let ast;
|
|
53
42
|
let markdown;
|
|
54
43
|
const headings = [];
|
|
@@ -57,21 +46,14 @@ export class PdfConverter {
|
|
|
57
46
|
let pdfTitle = "";
|
|
58
47
|
let pdfAuthor = "";
|
|
59
48
|
try {
|
|
60
|
-
// Use the legacy entry — runs under Node.js without a separate worker file.
|
|
61
|
-
// The non-legacy entry pulls in a Worker constructor reference that crashes
|
|
62
|
-
// pdfjs's fake-worker bootstrap when Worker is undefined.
|
|
63
49
|
const pdfjsLib = await import("pdfjs-dist/legacy/build/pdf.mjs");
|
|
64
50
|
const loadingTask = pdfjsLib.getDocument({
|
|
65
51
|
data,
|
|
66
|
-
// pdfjs runs `eval()` in some font/cmap paths; disable for safety + Node compat.
|
|
67
52
|
isEvalSupported: false,
|
|
68
|
-
// Inline the worker when no Worker global exists (Node.js).
|
|
69
|
-
// Not in DocumentInitParameters types but accepted at runtime by the legacy build.
|
|
70
53
|
...(typeof Worker === "undefined" ? { disableWorker: true } : {}),
|
|
71
54
|
});
|
|
72
55
|
const pdf = await loadingTask.promise;
|
|
73
56
|
pageCount = pdf.numPages;
|
|
74
|
-
// Extract PDF document metadata when available.
|
|
75
57
|
try {
|
|
76
58
|
const meta = await pdf.getMetadata();
|
|
77
59
|
const info = (meta?.info ?? {});
|
|
@@ -86,17 +68,32 @@ export class PdfConverter {
|
|
|
86
68
|
const page = await pdf.getPage(pageNum);
|
|
87
69
|
const textContent = await page.getTextContent();
|
|
88
70
|
const annotations = await page.getAnnotations();
|
|
89
|
-
// Collect
|
|
90
|
-
const
|
|
71
|
+
// Collect text items with positional data.
|
|
72
|
+
const textItems = [];
|
|
91
73
|
for (const item of textContent.items) {
|
|
92
74
|
if (!("str" in item) || !item.str)
|
|
93
75
|
continue;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
76
|
+
textItems.push({
|
|
77
|
+
str: item.str,
|
|
78
|
+
transform: item.transform ?? [1, 0, 0, 1, 0, 0],
|
|
79
|
+
fontSize: this.extractFontSize(item),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// Scanned PDF detection: check text density on first page.
|
|
83
|
+
if (pageNum === 1 && textItems.length < SCANNED_PDF_THRESHOLD) {
|
|
84
|
+
warnings.push({
|
|
85
|
+
converter: this.id,
|
|
86
|
+
message: `Page 1 has only ${textItems.length} text items — this may be a scanned/image PDF. Consider using @markitdownjs/image-ocr for better results.`,
|
|
87
|
+
severity: "warning",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
// Collect font sizes for heading classification.
|
|
91
|
+
const fontSizes = new Map();
|
|
92
|
+
for (const item of textItems) {
|
|
93
|
+
if (item.fontSize > 0) {
|
|
94
|
+
fontSizes.set(item.fontSize, (fontSizes.get(item.fontSize) ?? 0) + 1);
|
|
97
95
|
}
|
|
98
96
|
}
|
|
99
|
-
// Determine the body font size (most common).
|
|
100
97
|
let bodyFontSize = 0;
|
|
101
98
|
let maxCount = 0;
|
|
102
99
|
for (const [size, count] of fontSizes) {
|
|
@@ -110,58 +107,33 @@ export class PdfConverter {
|
|
|
110
107
|
for (const annot of annotations) {
|
|
111
108
|
if (annot.subtype === "Link" && annot.url) {
|
|
112
109
|
const rect = annot.rect;
|
|
113
|
-
// Store by approximate bounding box for lookup.
|
|
114
110
|
const key = `${Math.round(rect[0])},${Math.round(rect[1])},${Math.round(rect[2])},${Math.round(rect[3])}`;
|
|
115
111
|
linkMap.set(key, annot.url);
|
|
116
112
|
}
|
|
117
113
|
}
|
|
118
|
-
//
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
if (!trimmed)
|
|
126
|
-
return;
|
|
127
|
-
const heading = this.classifyHeading(trimmed, lastFontSize, bodyFontSize, ratios);
|
|
128
|
-
if (heading) {
|
|
129
|
-
headings.push(heading);
|
|
130
|
-
const level = heading.level;
|
|
131
|
-
pageNodes.push(createNode({
|
|
132
|
-
type: "heading",
|
|
133
|
-
level,
|
|
134
|
-
children: [createNode({ type: "text", value: heading.text })],
|
|
135
|
-
}));
|
|
114
|
+
// Detect multi-column layout.
|
|
115
|
+
const columns = this.detectColumns(textItems);
|
|
116
|
+
if (columns.length > 1) {
|
|
117
|
+
// Multi-column: process each column's items in reading order.
|
|
118
|
+
for (const col of columns) {
|
|
119
|
+
const colNodes = this.processTextItems(col.items, bodyFontSize, ratios, headings, linkMap);
|
|
120
|
+
pageNodes.push(...colNodes);
|
|
136
121
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
for (const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
continue;
|
|
151
|
-
const fontSize = this.extractFontSize(item);
|
|
152
|
-
const y = "transform" in item && item.transform ? item.transform[5] : 0;
|
|
153
|
-
// New line when Y position changes significantly or font size changes.
|
|
154
|
-
if (currentLine &&
|
|
155
|
-
(Math.abs(y - lastY) > fontSize * 0.5 ||
|
|
156
|
-
(fontSize !== lastFontSize && lastFontSize > 0))) {
|
|
157
|
-
flushLine();
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Single column: original behavior.
|
|
125
|
+
const colNodes = this.processTextItems(textItems, bodyFontSize, ratios, headings, linkMap);
|
|
126
|
+
pageNodes.push(...colNodes);
|
|
127
|
+
}
|
|
128
|
+
// Detect and emit tables if grid-aligned text is found.
|
|
129
|
+
const detectedTables = this.detectTables(textItems);
|
|
130
|
+
for (const tableData of detectedTables) {
|
|
131
|
+
tables.push(tableData);
|
|
132
|
+
const tableNode = this.buildTableNode(tableData);
|
|
133
|
+
if (tableNode) {
|
|
134
|
+
pageNodes.push(tableNode);
|
|
158
135
|
}
|
|
159
|
-
currentLine += str;
|
|
160
|
-
lastFontSize = fontSize;
|
|
161
|
-
lastY = y;
|
|
162
136
|
}
|
|
163
|
-
flushLine();
|
|
164
|
-
// Add page break between pages (not after the last page).
|
|
165
137
|
if (pageNum < pdf.numPages) {
|
|
166
138
|
pageNodes.push(createNode({
|
|
167
139
|
type: "page-break",
|
|
@@ -174,7 +146,6 @@ export class PdfConverter {
|
|
|
174
146
|
children: pageNodes,
|
|
175
147
|
});
|
|
176
148
|
markdown = renderer.render(ast);
|
|
177
|
-
// Apply post-render options.
|
|
178
149
|
if (opts.pageBreakMarker) {
|
|
179
150
|
markdown = markdown.replace(/\n\n---\n\n/g, `\n\n${opts.pageBreakMarker}\n\n`);
|
|
180
151
|
}
|
|
@@ -190,7 +161,13 @@ export class PdfConverter {
|
|
|
190
161
|
markdown = fm.join("\n") + "\n\n" + markdown;
|
|
191
162
|
}
|
|
192
163
|
}
|
|
193
|
-
catch {
|
|
164
|
+
catch (error) {
|
|
165
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
166
|
+
warnings.push({
|
|
167
|
+
converter: this.id,
|
|
168
|
+
message: `PDF parsing failed: ${message}`,
|
|
169
|
+
severity: "error",
|
|
170
|
+
});
|
|
194
171
|
ast = createNode({
|
|
195
172
|
type: "document",
|
|
196
173
|
children: [
|
|
@@ -232,17 +209,207 @@ export class PdfConverter {
|
|
|
232
209
|
outputSize: markdown.length,
|
|
233
210
|
pagesProcessed: pageCount,
|
|
234
211
|
},
|
|
212
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
235
213
|
};
|
|
236
214
|
}
|
|
237
215
|
/**
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
216
|
+
* Detect multi-column layout by clustering text items by x-coordinate.
|
|
217
|
+
* Returns column groups sorted left-to-right.
|
|
218
|
+
*/
|
|
219
|
+
detectColumns(items) {
|
|
220
|
+
if (items.length === 0)
|
|
221
|
+
return [];
|
|
222
|
+
// Extract x-positions from transform arrays.
|
|
223
|
+
const positions = items.map((item) => ({
|
|
224
|
+
item,
|
|
225
|
+
x: item.transform[4] ?? 0,
|
|
226
|
+
}));
|
|
227
|
+
// Sort by x position.
|
|
228
|
+
positions.sort((a, b) => a.x - b.x);
|
|
229
|
+
// Find gaps larger than threshold to split columns.
|
|
230
|
+
const posGroups = [[positions[0]]];
|
|
231
|
+
for (let i = 1; i < positions.length; i++) {
|
|
232
|
+
const prev = positions[i - 1];
|
|
233
|
+
const curr = positions[i];
|
|
234
|
+
if (curr.x - prev.x > COLUMN_GAP_THRESHOLD) {
|
|
235
|
+
posGroups.push([curr]);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
posGroups[posGroups.length - 1].push(curr);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (posGroups.length <= 1) {
|
|
242
|
+
// Single column — return all items as one group.
|
|
243
|
+
return [{ xMin: 0, xMax: 0, items }];
|
|
244
|
+
}
|
|
245
|
+
return posGroups.map((group) => ({
|
|
246
|
+
xMin: Math.min(...group.map((p) => p.x)),
|
|
247
|
+
xMax: Math.max(...group.map((p) => p.x)),
|
|
248
|
+
items: group.map((p) => p.item),
|
|
249
|
+
}));
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Process a list of text items into AST nodes (headings and paragraphs).
|
|
245
253
|
*/
|
|
254
|
+
processTextItems(items, bodyFontSize, ratios, headings, _linkMap) {
|
|
255
|
+
const nodes = [];
|
|
256
|
+
let currentLine = "";
|
|
257
|
+
let lastFontSize = 0;
|
|
258
|
+
let lastY = 0;
|
|
259
|
+
const flushLine = () => {
|
|
260
|
+
const trimmed = currentLine.trim();
|
|
261
|
+
if (!trimmed)
|
|
262
|
+
return;
|
|
263
|
+
const heading = this.classifyHeading(trimmed, lastFontSize, bodyFontSize, ratios);
|
|
264
|
+
if (heading) {
|
|
265
|
+
headings.push(heading);
|
|
266
|
+
const level = heading.level;
|
|
267
|
+
nodes.push(createNode({
|
|
268
|
+
type: "heading",
|
|
269
|
+
level,
|
|
270
|
+
children: [createNode({ type: "text", value: heading.text })],
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
nodes.push(createNode({
|
|
275
|
+
type: "paragraph",
|
|
276
|
+
children: [createNode({ type: "text", value: trimmed })],
|
|
277
|
+
}));
|
|
278
|
+
}
|
|
279
|
+
currentLine = "";
|
|
280
|
+
};
|
|
281
|
+
for (const item of items) {
|
|
282
|
+
if (!item.str)
|
|
283
|
+
continue;
|
|
284
|
+
const fontSize = item.fontSize;
|
|
285
|
+
const y = item.transform[5] ?? 0;
|
|
286
|
+
if (currentLine &&
|
|
287
|
+
(Math.abs(y - lastY) > fontSize * 0.5 || (fontSize !== lastFontSize && lastFontSize > 0))) {
|
|
288
|
+
flushLine();
|
|
289
|
+
}
|
|
290
|
+
currentLine += item.str;
|
|
291
|
+
lastFontSize = fontSize;
|
|
292
|
+
lastY = y;
|
|
293
|
+
}
|
|
294
|
+
flushLine();
|
|
295
|
+
return nodes;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Detect tables by finding text items that align on consistent x-positions
|
|
299
|
+
* across multiple rows.
|
|
300
|
+
*/
|
|
301
|
+
detectTables(items) {
|
|
302
|
+
if (items.length < 6)
|
|
303
|
+
return []; // Need at least 6 items for a 2x3 table
|
|
304
|
+
// Group items by approximate y-position (same row).
|
|
305
|
+
const rows = this.groupByRow(items);
|
|
306
|
+
if (rows.length < 2)
|
|
307
|
+
return [];
|
|
308
|
+
// Find x-positions that appear across multiple rows.
|
|
309
|
+
const xBuckets = new Map(); // x-bucket -> count of rows
|
|
310
|
+
for (const row of rows) {
|
|
311
|
+
const uniqueXs = new Set();
|
|
312
|
+
for (const item of row) {
|
|
313
|
+
const xBucket = Math.round((item.transform[4] ?? 0) / 10) * 10; // bucket by 10 units
|
|
314
|
+
uniqueXs.add(xBucket);
|
|
315
|
+
}
|
|
316
|
+
for (const x of uniqueXs) {
|
|
317
|
+
xBuckets.set(x, (xBuckets.get(x) ?? 0) + 1);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// Columns must appear in at least half the rows.
|
|
321
|
+
const minRowCount = Math.ceil(rows.length * 0.5);
|
|
322
|
+
const columnXs = Array.from(xBuckets.entries())
|
|
323
|
+
.filter(([_, count]) => count >= minRowCount)
|
|
324
|
+
.map(([x]) => x)
|
|
325
|
+
.sort((a, b) => a - b);
|
|
326
|
+
if (columnXs.length < 2)
|
|
327
|
+
return []; // Need at least 2 columns for a table
|
|
328
|
+
// Build the table grid.
|
|
329
|
+
const tableRows = [];
|
|
330
|
+
for (const row of rows) {
|
|
331
|
+
const cells = new Array(columnXs.length).fill("");
|
|
332
|
+
for (const item of row) {
|
|
333
|
+
const x = item.transform[4] ?? 0;
|
|
334
|
+
// Find closest column.
|
|
335
|
+
let bestCol = 0;
|
|
336
|
+
let bestDist = Infinity;
|
|
337
|
+
for (let c = 0; c < columnXs.length; c++) {
|
|
338
|
+
const dist = Math.abs(x - columnXs[c]);
|
|
339
|
+
if (dist < bestDist) {
|
|
340
|
+
bestDist = dist;
|
|
341
|
+
bestCol = c;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (bestDist < 30) {
|
|
345
|
+
cells[bestCol] = cells[bestCol] ? cells[bestCol] + " " + item.str : item.str;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (cells.some((c) => c.trim() !== "")) {
|
|
349
|
+
tableRows.push(cells);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
if (tableRows.length < 2)
|
|
353
|
+
return [];
|
|
354
|
+
const headers = tableRows[0];
|
|
355
|
+
const dataRows = tableRows.slice(1);
|
|
356
|
+
return [
|
|
357
|
+
{
|
|
358
|
+
headers,
|
|
359
|
+
rows: dataRows,
|
|
360
|
+
},
|
|
361
|
+
];
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Group text items into rows by approximate y-position.
|
|
365
|
+
*/
|
|
366
|
+
groupByRow(items) {
|
|
367
|
+
const sorted = [...items].sort((a, b) => (b.transform[5] ?? 0) - (a.transform[5] ?? 0));
|
|
368
|
+
const rows = [];
|
|
369
|
+
let currentRow = [sorted[0]];
|
|
370
|
+
let lastY = sorted[0].transform[5] ?? 0;
|
|
371
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
372
|
+
const item = sorted[i];
|
|
373
|
+
const y = item.transform[5] ?? 0;
|
|
374
|
+
if (Math.abs(y - lastY) < item.fontSize * 0.5) {
|
|
375
|
+
currentRow.push(item);
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
rows.push(currentRow.sort((a, b) => (a.transform[4] ?? 0) - (b.transform[4] ?? 0)));
|
|
379
|
+
currentRow = [item];
|
|
380
|
+
lastY = y;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
rows.push(currentRow.sort((a, b) => (a.transform[4] ?? 0) - (b.transform[4] ?? 0)));
|
|
384
|
+
return rows;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Build a TableNode AST node from TableData.
|
|
388
|
+
*/
|
|
389
|
+
buildTableNode(data) {
|
|
390
|
+
if (data.headers.length === 0)
|
|
391
|
+
return null;
|
|
392
|
+
const headerRow = createNode({
|
|
393
|
+
type: "table-row",
|
|
394
|
+
isHeader: true,
|
|
395
|
+
children: data.headers.map((h) => createNode({
|
|
396
|
+
type: "table-cell",
|
|
397
|
+
children: [createNode({ type: "text", value: h })],
|
|
398
|
+
})),
|
|
399
|
+
});
|
|
400
|
+
const dataRowNodes = data.rows.map((row) => createNode({
|
|
401
|
+
type: "table-row",
|
|
402
|
+
isHeader: false,
|
|
403
|
+
children: row.map((cell) => createNode({
|
|
404
|
+
type: "table-cell",
|
|
405
|
+
children: [createNode({ type: "text", value: cell })],
|
|
406
|
+
})),
|
|
407
|
+
}));
|
|
408
|
+
return createNode({
|
|
409
|
+
type: "table",
|
|
410
|
+
children: [headerRow, ...dataRowNodes],
|
|
411
|
+
});
|
|
412
|
+
}
|
|
246
413
|
extractFontSize(item) {
|
|
247
414
|
const transform = item.transform;
|
|
248
415
|
if (!transform || transform.length < 1)
|
|
@@ -250,20 +417,10 @@ export class PdfConverter {
|
|
|
250
417
|
const val = transform[0];
|
|
251
418
|
return val !== undefined ? Math.abs(val) : 0;
|
|
252
419
|
}
|
|
253
|
-
/**
|
|
254
|
-
* Classify a text line as a heading based on its font size relative to the
|
|
255
|
-
* document body font size.
|
|
256
|
-
*
|
|
257
|
-
* @param text - The raw text of the line.
|
|
258
|
-
* @param fontSize - The font size of the line.
|
|
259
|
-
* @param bodyFontSize - The most common (body) font size in the document.
|
|
260
|
-
* @returns A HeadingInfo if the line qualifies as a heading, otherwise undefined.
|
|
261
|
-
*/
|
|
262
420
|
classifyHeading(text, fontSize, bodyFontSize, ratios = {}) {
|
|
263
421
|
const trimmed = text.trim();
|
|
264
422
|
if (!trimmed)
|
|
265
423
|
return undefined;
|
|
266
|
-
// Use relative sizing when a body font size is known.
|
|
267
424
|
if (bodyFontSize > 0) {
|
|
268
425
|
const ratio = fontSize / bodyFontSize;
|
|
269
426
|
if (ratio > (ratios.h1 ?? 1.8))
|
|
@@ -274,7 +431,6 @@ export class PdfConverter {
|
|
|
274
431
|
return { level: 3, text: trimmed };
|
|
275
432
|
return undefined;
|
|
276
433
|
}
|
|
277
|
-
// Fallback to absolute thresholds.
|
|
278
434
|
if (fontSize > 20)
|
|
279
435
|
return { level: 1, text: trimmed };
|
|
280
436
|
if (fontSize > 16)
|
|
@@ -283,16 +439,8 @@ export class PdfConverter {
|
|
|
283
439
|
return { level: 3, text: trimmed };
|
|
284
440
|
return undefined;
|
|
285
441
|
}
|
|
286
|
-
/**
|
|
287
|
-
* Convert input data to a Uint8Array.
|
|
288
|
-
* @param data - The input data in any supported format.
|
|
289
|
-
* @returns The data as a Uint8Array.
|
|
290
|
-
*/
|
|
291
442
|
async toByteArray(data) {
|
|
292
443
|
if (data instanceof Uint8Array) {
|
|
293
|
-
// Node.js Buffer is a Uint8Array subclass, but pdfjs-dist v4+ rejects it with
|
|
294
|
-
// "Please provide binary data as Uint8Array, rather than Buffer." Re-wrap so
|
|
295
|
-
// the constructor is exactly Uint8Array.
|
|
296
444
|
return data.constructor === Uint8Array
|
|
297
445
|
? data
|
|
298
446
|
: new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-converter.js","sourceRoot":"","sources":["../src/pdf-converter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pdf-converter.js","sourceRoot":"","sources":["../src/pdf-converter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@markitdownjs/pdf",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "PDF converter for MarkItDownJS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -17,13 +17,21 @@
|
|
|
17
17
|
"dist"
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"pdfjs-dist": "^
|
|
21
|
-
"@markitdownjs/
|
|
22
|
-
"@markitdownjs/
|
|
20
|
+
"pdfjs-dist": "^5.0.0",
|
|
21
|
+
"@markitdownjs/ast": "0.1.4",
|
|
22
|
+
"@markitdownjs/shared": "0.4.0"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"typescript": "^5.5.0"
|
|
26
26
|
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"converter",
|
|
29
|
+
"document-conversion",
|
|
30
|
+
"markdown",
|
|
31
|
+
"markitdownjs",
|
|
32
|
+
"pdf",
|
|
33
|
+
"typescript"
|
|
34
|
+
],
|
|
27
35
|
"scripts": {
|
|
28
36
|
"build": "tsc --project tsconfig.json",
|
|
29
37
|
"dev": "tsc --watch --project tsconfig.json",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-converter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/pdf-converter.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { PdfConverter } from '../pdf-converter.js';
|
|
3
|
-
describe('PdfConverter', () => {
|
|
4
|
-
const converter = new PdfConverter();
|
|
5
|
-
it('should detect PDF by MIME type', async () => {
|
|
6
|
-
expect(await converter.canConvert({ data: '', mimeType: 'application/pdf' })).toBe(true);
|
|
7
|
-
});
|
|
8
|
-
it('should detect PDF by extension', async () => {
|
|
9
|
-
expect(await converter.canConvert({ data: '', fileName: 'test.pdf' })).toBe(true);
|
|
10
|
-
expect(await converter.canConvert({ data: '', fileName: 'DOCUMENT.PDF' })).toBe(true);
|
|
11
|
-
});
|
|
12
|
-
it('should detect PDF by magic bytes', async () => {
|
|
13
|
-
const pdfHeader = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d, 0x31, 0x2e, 0x34]);
|
|
14
|
-
expect(await converter.canConvert({ data: pdfHeader })).toBe(true);
|
|
15
|
-
});
|
|
16
|
-
it('should detect PDF from ArrayBuffer', async () => {
|
|
17
|
-
const buffer = new ArrayBuffer(8);
|
|
18
|
-
const view = new Uint8Array(buffer);
|
|
19
|
-
view[0] = 0x25;
|
|
20
|
-
view[1] = 0x50;
|
|
21
|
-
view[2] = 0x44;
|
|
22
|
-
view[3] = 0x46;
|
|
23
|
-
expect(await converter.canConvert({ data: buffer })).toBe(true);
|
|
24
|
-
});
|
|
25
|
-
it('should reject non-PDF files', async () => {
|
|
26
|
-
expect(await converter.canConvert({ data: 'hello', fileName: 'test.txt' })).toBe(false);
|
|
27
|
-
expect(await converter.canConvert({ data: new Uint8Array([0x00, 0x01, 0x02, 0x03]) })).toBe(false);
|
|
28
|
-
});
|
|
29
|
-
it('should return fallback markdown for invalid PDF data', async () => {
|
|
30
|
-
const result = await converter.convert({
|
|
31
|
-
data: new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x00, 0x00]),
|
|
32
|
-
mimeType: 'application/pdf',
|
|
33
|
-
});
|
|
34
|
-
expect(result.markdown).toContain('[PDF content could not be extracted]');
|
|
35
|
-
expect(result.ast).toBeDefined();
|
|
36
|
-
expect(result.ast.type).toBe('document');
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
//# sourceMappingURL=pdf-converter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-converter.test.js","sourceRoot":"","sources":["../../src/__tests__/pdf-converter.test.ts"],"names":[],"mappings":"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"}
|