file2md 1.1.8 → 1.1.10
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/parsers/pptx-parser.d.ts +3 -0
- package/dist/parsers/pptx-parser.d.ts.map +1 -1
- package/dist/parsers/pptx-parser.js +82 -2
- package/dist/parsers/pptx-parser.js.map +1 -1
- package/dist/utils/libreoffice-converter.d.ts +33 -0
- package/dist/utils/libreoffice-converter.d.ts.map +1 -0
- package/dist/utils/libreoffice-converter.js +169 -0
- package/dist/utils/libreoffice-converter.js.map +1 -0
- package/dist/utils/libreoffice-detector.d.ts +57 -0
- package/dist/utils/libreoffice-detector.d.ts.map +1 -0
- package/dist/utils/libreoffice-detector.js +295 -0
- package/dist/utils/libreoffice-detector.js.map +1 -0
- package/dist/utils/pptx-visual-parser.d.ts +190 -0
- package/dist/utils/pptx-visual-parser.d.ts.map +1 -0
- package/dist/utils/pptx-visual-parser.js +648 -0
- package/dist/utils/pptx-visual-parser.js.map +1 -0
- package/dist/utils/puppeteer-renderer.d.ts +65 -0
- package/dist/utils/puppeteer-renderer.d.ts.map +1 -0
- package/dist/utils/puppeteer-renderer.js +393 -0
- package/dist/utils/puppeteer-renderer.js.map +1 -0
- package/dist/utils/slide-renderer.d.ts +55 -3
- package/dist/utils/slide-renderer.d.ts.map +1 -1
- package/dist/utils/slide-renderer.js +478 -52
- package/dist/utils/slide-renderer.js.map +1 -1
- package/package.json +6 -1
@@ -0,0 +1,648 @@
|
|
1
|
+
import JSZip from 'jszip';
|
2
|
+
import { parseStringPromise } from 'xml2js';
|
3
|
+
import { ParseError } from '../types/errors.js';
|
4
|
+
export class PptxVisualParser {
|
5
|
+
zip = null;
|
6
|
+
slideCount = 0;
|
7
|
+
relationships = new Map();
|
8
|
+
themes = new Map();
|
9
|
+
/**
|
10
|
+
* Parse PPTX buffer to extract comprehensive visual information
|
11
|
+
*/
|
12
|
+
async parseVisualElements(pptxBuffer) {
|
13
|
+
try {
|
14
|
+
// Load PPTX as ZIP
|
15
|
+
this.zip = await JSZip.loadAsync(pptxBuffer);
|
16
|
+
// Parse presentation structure
|
17
|
+
const presentationXml = await this.getXmlContent('ppt/presentation.xml');
|
18
|
+
const presentation = await parseStringPromise(presentationXml);
|
19
|
+
// Extract slide references
|
20
|
+
const slideIds = this.extractSlideReferences(presentation);
|
21
|
+
this.slideCount = slideIds.length;
|
22
|
+
console.log(`Found ${this.slideCount} slides to parse`);
|
23
|
+
// Load relationships and themes
|
24
|
+
await this.loadRelationships();
|
25
|
+
await this.loadThemes();
|
26
|
+
// Parse each slide
|
27
|
+
const slides = [];
|
28
|
+
for (let i = 0; i < slideIds.length; i++) {
|
29
|
+
const slideId = slideIds[i];
|
30
|
+
try {
|
31
|
+
const slide = await this.parseSlide(slideId.id, slideId.rId, i + 1);
|
32
|
+
slides.push(slide);
|
33
|
+
console.log(`Parsed slide ${i + 1}: ${slide.elements.length} elements`);
|
34
|
+
}
|
35
|
+
catch (slideError) {
|
36
|
+
console.warn(`Failed to parse slide ${i + 1}:`, slideError);
|
37
|
+
// Create a placeholder slide
|
38
|
+
slides.push(this.createPlaceholderSlide(slideId.id, i + 1));
|
39
|
+
}
|
40
|
+
}
|
41
|
+
return slides;
|
42
|
+
}
|
43
|
+
catch (error) {
|
44
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
45
|
+
throw new ParseError('PptxVisualParser', `Visual parsing failed: ${message}`, error);
|
46
|
+
}
|
47
|
+
}
|
48
|
+
/**
|
49
|
+
* Extract slide references from presentation.xml
|
50
|
+
*/
|
51
|
+
extractSlideReferences(presentation) {
|
52
|
+
const slideIds = [];
|
53
|
+
try {
|
54
|
+
const slideIdList = presentation?.['p:presentation']?.['p:sldIdLst']?.[0]?.['p:sldId'];
|
55
|
+
if (slideIdList && Array.isArray(slideIdList)) {
|
56
|
+
for (const slide of slideIdList) {
|
57
|
+
const id = slide.$?.id;
|
58
|
+
const rId = slide.$?.['r:id'];
|
59
|
+
if (id && rId) {
|
60
|
+
slideIds.push({ id, rId });
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
}
|
65
|
+
catch (error) {
|
66
|
+
console.warn('Error extracting slide references:', error);
|
67
|
+
}
|
68
|
+
return slideIds;
|
69
|
+
}
|
70
|
+
/**
|
71
|
+
* Load relationships from _rels files
|
72
|
+
*/
|
73
|
+
async loadRelationships() {
|
74
|
+
try {
|
75
|
+
// Load presentation relationships
|
76
|
+
const presRels = await this.getXmlContent('ppt/_rels/presentation.xml.rels');
|
77
|
+
if (presRels) {
|
78
|
+
const relsDoc = await parseStringPromise(presRels);
|
79
|
+
this.relationships.set('presentation', relsDoc);
|
80
|
+
}
|
81
|
+
// Load slide relationships
|
82
|
+
this.zip?.forEach((relativePath, file) => {
|
83
|
+
if (relativePath.includes('ppt/slides/_rels/') && relativePath.endsWith('.rels')) {
|
84
|
+
// Load slide-specific relationships
|
85
|
+
file.async('string').then(async (content) => {
|
86
|
+
try {
|
87
|
+
const relsDoc = await parseStringPromise(content);
|
88
|
+
const slideId = relativePath.match(/slide(\d+)\.xml\.rels/)?.[1];
|
89
|
+
if (slideId) {
|
90
|
+
this.relationships.set(`slide${slideId}`, relsDoc);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
catch (error) {
|
94
|
+
console.warn(`Failed to parse relationships for ${relativePath}:`, error);
|
95
|
+
}
|
96
|
+
});
|
97
|
+
}
|
98
|
+
});
|
99
|
+
}
|
100
|
+
catch (error) {
|
101
|
+
console.warn('Error loading relationships:', error);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
/**
|
105
|
+
* Load theme information
|
106
|
+
*/
|
107
|
+
async loadThemes() {
|
108
|
+
try {
|
109
|
+
this.zip?.forEach((relativePath, file) => {
|
110
|
+
if (relativePath.includes('ppt/theme/') && relativePath.endsWith('.xml')) {
|
111
|
+
file.async('string').then(async (content) => {
|
112
|
+
try {
|
113
|
+
const themeDoc = await parseStringPromise(content);
|
114
|
+
const themeId = relativePath.match(/theme(\d+)\.xml/)?.[1] || '1';
|
115
|
+
this.themes.set(themeId, themeDoc);
|
116
|
+
}
|
117
|
+
catch (error) {
|
118
|
+
console.warn(`Failed to parse theme ${relativePath}:`, error);
|
119
|
+
}
|
120
|
+
});
|
121
|
+
}
|
122
|
+
});
|
123
|
+
}
|
124
|
+
catch (error) {
|
125
|
+
console.warn('Error loading themes:', error);
|
126
|
+
}
|
127
|
+
}
|
128
|
+
/**
|
129
|
+
* Parse individual slide
|
130
|
+
*/
|
131
|
+
async parseSlide(slideId, rId, slideNumber) {
|
132
|
+
// Get slide path from relationships
|
133
|
+
const slideRel = this.findRelationshipTarget('presentation', rId);
|
134
|
+
const slidePath = slideRel ? `ppt/${slideRel.target}` : `ppt/slides/slide${slideNumber}.xml`;
|
135
|
+
// Load slide XML
|
136
|
+
const slideXml = await this.getXmlContent(slidePath);
|
137
|
+
const slideDoc = await parseStringPromise(slideXml);
|
138
|
+
// Extract slide dimensions
|
139
|
+
const dimensions = this.extractSlideDimensions(slideDoc);
|
140
|
+
// Extract background
|
141
|
+
const background = this.extractSlideBackground(slideDoc);
|
142
|
+
// Extract title
|
143
|
+
const title = this.extractSlideTitle(slideDoc);
|
144
|
+
// Parse visual elements
|
145
|
+
const elements = await this.parseSlideElements(slideDoc, slideNumber);
|
146
|
+
return {
|
147
|
+
slideId,
|
148
|
+
slideNumber,
|
149
|
+
title,
|
150
|
+
background,
|
151
|
+
elements,
|
152
|
+
dimensions
|
153
|
+
};
|
154
|
+
}
|
155
|
+
/**
|
156
|
+
* Extract slide dimensions
|
157
|
+
*/
|
158
|
+
extractSlideDimensions(slideDoc) {
|
159
|
+
try {
|
160
|
+
// Default PowerPoint slide dimensions in EMUs (English Metric Units)
|
161
|
+
// Standard 16:9 slide: 12192000 x 6858000 EMUs
|
162
|
+
const defaultWidth = 12192000;
|
163
|
+
const defaultHeight = 6858000;
|
164
|
+
// Try to extract actual dimensions from slide master or layout
|
165
|
+
// This is a simplified implementation
|
166
|
+
return {
|
167
|
+
width: defaultWidth,
|
168
|
+
height: defaultHeight,
|
169
|
+
units: 'EMU'
|
170
|
+
};
|
171
|
+
}
|
172
|
+
catch {
|
173
|
+
// Fallback to standard dimensions
|
174
|
+
return {
|
175
|
+
width: 12192000,
|
176
|
+
height: 6858000,
|
177
|
+
units: 'EMU'
|
178
|
+
};
|
179
|
+
}
|
180
|
+
}
|
181
|
+
/**
|
182
|
+
* Extract slide background information
|
183
|
+
*/
|
184
|
+
extractSlideBackground(slideDoc) {
|
185
|
+
try {
|
186
|
+
const bg = slideDoc?.['p:sld']?.['p:cSld']?.[0]?.['p:bg'];
|
187
|
+
if (bg) {
|
188
|
+
// This is a simplified implementation
|
189
|
+
// Real implementation would parse various background types
|
190
|
+
return {
|
191
|
+
type: 'solid',
|
192
|
+
color: '#FFFFFF'
|
193
|
+
};
|
194
|
+
}
|
195
|
+
}
|
196
|
+
catch {
|
197
|
+
// No background or parsing failed
|
198
|
+
}
|
199
|
+
return undefined;
|
200
|
+
}
|
201
|
+
/**
|
202
|
+
* Extract slide title
|
203
|
+
*/
|
204
|
+
extractSlideTitle(slideDoc) {
|
205
|
+
try {
|
206
|
+
const shapes = slideDoc?.['p:sld']?.['p:cSld']?.[0]?.['p:spTree']?.[0]?.['p:sp'];
|
207
|
+
if (shapes && Array.isArray(shapes)) {
|
208
|
+
for (const shape of shapes) {
|
209
|
+
const nvSpPr = shape?.['p:nvSpPr']?.[0];
|
210
|
+
const ph = nvSpPr?.['p:nvPr']?.[0]?.['p:ph']?.[0];
|
211
|
+
if (ph?.$ && ph.$.type === 'title') {
|
212
|
+
// Extract text from title shape
|
213
|
+
const textBody = shape?.['p:txBody']?.[0];
|
214
|
+
if (textBody) {
|
215
|
+
const text = this.extractTextFromBody(textBody);
|
216
|
+
return text;
|
217
|
+
}
|
218
|
+
}
|
219
|
+
}
|
220
|
+
}
|
221
|
+
}
|
222
|
+
catch {
|
223
|
+
// Title extraction failed
|
224
|
+
}
|
225
|
+
return undefined;
|
226
|
+
}
|
227
|
+
/**
|
228
|
+
* Parse all visual elements in a slide
|
229
|
+
*/
|
230
|
+
async parseSlideElements(slideDoc, slideNumber) {
|
231
|
+
const elements = [];
|
232
|
+
try {
|
233
|
+
const spTree = slideDoc?.['p:sld']?.['p:cSld']?.[0]?.['p:spTree']?.[0];
|
234
|
+
if (!spTree) {
|
235
|
+
return elements;
|
236
|
+
}
|
237
|
+
// Parse shapes
|
238
|
+
const shapes = spTree['p:sp'];
|
239
|
+
if (shapes && Array.isArray(shapes)) {
|
240
|
+
for (const shape of shapes) {
|
241
|
+
const element = await this.parseShape(shape, slideNumber);
|
242
|
+
if (element) {
|
243
|
+
elements.push(element);
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
// Parse groups
|
248
|
+
const groups = spTree['p:grpSp'];
|
249
|
+
if (groups && Array.isArray(groups)) {
|
250
|
+
for (const group of groups) {
|
251
|
+
const element = await this.parseGroup(group, slideNumber);
|
252
|
+
if (element) {
|
253
|
+
elements.push(element);
|
254
|
+
}
|
255
|
+
}
|
256
|
+
}
|
257
|
+
// Parse pictures
|
258
|
+
const pics = spTree['p:pic'];
|
259
|
+
if (pics && Array.isArray(pics)) {
|
260
|
+
for (const pic of pics) {
|
261
|
+
const element = await this.parsePicture(pic, slideNumber);
|
262
|
+
if (element) {
|
263
|
+
elements.push(element);
|
264
|
+
}
|
265
|
+
}
|
266
|
+
}
|
267
|
+
// Parse charts
|
268
|
+
const charts = spTree['p:graphicFrame'];
|
269
|
+
if (charts && Array.isArray(charts)) {
|
270
|
+
for (const chart of charts) {
|
271
|
+
const element = await this.parseChart(chart, slideNumber);
|
272
|
+
if (element) {
|
273
|
+
elements.push(element);
|
274
|
+
}
|
275
|
+
}
|
276
|
+
}
|
277
|
+
}
|
278
|
+
catch (error) {
|
279
|
+
console.warn(`Error parsing slide ${slideNumber} elements:`, error);
|
280
|
+
}
|
281
|
+
return elements;
|
282
|
+
}
|
283
|
+
/**
|
284
|
+
* Parse a shape element
|
285
|
+
*/
|
286
|
+
async parseShape(shape, slideNumber) {
|
287
|
+
try {
|
288
|
+
const id = shape?.['p:nvSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
|
289
|
+
const name = shape?.['p:nvSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'shape';
|
290
|
+
// Extract position and size
|
291
|
+
const spPr = shape?.['p:spPr']?.[0];
|
292
|
+
const xfrm = spPr?.['a:xfrm']?.[0];
|
293
|
+
const position = this.extractPosition(xfrm);
|
294
|
+
const size = this.extractSize(xfrm);
|
295
|
+
// Check if it has text content
|
296
|
+
const textBody = shape?.['p:txBody']?.[0];
|
297
|
+
if (textBody) {
|
298
|
+
// Text element
|
299
|
+
const text = this.extractTextFromBody(textBody);
|
300
|
+
const paragraphs = this.extractParagraphsFromBody(textBody);
|
301
|
+
return {
|
302
|
+
id: `${id}_${name}`,
|
303
|
+
type: 'text',
|
304
|
+
position,
|
305
|
+
size,
|
306
|
+
content: {
|
307
|
+
text,
|
308
|
+
paragraphs
|
309
|
+
},
|
310
|
+
style: this.extractElementStyle(spPr, textBody)
|
311
|
+
};
|
312
|
+
}
|
313
|
+
else {
|
314
|
+
// Shape element
|
315
|
+
return {
|
316
|
+
id: `${id}_${name}`,
|
317
|
+
type: 'shape',
|
318
|
+
position,
|
319
|
+
size,
|
320
|
+
content: {
|
321
|
+
shapeType: this.extractShapeType(spPr),
|
322
|
+
geometry: this.extractShapeGeometry(spPr)
|
323
|
+
},
|
324
|
+
style: this.extractElementStyle(spPr)
|
325
|
+
};
|
326
|
+
}
|
327
|
+
}
|
328
|
+
catch (error) {
|
329
|
+
console.warn('Error parsing shape:', error);
|
330
|
+
return null;
|
331
|
+
}
|
332
|
+
}
|
333
|
+
/**
|
334
|
+
* Parse a group element
|
335
|
+
*/
|
336
|
+
async parseGroup(group, slideNumber) {
|
337
|
+
try {
|
338
|
+
const id = group?.['p:nvGrpSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
|
339
|
+
const name = group?.['p:nvGrpSpPr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'group';
|
340
|
+
// Extract position and size
|
341
|
+
const grpSpPr = group?.['p:grpSpPr']?.[0];
|
342
|
+
const xfrm = grpSpPr?.['a:xfrm']?.[0];
|
343
|
+
const position = this.extractPosition(xfrm);
|
344
|
+
const size = this.extractSize(xfrm);
|
345
|
+
// Parse child elements
|
346
|
+
const children = [];
|
347
|
+
// Child shapes
|
348
|
+
const shapes = group['p:sp'];
|
349
|
+
if (shapes && Array.isArray(shapes)) {
|
350
|
+
for (const shape of shapes) {
|
351
|
+
const child = await this.parseShape(shape, slideNumber);
|
352
|
+
if (child)
|
353
|
+
children.push(child);
|
354
|
+
}
|
355
|
+
}
|
356
|
+
return {
|
357
|
+
id: `${id}_${name}`,
|
358
|
+
type: 'group',
|
359
|
+
position,
|
360
|
+
size,
|
361
|
+
content: {},
|
362
|
+
children
|
363
|
+
};
|
364
|
+
}
|
365
|
+
catch (error) {
|
366
|
+
console.warn('Error parsing group:', error);
|
367
|
+
return null;
|
368
|
+
}
|
369
|
+
}
|
370
|
+
/**
|
371
|
+
* Parse a picture element
|
372
|
+
*/
|
373
|
+
async parsePicture(pic, slideNumber) {
|
374
|
+
try {
|
375
|
+
const id = pic?.['p:nvPicPr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
|
376
|
+
const name = pic?.['p:nvPicPr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'image';
|
377
|
+
// Extract position and size
|
378
|
+
const spPr = pic?.['p:spPr']?.[0];
|
379
|
+
const xfrm = spPr?.['a:xfrm']?.[0];
|
380
|
+
const position = this.extractPosition(xfrm);
|
381
|
+
const size = this.extractSize(xfrm);
|
382
|
+
// Extract image reference
|
383
|
+
const blip = pic?.['p:blipFill']?.[0]?.['a:blip']?.[0];
|
384
|
+
const rEmbed = blip?.$?.['r:embed'];
|
385
|
+
let imagePath = '';
|
386
|
+
if (rEmbed) {
|
387
|
+
const rel = this.findRelationshipTarget(`slide${slideNumber}`, rEmbed);
|
388
|
+
if (rel) {
|
389
|
+
imagePath = rel.target;
|
390
|
+
}
|
391
|
+
}
|
392
|
+
return {
|
393
|
+
id: `${id}_${name}`,
|
394
|
+
type: 'image',
|
395
|
+
position,
|
396
|
+
size,
|
397
|
+
content: {
|
398
|
+
imagePath,
|
399
|
+
originalSize: size,
|
400
|
+
aspectRatio: size.width / size.height
|
401
|
+
},
|
402
|
+
style: this.extractElementStyle(spPr)
|
403
|
+
};
|
404
|
+
}
|
405
|
+
catch (error) {
|
406
|
+
console.warn('Error parsing picture:', error);
|
407
|
+
return null;
|
408
|
+
}
|
409
|
+
}
|
410
|
+
/**
|
411
|
+
* Parse a chart element
|
412
|
+
*/
|
413
|
+
async parseChart(chart, slideNumber) {
|
414
|
+
try {
|
415
|
+
const id = chart?.['p:nvGraphicFramePr']?.[0]?.['p:cNvPr']?.[0]?.$.id || 'unknown';
|
416
|
+
const name = chart?.['p:nvGraphicFramePr']?.[0]?.['p:cNvPr']?.[0]?.$.name || 'chart';
|
417
|
+
// Extract position and size
|
418
|
+
const xfrm = chart?.['p:xfrm']?.[0];
|
419
|
+
const position = this.extractPosition(xfrm);
|
420
|
+
const size = this.extractSize(xfrm);
|
421
|
+
return {
|
422
|
+
id: `${id}_${name}`,
|
423
|
+
type: 'chart',
|
424
|
+
position,
|
425
|
+
size,
|
426
|
+
content: {
|
427
|
+
chartType: 'unknown', // Would need deeper parsing
|
428
|
+
data: null,
|
429
|
+
series: []
|
430
|
+
}
|
431
|
+
};
|
432
|
+
}
|
433
|
+
catch (error) {
|
434
|
+
console.warn('Error parsing chart:', error);
|
435
|
+
return null;
|
436
|
+
}
|
437
|
+
}
|
438
|
+
// Helper methods
|
439
|
+
extractPosition(xfrm) {
|
440
|
+
try {
|
441
|
+
const off = xfrm?.['a:off']?.[0];
|
442
|
+
return {
|
443
|
+
x: parseInt(off?.$.x || '0'),
|
444
|
+
y: parseInt(off?.$.y || '0'),
|
445
|
+
z: 0
|
446
|
+
};
|
447
|
+
}
|
448
|
+
catch {
|
449
|
+
return { x: 0, y: 0, z: 0 };
|
450
|
+
}
|
451
|
+
}
|
452
|
+
extractSize(xfrm) {
|
453
|
+
try {
|
454
|
+
const ext = xfrm?.['a:ext']?.[0];
|
455
|
+
return {
|
456
|
+
width: parseInt(ext?.$.cx || '0'),
|
457
|
+
height: parseInt(ext?.$.cy || '0')
|
458
|
+
};
|
459
|
+
}
|
460
|
+
catch {
|
461
|
+
return { width: 0, height: 0 };
|
462
|
+
}
|
463
|
+
}
|
464
|
+
extractElementStyle(spPr, textBody) {
|
465
|
+
const style = {};
|
466
|
+
try {
|
467
|
+
// Extract fill color
|
468
|
+
const solidFill = spPr?.['a:solidFill']?.[0];
|
469
|
+
if (solidFill) {
|
470
|
+
// This is simplified - real implementation would handle various color formats
|
471
|
+
style.fill = '#000000';
|
472
|
+
}
|
473
|
+
// Extract font information from text body
|
474
|
+
if (textBody) {
|
475
|
+
const defRPr = textBody?.['a:lstStyle']?.[0]?.['a:lvl1pPr']?.[0]?.['a:defRPr']?.[0];
|
476
|
+
if (defRPr) {
|
477
|
+
style.font = this.extractFontInfo(defRPr);
|
478
|
+
}
|
479
|
+
}
|
480
|
+
}
|
481
|
+
catch {
|
482
|
+
// Style extraction failed
|
483
|
+
}
|
484
|
+
return style;
|
485
|
+
}
|
486
|
+
extractFontInfo(rPr) {
|
487
|
+
return {
|
488
|
+
family: rPr?.['a:latin']?.[0]?.$.typeface || 'Arial',
|
489
|
+
size: parseInt(rPr?.$.sz || '1800') / 100, // Convert from hundredths of points
|
490
|
+
color: '#000000', // Simplified
|
491
|
+
bold: rPr?.$.b === '1',
|
492
|
+
italic: rPr?.$.i === '1',
|
493
|
+
underline: rPr?.$.u !== undefined
|
494
|
+
};
|
495
|
+
}
|
496
|
+
extractTextFromBody(textBody) {
|
497
|
+
try {
|
498
|
+
const paragraphs = textBody?.['a:p'];
|
499
|
+
if (paragraphs && Array.isArray(paragraphs)) {
|
500
|
+
return paragraphs
|
501
|
+
.map((p) => this.extractTextFromParagraph(p))
|
502
|
+
.filter(text => text.length > 0)
|
503
|
+
.join('\n');
|
504
|
+
}
|
505
|
+
}
|
506
|
+
catch {
|
507
|
+
// Text extraction failed
|
508
|
+
}
|
509
|
+
return '';
|
510
|
+
}
|
511
|
+
extractParagraphsFromBody(textBody) {
|
512
|
+
const paragraphs = [];
|
513
|
+
try {
|
514
|
+
const pArray = textBody?.['a:p'];
|
515
|
+
if (pArray && Array.isArray(pArray)) {
|
516
|
+
for (const p of pArray) {
|
517
|
+
const text = this.extractTextFromParagraph(p);
|
518
|
+
if (text) {
|
519
|
+
paragraphs.push({
|
520
|
+
text,
|
521
|
+
runs: this.extractTextRuns(p),
|
522
|
+
alignment: this.extractAlignment(p),
|
523
|
+
level: parseInt(p?.['a:pPr']?.[0]?.$.lvl || '0')
|
524
|
+
});
|
525
|
+
}
|
526
|
+
}
|
527
|
+
}
|
528
|
+
}
|
529
|
+
catch {
|
530
|
+
// Paragraph extraction failed
|
531
|
+
}
|
532
|
+
return paragraphs;
|
533
|
+
}
|
534
|
+
extractTextFromParagraph(p) {
|
535
|
+
try {
|
536
|
+
const runs = p?.['a:r'] || [];
|
537
|
+
return runs
|
538
|
+
.map((run) => run?.['a:t']?.[0] || '')
|
539
|
+
.join('');
|
540
|
+
}
|
541
|
+
catch {
|
542
|
+
return '';
|
543
|
+
}
|
544
|
+
}
|
545
|
+
extractTextRuns(p) {
|
546
|
+
const runs = [];
|
547
|
+
try {
|
548
|
+
const runArray = p?.['a:r'];
|
549
|
+
if (runArray && Array.isArray(runArray)) {
|
550
|
+
for (const run of runArray) {
|
551
|
+
const text = run?.['a:t']?.[0] || '';
|
552
|
+
if (text) {
|
553
|
+
runs.push({
|
554
|
+
text,
|
555
|
+
font: this.extractFontInfo(run?.['a:rPr']?.[0])
|
556
|
+
});
|
557
|
+
}
|
558
|
+
}
|
559
|
+
}
|
560
|
+
}
|
561
|
+
catch {
|
562
|
+
// Run extraction failed
|
563
|
+
}
|
564
|
+
return runs;
|
565
|
+
}
|
566
|
+
extractAlignment(p) {
|
567
|
+
try {
|
568
|
+
const algn = p?.['a:pPr']?.[0]?.$.algn;
|
569
|
+
switch (algn) {
|
570
|
+
case 'ctr': return 'center';
|
571
|
+
case 'r': return 'right';
|
572
|
+
case 'just': return 'justify';
|
573
|
+
default: return 'left';
|
574
|
+
}
|
575
|
+
}
|
576
|
+
catch {
|
577
|
+
return 'left';
|
578
|
+
}
|
579
|
+
}
|
580
|
+
extractShapeType(spPr) {
|
581
|
+
try {
|
582
|
+
const prstGeom = spPr?.['a:prstGeom']?.[0];
|
583
|
+
return prstGeom?.$.prst || 'unknown';
|
584
|
+
}
|
585
|
+
catch {
|
586
|
+
return 'unknown';
|
587
|
+
}
|
588
|
+
}
|
589
|
+
extractShapeGeometry(spPr) {
|
590
|
+
try {
|
591
|
+
const custGeom = spPr?.['a:custGeom']?.[0];
|
592
|
+
if (custGeom) {
|
593
|
+
return custGeom;
|
594
|
+
}
|
595
|
+
const prstGeom = spPr?.['a:prstGeom']?.[0];
|
596
|
+
if (prstGeom) {
|
597
|
+
return { preset: prstGeom.$.prst };
|
598
|
+
}
|
599
|
+
}
|
600
|
+
catch {
|
601
|
+
// Geometry extraction failed
|
602
|
+
}
|
603
|
+
return null;
|
604
|
+
}
|
605
|
+
findRelationshipTarget(sourceId, relationshipId) {
|
606
|
+
try {
|
607
|
+
const rels = this.relationships.get(sourceId);
|
608
|
+
if (rels?.Relationships?.Relationship) {
|
609
|
+
const relationships = Array.isArray(rels.Relationships.Relationship)
|
610
|
+
? rels.Relationships.Relationship
|
611
|
+
: [rels.Relationships.Relationship];
|
612
|
+
for (const rel of relationships) {
|
613
|
+
if (rel.$.Id === relationshipId) {
|
614
|
+
return {
|
615
|
+
target: rel.$.Target,
|
616
|
+
type: rel.$.Type
|
617
|
+
};
|
618
|
+
}
|
619
|
+
}
|
620
|
+
}
|
621
|
+
}
|
622
|
+
catch {
|
623
|
+
// Relationship lookup failed
|
624
|
+
}
|
625
|
+
return null;
|
626
|
+
}
|
627
|
+
createPlaceholderSlide(slideId, slideNumber) {
|
628
|
+
return {
|
629
|
+
slideId,
|
630
|
+
slideNumber,
|
631
|
+
title: `Slide ${slideNumber}`,
|
632
|
+
elements: [],
|
633
|
+
dimensions: {
|
634
|
+
width: 12192000,
|
635
|
+
height: 6858000,
|
636
|
+
units: 'EMU'
|
637
|
+
}
|
638
|
+
};
|
639
|
+
}
|
640
|
+
async getXmlContent(path) {
|
641
|
+
const file = this.zip?.file(path);
|
642
|
+
if (!file) {
|
643
|
+
throw new Error(`File not found: ${path}`);
|
644
|
+
}
|
645
|
+
return await file.async('string');
|
646
|
+
}
|
647
|
+
}
|
648
|
+
//# sourceMappingURL=pptx-visual-parser.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pptx-visual-parser.js","sourceRoot":"","sources":["../../src/utils/pptx-visual-parser.ts"],"names":[],"mappings":"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"}
|