@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.
@@ -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
- * Determine whether this converter can handle the given input.
9
- * @param input - The conversion input to inspect.
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
- canConvert(input: ConversionInput): Promise<boolean>;
13
+ private detectColumns;
13
14
  /**
14
- * Convert a PDF document into markdown via an AST intermediate.
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
- convert(input: ConversionInput): Promise<ConversionResult>;
17
+ private processTextItems;
25
18
  /**
26
- * Extract the font size from a PDF text item's transform matrix.
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 extractFontSize;
22
+ private detectTables;
35
23
  /**
36
- * Classify a text line as a heading based on its font size relative to the
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 classifyHeading;
26
+ private groupByRow;
45
27
  /**
46
- * Convert input data to a Uint8Array.
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,EAIjB,MAAM,sBAAsB,CAAC;AAW9B,8DAA8D;AAC9D,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,EAAE,EAAG,KAAK,CAAU;IAC7B,QAAQ,CAAC,kBAAkB,WAAuB;IAClD,QAAQ,CAAC,mBAAmB,WAAY;IAExC;;;;OAIG;IACG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB1D;;;;;;;;;;OAUG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAuNhE;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAOvB;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAyBvB;;;;OAIG;YACW,WAAW;CAe1B"}
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"}
@@ -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 font sizes for heading classification.
90
- const fontSizes = new Map();
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
- const fontSize = this.extractFontSize(item);
95
- if (fontSize > 0) {
96
- fontSizes.set(fontSize, (fontSizes.get(fontSize) ?? 0) + 1);
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
- // Group text items into logical lines / paragraphs.
119
- const items = textContent.items;
120
- let currentLine = "";
121
- let lastFontSize = 0;
122
- let lastY = 0;
123
- const flushLine = () => {
124
- const trimmed = currentLine.trim();
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
- else {
138
- pageNodes.push(createNode({
139
- type: "paragraph",
140
- children: [createNode({ type: "text", value: trimmed })],
141
- }));
142
- }
143
- currentLine = "";
144
- };
145
- for (const item of items) {
146
- if (!("str" in item))
147
- continue;
148
- const str = item.str;
149
- if (!str)
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
- * Extract the font size from a PDF text item's transform matrix.
239
- *
240
- * The transform array is `[scaleX, skewX, skewY, scaleY, x, y]`.
241
- * The font size is derived from the absolute value of `scaleX`.
242
- *
243
- * @param item - A PDF text content item.
244
- * @returns The detected font size, or 0 if unavailable.
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.2.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": "^4.0.0",
21
- "@markitdownjs/shared": "0.2.0",
22
- "@markitdownjs/ast": "0.1.2"
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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=pdf-converter.test.d.ts.map
@@ -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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"}