file2md 1.1.4 → 1.1.6
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/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/pptx-parser.d.ts +4 -0
- package/dist/parsers/pptx-parser.d.ts.map +1 -1
- package/dist/parsers/pptx-parser.js +147 -243
- package/dist/parsers/pptx-parser.js.map +1 -1
- package/dist/utils/slide-renderer.d.ts +46 -0
- package/dist/utils/slide-renderer.d.ts.map +1 -0
- package/dist/utils/slide-renderer.js +187 -0
- package/dist/utils/slide-renderer.js.map +1 -0
- package/package.json +2 -1
package/dist/index.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAGjB,MAAM,kBAAkB,CAAC;AAS1B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,gBAAgB,EAGjB,MAAM,kBAAkB,CAAC;AAS1B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyI1G;AAGD,mBAAmB,kBAAkB,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
CHANGED
@@ -102,7 +102,13 @@ export async function convert(input, options = {}) {
|
|
102
102
|
break;
|
103
103
|
}
|
104
104
|
case SUPPORTED_MIME_TYPES.PPTX: {
|
105
|
-
const result = await parsePptx(buffer, imageExtractor, chartExtractor, {
|
105
|
+
const result = await parsePptx(buffer, imageExtractor, chartExtractor, {
|
106
|
+
preserveLayout,
|
107
|
+
extractImages,
|
108
|
+
extractCharts,
|
109
|
+
outputDir: imageDir,
|
110
|
+
useSlideScreenshots: true // Enable slide screenshots by default
|
111
|
+
});
|
106
112
|
markdown = result.markdown;
|
107
113
|
images = result.images || [];
|
108
114
|
charts = result.charts || [];
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,11 +1,15 @@
|
|
1
1
|
import type { Buffer } from 'node:buffer';
|
2
2
|
import type { ImageExtractor } from '../utils/image-extractor.js';
|
3
3
|
import type { ChartExtractor } from '../utils/chart-extractor.js';
|
4
|
+
import { type SlideRenderOptions } from '../utils/slide-renderer.js';
|
4
5
|
import type { ImageData, ChartData } from '../types/interfaces.js';
|
5
6
|
export interface PptxParseOptions {
|
6
7
|
readonly preserveLayout?: boolean;
|
7
8
|
readonly extractImages?: boolean;
|
8
9
|
readonly extractCharts?: boolean;
|
10
|
+
readonly useSlideScreenshots?: boolean;
|
11
|
+
readonly slideRenderOptions?: SlideRenderOptions;
|
12
|
+
readonly outputDir?: string;
|
9
13
|
}
|
10
14
|
export interface PptxParseResult {
|
11
15
|
readonly markdown: string;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pptx-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/pptx-parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;
|
1
|
+
{"version":3,"file":"pptx-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/pptx-parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAiB,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEpF,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACV,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACjD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAOD;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAuB1B"}
|
@@ -1,300 +1,204 @@
|
|
1
1
|
import JSZip from 'jszip';
|
2
2
|
import { parseStringPromise } from 'xml2js';
|
3
3
|
import path from 'node:path';
|
4
|
-
import {
|
4
|
+
import { SlideRenderer } from '../utils/slide-renderer.js';
|
5
5
|
import { ParseError } from '../types/errors.js';
|
6
6
|
/**
|
7
7
|
* Parse PPTX buffer and convert to markdown with layout preservation
|
8
8
|
*/
|
9
9
|
export async function parsePptx(buffer, imageExtractor, chartExtractor, options = {}) {
|
10
10
|
try {
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
const slideContent = await extractAdvancedSlideContent(xmlContent, imageExtractor, extractedImages, slideNumber, layoutParser);
|
43
|
-
if (slideContent.trim()) {
|
44
|
-
markdown += slideContent + '\n\n';
|
11
|
+
// Check if slide screenshots are requested (new default behavior)
|
12
|
+
if (options.useSlideScreenshots !== false) {
|
13
|
+
return await parsePptxWithSlideScreenshots(buffer, imageExtractor, chartExtractor, options);
|
14
|
+
}
|
15
|
+
// Fallback to legacy layout parsing if slide screenshots are disabled
|
16
|
+
return await parsePptxLegacyMode(buffer, imageExtractor, chartExtractor, options);
|
17
|
+
}
|
18
|
+
catch (error) {
|
19
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
20
|
+
throw new ParseError('PPTX', message, error);
|
21
|
+
}
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* New slide screenshot-based parsing (recommended)
|
25
|
+
*/
|
26
|
+
async function parsePptxWithSlideScreenshots(buffer, imageExtractor, chartExtractor, options) {
|
27
|
+
const outputDir = options.outputDir || './images';
|
28
|
+
const slideRenderer = new SlideRenderer(outputDir);
|
29
|
+
try {
|
30
|
+
// Convert PPTX to slide images
|
31
|
+
const renderResult = await slideRenderer.renderSlidesToImages(buffer, options.slideRenderOptions);
|
32
|
+
// Extract title from PPTX metadata for better markdown generation
|
33
|
+
const title = await extractPptxTitle(buffer);
|
34
|
+
// Generate markdown with slide images
|
35
|
+
const markdown = slideRenderer.generateSlideMarkdown(renderResult.slideImages, title);
|
36
|
+
// Still extract charts if requested (need to load zip for chart extraction)
|
37
|
+
let extractedCharts = [];
|
38
|
+
if (options.extractCharts !== false) {
|
39
|
+
try {
|
40
|
+
const zip = await JSZip.loadAsync(buffer);
|
41
|
+
extractedCharts = await chartExtractor.extractChartsFromZip(zip, 'ppt/');
|
45
42
|
}
|
46
|
-
|
47
|
-
|
43
|
+
catch {
|
44
|
+
// Ignore chart extraction errors
|
48
45
|
}
|
49
46
|
}
|
50
47
|
return {
|
51
|
-
markdown
|
52
|
-
images:
|
48
|
+
markdown,
|
49
|
+
images: renderResult.slideImages,
|
53
50
|
charts: extractedCharts.map(chart => chart.data),
|
54
|
-
slideCount:
|
51
|
+
slideCount: renderResult.slideCount,
|
55
52
|
metadata: {
|
56
|
-
totalSlides:
|
57
|
-
hasImages:
|
58
|
-
hasCharts: extractedCharts.length > 0
|
53
|
+
totalSlides: renderResult.slideCount,
|
54
|
+
hasImages: renderResult.slideImages.length > 0,
|
55
|
+
hasCharts: extractedCharts.length > 0,
|
56
|
+
renderMethod: 'slide-screenshots',
|
57
|
+
...renderResult.metadata
|
59
58
|
}
|
60
59
|
};
|
61
60
|
}
|
62
61
|
catch (error) {
|
63
|
-
|
64
|
-
|
62
|
+
// If slide rendering fails, fall back to legacy mode
|
63
|
+
console.warn('Slide screenshot rendering failed, falling back to legacy mode:', error);
|
64
|
+
return await parsePptxLegacyMode(buffer, imageExtractor, chartExtractor, options);
|
65
65
|
}
|
66
66
|
}
|
67
|
-
|
67
|
+
/**
|
68
|
+
* Legacy layout parsing mode (fallback)
|
69
|
+
*/
|
70
|
+
async function parsePptxLegacyMode(buffer, imageExtractor, chartExtractor, options) {
|
71
|
+
const zip = await JSZip.loadAsync(buffer);
|
72
|
+
// Extract images first
|
73
|
+
const extractedImages = options.extractImages !== false
|
74
|
+
? await imageExtractor.extractImagesFromZip(zip, 'ppt/')
|
75
|
+
: [];
|
76
|
+
// Extract charts if enabled
|
77
|
+
const extractedCharts = options.extractCharts !== false
|
78
|
+
? await chartExtractor.extractChartsFromZip(zip, 'ppt/')
|
79
|
+
: [];
|
80
|
+
const slideFiles = [];
|
81
|
+
zip.forEach((relativePath, file) => {
|
82
|
+
if (relativePath.startsWith('ppt/slides/slide') && relativePath.endsWith('.xml')) {
|
83
|
+
slideFiles.push({
|
84
|
+
path: relativePath,
|
85
|
+
file: file
|
86
|
+
});
|
87
|
+
}
|
88
|
+
});
|
89
|
+
slideFiles.sort((a, b) => {
|
90
|
+
const aNum = parseInt(a.path.match(/slide(\d+)\.xml/)?.[1] || '0');
|
91
|
+
const bNum = parseInt(b.path.match(/slide(\d+)\.xml/)?.[1] || '0');
|
92
|
+
return aNum - bNum;
|
93
|
+
});
|
94
|
+
let markdown = '';
|
95
|
+
for (let i = 0; i < slideFiles.length; i++) {
|
96
|
+
const slideFile = slideFiles[i];
|
97
|
+
const slideNumber = i + 1;
|
98
|
+
markdown += `## Slide ${slideNumber}\n\n`;
|
99
|
+
const xmlContent = await slideFile.file.async('string');
|
100
|
+
const slideContent = await extractLegacySlideContent(xmlContent, imageExtractor, extractedImages, slideNumber);
|
101
|
+
if (slideContent.trim()) {
|
102
|
+
markdown += slideContent + '\n\n';
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
markdown += '*No content*\n\n';
|
106
|
+
}
|
107
|
+
}
|
108
|
+
return {
|
109
|
+
markdown: markdown.trim(),
|
110
|
+
images: extractedImages,
|
111
|
+
charts: extractedCharts.map(chart => chart.data),
|
112
|
+
slideCount: slideFiles.length,
|
113
|
+
metadata: {
|
114
|
+
totalSlides: slideFiles.length,
|
115
|
+
hasImages: extractedImages.length > 0,
|
116
|
+
hasCharts: extractedCharts.length > 0,
|
117
|
+
renderMethod: 'legacy-layout-parsing'
|
118
|
+
}
|
119
|
+
};
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* Extract PPTX title from document properties
|
123
|
+
*/
|
124
|
+
async function extractPptxTitle(buffer) {
|
125
|
+
try {
|
126
|
+
const zip = await JSZip.loadAsync(buffer);
|
127
|
+
const corePropsFile = zip.file('docProps/core.xml');
|
128
|
+
if (corePropsFile) {
|
129
|
+
const corePropsContent = await corePropsFile.async('string');
|
130
|
+
const result = await parseStringPromise(corePropsContent);
|
131
|
+
// Try to extract title from core properties
|
132
|
+
const title = result?.['cp:coreProperties']?.[0]?.['dc:title']?.[0];
|
133
|
+
if (title && typeof title === 'string' && title.trim()) {
|
134
|
+
return title.trim();
|
135
|
+
}
|
136
|
+
}
|
137
|
+
}
|
138
|
+
catch {
|
139
|
+
// Ignore errors and return undefined
|
140
|
+
}
|
141
|
+
return undefined;
|
142
|
+
}
|
143
|
+
/**
|
144
|
+
* Legacy slide content extraction (simplified version)
|
145
|
+
*/
|
146
|
+
async function extractLegacySlideContent(xmlContent, imageExtractor, extractedImages, slideNumber) {
|
68
147
|
try {
|
69
148
|
const result = await parseStringPromise(xmlContent);
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
149
|
+
let markdown = '';
|
150
|
+
// Simple text extraction function
|
151
|
+
function extractText(obj) {
|
152
|
+
let text = '';
|
74
153
|
if (typeof obj === 'object' && obj !== null) {
|
75
154
|
if (Array.isArray(obj)) {
|
76
155
|
for (const item of obj) {
|
77
|
-
|
156
|
+
text += extractText(item);
|
78
157
|
}
|
79
158
|
}
|
80
159
|
else {
|
81
|
-
//
|
82
|
-
let position = { ...parentPos };
|
83
|
-
if (obj['a:off']?.[0]?.$) {
|
84
|
-
position.x = parseInt(obj['a:off'][0].$.x) || 0;
|
85
|
-
position.y = parseInt(obj['a:off'][0].$.y) || 0;
|
86
|
-
}
|
87
|
-
// Check for text content in shapes
|
160
|
+
// Extract text content
|
88
161
|
if (obj['a:t']) {
|
89
|
-
const textElement = {
|
90
|
-
type: 'text',
|
91
|
-
content: '',
|
92
|
-
position: position
|
93
|
-
};
|
94
162
|
if (Array.isArray(obj['a:t'])) {
|
95
163
|
for (const textItem of obj['a:t']) {
|
96
|
-
let text = '';
|
97
164
|
if (typeof textItem === 'string') {
|
98
|
-
text
|
165
|
+
text += textItem + ' ';
|
99
166
|
}
|
100
167
|
else if (textItem && typeof textItem === 'object' && '_' in textItem) {
|
101
|
-
text
|
102
|
-
}
|
103
|
-
if (text && text.trim()) {
|
104
|
-
textElement.content += text.trim() + ' ';
|
168
|
+
text += textItem._ + ' ';
|
105
169
|
}
|
106
170
|
}
|
107
171
|
}
|
108
|
-
if (textElement.content.trim()) {
|
109
|
-
elements.push(textElement);
|
110
|
-
}
|
111
|
-
}
|
112
|
-
// Check for tables
|
113
|
-
if (obj['a:tbl']) {
|
114
|
-
const tableElement = {
|
115
|
-
type: 'table',
|
116
|
-
content: obj['a:tbl'],
|
117
|
-
position: position
|
118
|
-
};
|
119
|
-
elements.push(tableElement);
|
120
|
-
}
|
121
|
-
// Check for images
|
122
|
-
if (obj['a:blip'] || obj['p:pic'] || obj['a:pic']) {
|
123
|
-
const slideImages = extractedImages.filter(img => img.originalPath.includes(`slide${slideNumber}`) ||
|
124
|
-
img.originalPath.includes('media/'));
|
125
|
-
if (slideImages.length > imageCount) {
|
126
|
-
const img = slideImages[imageCount];
|
127
|
-
if (img?.savedPath) {
|
128
|
-
const imageElement = {
|
129
|
-
type: 'image',
|
130
|
-
content: img.savedPath,
|
131
|
-
position: position
|
132
|
-
};
|
133
|
-
elements.push(imageElement);
|
134
|
-
imageCount++;
|
135
|
-
}
|
136
|
-
}
|
137
172
|
}
|
138
173
|
// Recursively process nested objects
|
139
174
|
for (const key in obj) {
|
140
175
|
if (key !== 'a:t') {
|
141
|
-
|
176
|
+
text += extractText(obj[key]);
|
142
177
|
}
|
143
178
|
}
|
144
179
|
}
|
145
180
|
}
|
181
|
+
return text;
|
146
182
|
}
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
let markdown = '';
|
152
|
-
// Group elements into logical sections rather than rows/columns
|
153
|
-
const sections = groupElementsIntoSections(sortedElements);
|
154
|
-
for (const section of sections) {
|
155
|
-
if (section.type === 'title') {
|
156
|
-
markdown += `### ${section.content}\n\n`;
|
157
|
-
}
|
158
|
-
else if (section.type === 'paragraph') {
|
159
|
-
markdown += `${section.content}\n\n`;
|
160
|
-
}
|
161
|
-
else if (section.type === 'table') {
|
162
|
-
markdown += parseSlideTable(section.content, layoutParser) + '\n\n';
|
163
|
-
}
|
164
|
-
else if (section.type === 'image') {
|
165
|
-
const filename = path.basename(section.content);
|
166
|
-
markdown += imageExtractor.getImageMarkdown(`Slide ${slideNumber} Image`, filename) + '\n\n';
|
167
|
-
}
|
168
|
-
else if (section.type === 'list') {
|
169
|
-
markdown += section.content + '\n\n';
|
170
|
-
}
|
183
|
+
// Extract all text content
|
184
|
+
const textContent = extractText(result).trim();
|
185
|
+
if (textContent) {
|
186
|
+
markdown += textContent + '\n\n';
|
171
187
|
}
|
172
|
-
//
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
markdown += imageExtractor.getImageMarkdown(`Slide ${slideNumber} Image`, filename) + '\n\n';
|
180
|
-
}
|
188
|
+
// Add any images for this slide
|
189
|
+
const slideImages = extractedImages.filter(img => img.originalPath.includes(`slide${slideNumber}`) ||
|
190
|
+
(slideNumber === 1 && img.originalPath.includes('media/')));
|
191
|
+
for (const img of slideImages) {
|
192
|
+
if (img.savedPath) {
|
193
|
+
const filename = path.basename(img.savedPath);
|
194
|
+
markdown += imageExtractor.getImageMarkdown(`Slide ${slideNumber} Image`, filename) + '\n\n';
|
181
195
|
}
|
182
196
|
}
|
183
197
|
return markdown.trim();
|
184
198
|
}
|
185
199
|
catch (error) {
|
186
200
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
187
|
-
throw new ParseError('PPTX', `Failed to extract
|
188
|
-
}
|
189
|
-
}
|
190
|
-
function groupElementsIntoSections(elements) {
|
191
|
-
const sections = [];
|
192
|
-
for (const element of elements) {
|
193
|
-
const content = element.content;
|
194
|
-
if (element.type === 'text') {
|
195
|
-
// Determine if it's a title based on position and characteristics
|
196
|
-
const isTitle = (element.position?.y || 0) < 1000000 &&
|
197
|
-
content.length < 100 &&
|
198
|
-
content.length > 0;
|
199
|
-
if (isTitle && !content.includes('\n') && !content.match(/^\d+\./)) {
|
200
|
-
sections.push({
|
201
|
-
type: 'title',
|
202
|
-
content: content.trim(),
|
203
|
-
position: element.position
|
204
|
-
});
|
205
|
-
}
|
206
|
-
else {
|
207
|
-
// Check if it looks like a list item
|
208
|
-
if (content.match(/^[•\-*]\s/) || content.match(/^\d+\.\s/)) {
|
209
|
-
sections.push({
|
210
|
-
type: 'list',
|
211
|
-
content: content.trim(),
|
212
|
-
position: element.position
|
213
|
-
});
|
214
|
-
}
|
215
|
-
else {
|
216
|
-
sections.push({
|
217
|
-
type: 'paragraph',
|
218
|
-
content: content.trim(),
|
219
|
-
position: element.position
|
220
|
-
});
|
221
|
-
}
|
222
|
-
}
|
223
|
-
}
|
224
|
-
else if (element.type === 'table') {
|
225
|
-
sections.push({
|
226
|
-
type: 'table',
|
227
|
-
content: element.content,
|
228
|
-
position: element.position
|
229
|
-
});
|
230
|
-
}
|
231
|
-
else if (element.type === 'image') {
|
232
|
-
sections.push({
|
233
|
-
type: 'image',
|
234
|
-
content: element.content,
|
235
|
-
position: element.position
|
236
|
-
});
|
237
|
-
}
|
238
|
-
}
|
239
|
-
return sections;
|
240
|
-
}
|
241
|
-
function formatSlideElement(element, layoutParser, imageExtractor) {
|
242
|
-
switch (element.type) {
|
243
|
-
case 'text': {
|
244
|
-
const content = element.content;
|
245
|
-
// Determine if it's a title based on position and length
|
246
|
-
if ((element.position?.y || 0) < 1000000 && content.length < 100) {
|
247
|
-
return `### ${content.trim()}`;
|
248
|
-
}
|
249
|
-
return content.trim();
|
250
|
-
}
|
251
|
-
case 'table':
|
252
|
-
// Parse PowerPoint table (simplified)
|
253
|
-
return parseSlideTable(element.content, layoutParser);
|
254
|
-
case 'image': {
|
255
|
-
const imagePath = element.content;
|
256
|
-
const filename = path.basename(imagePath);
|
257
|
-
return imageExtractor.getImageMarkdown('Slide Image', filename);
|
258
|
-
}
|
259
|
-
default:
|
260
|
-
return typeof element.content === 'string' ? element.content : '';
|
261
|
-
}
|
262
|
-
}
|
263
|
-
function parseSlideTable(tableData, layoutParser) {
|
264
|
-
// Simplified table parsing for PowerPoint
|
265
|
-
const table = tableData;
|
266
|
-
if (!table?.[0]?.['a:tr']) {
|
267
|
-
return '';
|
268
|
-
}
|
269
|
-
const rows = table[0]['a:tr'];
|
270
|
-
const tableStruct = { rows: [] };
|
271
|
-
for (const row of rows) {
|
272
|
-
const cells = row['a:tc'] || [];
|
273
|
-
const rowData = { cells: [] };
|
274
|
-
for (const cell of cells) {
|
275
|
-
let cellText = '';
|
276
|
-
// Extract text from cell
|
277
|
-
if (cell['a:txBody']?.[0]?.['a:p']) {
|
278
|
-
const paragraphs = cell['a:txBody'][0]['a:p'];
|
279
|
-
for (const para of paragraphs) {
|
280
|
-
if (para['a:r']?.[0]?.['a:t']?.[0]) {
|
281
|
-
cellText += para['a:r'][0]['a:t'][0] + ' ';
|
282
|
-
}
|
283
|
-
}
|
284
|
-
}
|
285
|
-
rowData.cells.push({
|
286
|
-
text: cellText.trim(),
|
287
|
-
bold: false,
|
288
|
-
italic: false,
|
289
|
-
alignment: 'left',
|
290
|
-
backgroundColor: undefined,
|
291
|
-
colSpan: 1,
|
292
|
-
rowSpan: 1,
|
293
|
-
merged: false
|
294
|
-
});
|
295
|
-
}
|
296
|
-
tableStruct.rows.push(rowData);
|
201
|
+
throw new ParseError('PPTX', `Failed to extract legacy content from slide: ${message}`, error);
|
297
202
|
}
|
298
|
-
return layoutParser.parseAdvancedTable(tableStruct);
|
299
203
|
}
|
300
204
|
//# sourceMappingURL=pptx-parser.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pptx-parser.js","sourceRoot":"","sources":["../../src/parsers/pptx-parser.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"pptx-parser.js","sourceRoot":"","sources":["../../src/parsers/pptx-parser.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
2
|
+
import type { ImageData } from '../types/interfaces.js';
|
3
|
+
export interface SlideRenderOptions {
|
4
|
+
readonly quality?: number;
|
5
|
+
readonly density?: number;
|
6
|
+
readonly format?: 'png' | 'jpg';
|
7
|
+
readonly saveBase64?: boolean;
|
8
|
+
}
|
9
|
+
export interface SlideRenderResult {
|
10
|
+
readonly slideImages: readonly ImageData[];
|
11
|
+
readonly slideCount: number;
|
12
|
+
readonly metadata: {
|
13
|
+
readonly format: string;
|
14
|
+
readonly quality: number;
|
15
|
+
readonly density: number;
|
16
|
+
};
|
17
|
+
}
|
18
|
+
export declare class SlideRenderer {
|
19
|
+
private readonly outputDir;
|
20
|
+
constructor(outputDir: string);
|
21
|
+
/**
|
22
|
+
* Convert PPTX buffer to individual slide images
|
23
|
+
*/
|
24
|
+
renderSlidesToImages(pptxBuffer: Buffer, options?: SlideRenderOptions): Promise<SlideRenderResult>;
|
25
|
+
/**
|
26
|
+
* Convert PPTX buffer to PDF buffer using LibreOffice
|
27
|
+
*/
|
28
|
+
private convertPptxToPdf;
|
29
|
+
/**
|
30
|
+
* Convert PDF buffer to individual slide images using pdf2pic
|
31
|
+
*/
|
32
|
+
private convertPdfToSlideImages;
|
33
|
+
/**
|
34
|
+
* Generate markdown with slide images
|
35
|
+
*/
|
36
|
+
generateSlideMarkdown(slideImages: readonly ImageData[], title?: string): string;
|
37
|
+
/**
|
38
|
+
* Clean up generated image files
|
39
|
+
*/
|
40
|
+
cleanup(): Promise<void>;
|
41
|
+
/**
|
42
|
+
* Check if LibreOffice is available on the system
|
43
|
+
*/
|
44
|
+
static checkLibreOfficeAvailability(): Promise<boolean>;
|
45
|
+
}
|
46
|
+
//# sourceMappingURL=slide-renderer.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"slide-renderer.d.ts","sourceRoot":"","sources":["../../src/utils/slide-renderer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAMrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKxD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE;QACjB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,SAAS,EAAE,MAAM;IAI7B;;OAEG;IACG,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC;IAgD7B;;OAEG;YACY,gBAAgB;IA0B/B;;OAEG;YACW,uBAAuB;IAoErC;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAuBhF;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;WACU,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC;CAU9D"}
|
@@ -0,0 +1,187 @@
|
|
1
|
+
import path from 'node:path';
|
2
|
+
import fs from 'node:fs/promises';
|
3
|
+
import { Buffer } from 'node:buffer';
|
4
|
+
import libre from 'libreoffice-convert';
|
5
|
+
import { fromBuffer } from 'pdf2pic';
|
6
|
+
import { promisify } from 'node:util';
|
7
|
+
import { ParseError } from '../types/errors.js';
|
8
|
+
// Promisify libreoffice-convert
|
9
|
+
const convertAsync = promisify(libre.convert);
|
10
|
+
export class SlideRenderer {
|
11
|
+
outputDir;
|
12
|
+
constructor(outputDir) {
|
13
|
+
this.outputDir = outputDir;
|
14
|
+
}
|
15
|
+
/**
|
16
|
+
* Convert PPTX buffer to individual slide images
|
17
|
+
*/
|
18
|
+
async renderSlidesToImages(pptxBuffer, options = {}) {
|
19
|
+
const { quality = 90, density = 150, format = 'png', saveBase64 = false } = options;
|
20
|
+
try {
|
21
|
+
// Ensure output directory exists
|
22
|
+
await fs.mkdir(this.outputDir, { recursive: true });
|
23
|
+
console.log('Created slide output directory:', this.outputDir);
|
24
|
+
// Step 1: Convert PPTX to PDF using LibreOffice
|
25
|
+
console.log('Converting PPTX to PDF...');
|
26
|
+
const pdfBuffer = await this.convertPptxToPdf(pptxBuffer);
|
27
|
+
console.log('PPTX to PDF conversion successful, PDF size:', pdfBuffer.length);
|
28
|
+
// Step 2: Convert PDF to individual slide images
|
29
|
+
console.log('Converting PDF to slide images...');
|
30
|
+
const slideImages = await this.convertPdfToSlideImages(pdfBuffer, { quality, density, format, saveBase64 });
|
31
|
+
console.log(`Generated ${slideImages.length} slide images`);
|
32
|
+
// Verify images were actually created
|
33
|
+
for (const slide of slideImages) {
|
34
|
+
const exists = await fs.access(slide.savedPath).then(() => true).catch(() => false);
|
35
|
+
console.log(`Slide image ${slide.savedPath} exists:`, exists);
|
36
|
+
}
|
37
|
+
return {
|
38
|
+
slideImages,
|
39
|
+
slideCount: slideImages.length,
|
40
|
+
metadata: {
|
41
|
+
format,
|
42
|
+
quality,
|
43
|
+
density
|
44
|
+
}
|
45
|
+
};
|
46
|
+
}
|
47
|
+
catch (error) {
|
48
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
49
|
+
console.error('SlideRenderer error:', message);
|
50
|
+
throw new ParseError('SlideRenderer', `Failed to render slides: ${message}`, error);
|
51
|
+
}
|
52
|
+
}
|
53
|
+
/**
|
54
|
+
* Convert PPTX buffer to PDF buffer using LibreOffice
|
55
|
+
*/
|
56
|
+
async convertPptxToPdf(pptxBuffer) {
|
57
|
+
try {
|
58
|
+
console.log('LibreOffice conversion: Input PPTX size:', pptxBuffer.length);
|
59
|
+
// Convert PPTX to PDF using LibreOffice
|
60
|
+
const pdfBuffer = await convertAsync(pptxBuffer, '.pdf', undefined);
|
61
|
+
console.log('LibreOffice conversion: Output PDF size:', pdfBuffer?.length || 0);
|
62
|
+
if (!pdfBuffer || pdfBuffer.length === 0) {
|
63
|
+
throw new Error('LibreOffice conversion resulted in empty PDF');
|
64
|
+
}
|
65
|
+
return pdfBuffer;
|
66
|
+
}
|
67
|
+
catch (error) {
|
68
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
69
|
+
console.error('LibreOffice conversion error:', error);
|
70
|
+
// Check if LibreOffice is available
|
71
|
+
if (message.includes('spawn') || message.includes('ENOENT') || message.includes('command not found')) {
|
72
|
+
throw new ParseError('SlideRenderer', 'LibreOffice is not installed or not accessible. Please install LibreOffice to enable slide screenshot functionality.', error);
|
73
|
+
}
|
74
|
+
throw new ParseError('SlideRenderer', `PPTX to PDF conversion failed: ${message}`, error);
|
75
|
+
}
|
76
|
+
}
|
77
|
+
/**
|
78
|
+
* Convert PDF buffer to individual slide images using pdf2pic
|
79
|
+
*/
|
80
|
+
async convertPdfToSlideImages(pdfBuffer, options) {
|
81
|
+
try {
|
82
|
+
// Ensure output directory exists
|
83
|
+
await fs.mkdir(this.outputDir, { recursive: true });
|
84
|
+
console.log('PDF to images: Output directory created:', this.outputDir);
|
85
|
+
// Configure pdf2pic
|
86
|
+
const convert = fromBuffer(pdfBuffer, {
|
87
|
+
density: options.density,
|
88
|
+
saveFilename: 'slide',
|
89
|
+
savePath: this.outputDir,
|
90
|
+
format: options.format,
|
91
|
+
width: undefined, // Let pdf2pic calculate based on density
|
92
|
+
height: undefined,
|
93
|
+
quality: options.quality
|
94
|
+
});
|
95
|
+
console.log('PDF2PIC configuration:', {
|
96
|
+
density: options.density,
|
97
|
+
format: options.format,
|
98
|
+
quality: options.quality,
|
99
|
+
outputDir: this.outputDir
|
100
|
+
});
|
101
|
+
// Get total number of pages first
|
102
|
+
const storeAsImage = convert.bulk(-1, true);
|
103
|
+
const results = await storeAsImage;
|
104
|
+
console.log(`PDF2PIC processed ${results.length} pages`);
|
105
|
+
const slideImages = [];
|
106
|
+
for (let i = 0; i < results.length; i++) {
|
107
|
+
const result = results[i];
|
108
|
+
const slideNumber = i + 1;
|
109
|
+
const filename = `slide-${slideNumber.toString().padStart(3, '0')}.${options.format}`;
|
110
|
+
const savedPath = path.join(this.outputDir, filename);
|
111
|
+
console.log(`Processing slide ${slideNumber}, expected file: ${filename}`);
|
112
|
+
// Save the image file
|
113
|
+
const imageBuffer = result.buffer;
|
114
|
+
if (imageBuffer) {
|
115
|
+
await fs.writeFile(savedPath, imageBuffer);
|
116
|
+
console.log(`Saved slide image: ${savedPath} (${imageBuffer.length} bytes)`);
|
117
|
+
slideImages.push({
|
118
|
+
originalPath: `slide${slideNumber}`, // Virtual path for consistency
|
119
|
+
savedPath: savedPath,
|
120
|
+
size: imageBuffer.length,
|
121
|
+
format: options.format
|
122
|
+
});
|
123
|
+
}
|
124
|
+
else {
|
125
|
+
console.warn(`No buffer found for slide ${slideNumber}`);
|
126
|
+
}
|
127
|
+
}
|
128
|
+
console.log(`Successfully created ${slideImages.length} slide images`);
|
129
|
+
return slideImages;
|
130
|
+
}
|
131
|
+
catch (error) {
|
132
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
133
|
+
console.error('PDF to images conversion error:', error);
|
134
|
+
throw new ParseError('SlideRenderer', `PDF to images conversion failed: ${message}`, error);
|
135
|
+
}
|
136
|
+
}
|
137
|
+
/**
|
138
|
+
* Generate markdown with slide images
|
139
|
+
*/
|
140
|
+
generateSlideMarkdown(slideImages, title) {
|
141
|
+
let markdown = '';
|
142
|
+
if (title) {
|
143
|
+
markdown += `# ${title}\n\n`;
|
144
|
+
}
|
145
|
+
for (let i = 0; i < slideImages.length; i++) {
|
146
|
+
const slide = slideImages[i];
|
147
|
+
const slideNumber = i + 1;
|
148
|
+
markdown += `## Slide ${slideNumber}\n\n`;
|
149
|
+
// Use relative path for markdown image reference
|
150
|
+
const relativePath = path.relative(process.cwd(), slide.savedPath)
|
151
|
+
.replace(/\\/g, '/'); // Ensure forward slashes for markdown
|
152
|
+
markdown += `\n\n`;
|
153
|
+
}
|
154
|
+
return markdown.trim();
|
155
|
+
}
|
156
|
+
/**
|
157
|
+
* Clean up generated image files
|
158
|
+
*/
|
159
|
+
async cleanup() {
|
160
|
+
try {
|
161
|
+
const files = await fs.readdir(this.outputDir);
|
162
|
+
const slideFiles = files.filter(file => file.startsWith('slide-') && (file.endsWith('.png') || file.endsWith('.jpg')));
|
163
|
+
for (const file of slideFiles) {
|
164
|
+
const filePath = path.join(this.outputDir, file);
|
165
|
+
await fs.unlink(filePath);
|
166
|
+
}
|
167
|
+
}
|
168
|
+
catch (error) {
|
169
|
+
// Ignore cleanup errors
|
170
|
+
}
|
171
|
+
}
|
172
|
+
/**
|
173
|
+
* Check if LibreOffice is available on the system
|
174
|
+
*/
|
175
|
+
static async checkLibreOfficeAvailability() {
|
176
|
+
try {
|
177
|
+
// Create a minimal test document to verify LibreOffice works
|
178
|
+
const testBuffer = Buffer.from('test');
|
179
|
+
await convertAsync(testBuffer, '.pdf', undefined);
|
180
|
+
return true;
|
181
|
+
}
|
182
|
+
catch {
|
183
|
+
return false;
|
184
|
+
}
|
185
|
+
}
|
186
|
+
}
|
187
|
+
//# sourceMappingURL=slide-renderer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"slide-renderer.js","sourceRoot":"","sources":["../../src/utils/slide-renderer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "file2md",
|
3
|
-
"version": "1.1.
|
3
|
+
"version": "1.1.6",
|
4
4
|
"description": "A TypeScript library for converting various document types (PDF, DOCX, XLSX, PPTX) into Markdown with image and layout preservation",
|
5
5
|
"main": "dist/index.js",
|
6
6
|
"types": "dist/index.d.ts",
|
@@ -34,6 +34,7 @@
|
|
34
34
|
"dependencies": {
|
35
35
|
"file-type": "^16.5.4",
|
36
36
|
"jszip": "^3.10.1",
|
37
|
+
"libreoffice-convert": "^1.6.1",
|
37
38
|
"pdf-parse": "^1.1.1",
|
38
39
|
"pdf2pic": "^2.1.4",
|
39
40
|
"xml2js": "^0.6.2"
|