file2md 1.1.10 → 1.2.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.
@@ -1,393 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs/promises';
3
- import { ParseError } from '../types/errors.js';
4
- export class PuppeteerRenderer {
5
- outputDir;
6
- puppeteer = null;
7
- browser = null;
8
- constructor(outputDir) {
9
- this.outputDir = outputDir;
10
- }
11
- /**
12
- * Initialize Puppeteer (lazy loading to avoid dependency issues)
13
- */
14
- async initializePuppeteer() {
15
- if (this.puppeteer) {
16
- return;
17
- }
18
- try {
19
- const puppeteerModule = await Function('return import("puppeteer")')();
20
- this.puppeteer = puppeteerModule;
21
- console.log('Puppeteer initialized successfully');
22
- }
23
- catch (error) {
24
- throw new ParseError('PuppeteerRenderer', 'Puppeteer not available. Install with: npm install puppeteer', error);
25
- }
26
- }
27
- /**
28
- * Launch browser instance
29
- */
30
- async launchBrowser(options) {
31
- if (this.browser) {
32
- return;
33
- }
34
- await this.initializePuppeteer();
35
- try {
36
- this.browser = await this.puppeteer.launch({
37
- headless: options.headless !== false ? 'new' : false,
38
- defaultViewport: {
39
- width: options.width || 1920,
40
- height: options.height || 1080,
41
- deviceScaleFactor: options.deviceScaleFactor || 2
42
- },
43
- args: [
44
- '--no-sandbox',
45
- '--disable-setuid-sandbox',
46
- '--disable-web-security',
47
- '--disable-features=VizDisplayCompositor',
48
- '--font-render-hinting=none'
49
- ]
50
- });
51
- console.log('Puppeteer browser launched successfully');
52
- }
53
- catch (error) {
54
- throw new ParseError('PuppeteerRenderer', 'Failed to launch Puppeteer browser', error);
55
- }
56
- }
57
- /**
58
- * Render slides using visual layouts in browser
59
- */
60
- async renderSlidesFromLayouts(visualLayouts, options = {}) {
61
- const { width = 1920, height = 1080, quality = 90, format = 'png', deviceScaleFactor = 2, timeout = 30000 } = options;
62
- try {
63
- // Ensure output directory exists
64
- await fs.mkdir(this.outputDir, { recursive: true });
65
- console.log('Created Puppeteer output directory:', this.outputDir);
66
- // Launch browser
67
- await this.launchBrowser(options);
68
- // Create a new page
69
- const page = await this.browser.newPage();
70
- await page.setViewport({ width, height, deviceScaleFactor });
71
- const slideImages = [];
72
- // Render each slide
73
- for (let i = 0; i < visualLayouts.length; i++) {
74
- const layout = visualLayouts[i];
75
- const slideNumber = i + 1;
76
- try {
77
- console.log(`Rendering slide ${slideNumber} with Puppeteer...`);
78
- // Generate HTML for this slide
79
- const slideHtml = this.generateSlideHtml(layout, { width, height });
80
- // Load HTML content
81
- await page.setContent(slideHtml, {
82
- waitUntil: 'networkidle0',
83
- timeout
84
- });
85
- // Wait for any fonts to load
86
- await page.waitForTimeout(1000);
87
- // Take screenshot
88
- const filename = `slide-${slideNumber.toString().padStart(3, '0')}.${format}`;
89
- const savedPath = path.join(this.outputDir, filename);
90
- const screenshotBuffer = await page.screenshot({
91
- path: savedPath,
92
- type: format,
93
- quality: format === 'jpeg' ? quality : undefined,
94
- fullPage: false,
95
- clip: {
96
- x: 0,
97
- y: 0,
98
- width,
99
- height
100
- }
101
- });
102
- // Verify file was created
103
- const stats = await fs.stat(savedPath);
104
- console.log(`Puppeteer rendered slide ${slideNumber}: ${savedPath} (${stats.size} bytes)`);
105
- slideImages.push({
106
- originalPath: `slide${slideNumber}`,
107
- savedPath,
108
- size: stats.size,
109
- format
110
- });
111
- }
112
- catch (slideError) {
113
- console.warn(`Failed to render slide ${slideNumber} with Puppeteer:`, slideError);
114
- // Continue with other slides
115
- }
116
- }
117
- await page.close();
118
- return {
119
- slideImages,
120
- slideCount: slideImages.length,
121
- metadata: {
122
- renderMethod: 'puppeteer',
123
- width,
124
- height,
125
- quality,
126
- format
127
- }
128
- };
129
- }
130
- catch (error) {
131
- const message = error instanceof Error ? error.message : 'Unknown error';
132
- throw new ParseError('PuppeteerRenderer', `Puppeteer rendering failed: ${message}`, error);
133
- }
134
- }
135
- /**
136
- * Generate HTML content for a slide
137
- */
138
- generateSlideHtml(layout, dimensions) {
139
- const { width, height } = dimensions;
140
- // Convert EMU to pixels (1 EMU = 1/914400 inches, assume 96 DPI)
141
- const emuToPixels = (emu) => Math.round(emu / 914400 * 96);
142
- const slideWidth = emuToPixels(layout.dimensions.width);
143
- const slideHeight = emuToPixels(layout.dimensions.height);
144
- // Scale factor to fit slide into viewport
145
- const scaleX = width / slideWidth;
146
- const scaleY = height / slideHeight;
147
- const scale = Math.min(scaleX, scaleY);
148
- const scaledWidth = slideWidth * scale;
149
- const scaledHeight = slideHeight * scale;
150
- let elementsHtml = '';
151
- // Render each element
152
- for (const element of layout.elements) {
153
- const elementHtml = this.renderElement(element, scale);
154
- if (elementHtml) {
155
- elementsHtml += elementHtml;
156
- }
157
- }
158
- return `
159
- <!DOCTYPE html>
160
- <html lang="en">
161
- <head>
162
- <meta charset="UTF-8">
163
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
164
- <title>Slide ${layout.slideNumber}</title>
165
- <style>
166
- @import url('https://fonts.googleapis.com/css2?family=Arial:wght@400;700&family=Helvetica:wght@400;700&family=Times+New+Roman:wght@400;700&family=Calibri:wght@400;700&display=swap');
167
-
168
- * {
169
- margin: 0;
170
- padding: 0;
171
- box-sizing: border-box;
172
- }
173
-
174
- body {
175
- width: ${width}px;
176
- height: ${height}px;
177
- background: ${layout.background?.color || '#FFFFFF'};
178
- font-family: 'Calibri', 'Arial', sans-serif;
179
- overflow: hidden;
180
- position: relative;
181
- display: flex;
182
- align-items: center;
183
- justify-content: center;
184
- }
185
-
186
- .slide-container {
187
- width: ${scaledWidth}px;
188
- height: ${scaledHeight}px;
189
- position: relative;
190
- background: ${layout.background?.color || '#FFFFFF'};
191
- border: 1px solid #e0e0e0;
192
- }
193
-
194
- .slide-element {
195
- position: absolute;
196
- overflow: hidden;
197
- }
198
-
199
- .text-element {
200
- font-size: 16px;
201
- line-height: 1.2;
202
- color: #000000;
203
- word-wrap: break-word;
204
- display: flex;
205
- align-items: center;
206
- padding: 4px;
207
- }
208
-
209
- .shape-element {
210
- border: 1px solid #666666;
211
- background: #f0f0f0;
212
- }
213
-
214
- .image-placeholder {
215
- background: linear-gradient(45deg, #f0f0f0 25%, transparent 25%),
216
- linear-gradient(-45deg, #f0f0f0 25%, transparent 25%),
217
- linear-gradient(45deg, transparent 75%, #f0f0f0 75%),
218
- linear-gradient(-45deg, transparent 75%, #f0f0f0 75%);
219
- background-size: 20px 20px;
220
- background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
221
- border: 2px dashed #ccc;
222
- display: flex;
223
- align-items: center;
224
- justify-content: center;
225
- color: #666;
226
- font-size: 14px;
227
- }
228
-
229
- .chart-placeholder {
230
- background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
231
- border: 2px solid #2196f3;
232
- display: flex;
233
- align-items: center;
234
- justify-content: center;
235
- color: #1976d2;
236
- font-size: 14px;
237
- font-weight: bold;
238
- }
239
-
240
- .table-element {
241
- border: 1px solid #ccc;
242
- background: #fff;
243
- }
244
-
245
- .table-element table {
246
- width: 100%;
247
- height: 100%;
248
- border-collapse: collapse;
249
- }
250
-
251
- .table-element td {
252
- border: 1px solid #ddd;
253
- padding: 4px 8px;
254
- font-size: 12px;
255
- vertical-align: top;
256
- }
257
- </style>
258
- </head>
259
- <body>
260
- <div class="slide-container">
261
- ${elementsHtml}
262
- </div>
263
- </body>
264
- </html>`;
265
- }
266
- /**
267
- * Render individual element to HTML
268
- */
269
- renderElement(element, scale) {
270
- const emuToPixels = (emu) => Math.round(emu / 914400 * 96 * scale);
271
- const left = emuToPixels(element.position.x);
272
- const top = emuToPixels(element.position.y);
273
- const width = emuToPixels(element.size.width);
274
- const height = emuToPixels(element.size.height);
275
- const baseStyle = `left: ${left}px; top: ${top}px; width: ${width}px; height: ${height}px;`;
276
- switch (element.type) {
277
- case 'text':
278
- const textContent = element.content?.text || '';
279
- const fontSize = Math.max(10, Math.min(24, width / 20)); // Responsive font size
280
- return `
281
- <div class="slide-element text-element" style="${baseStyle} font-size: ${fontSize}px;">
282
- ${this.escapeHtml(textContent)}
283
- </div>
284
- `;
285
- case 'shape':
286
- return `
287
- <div class="slide-element shape-element" style="${baseStyle}">
288
- <div style="width: 100%; height: 100%; background: ${element.style?.fill || '#f0f0f0'};"></div>
289
- </div>
290
- `;
291
- case 'image':
292
- return `
293
- <div class="slide-element image-placeholder" style="${baseStyle}">
294
- 📷 Image
295
- </div>
296
- `;
297
- case 'chart':
298
- const chartType = element.content?.chartType || 'Chart';
299
- return `
300
- <div class="slide-element chart-placeholder" style="${baseStyle}">
301
- 📊 ${this.escapeHtml(chartType)}
302
- </div>
303
- `;
304
- case 'table':
305
- const rows = element.content?.rows || [];
306
- let tableHtml = '<table>';
307
- for (const row of rows.slice(0, 10)) { // Limit rows for performance
308
- tableHtml += '<tr>';
309
- for (const cell of row.cells.slice(0, 6)) { // Limit columns
310
- tableHtml += `<td>${this.escapeHtml(cell.text || '')}</td>`;
311
- }
312
- tableHtml += '</tr>';
313
- }
314
- tableHtml += '</table>';
315
- return `
316
- <div class="slide-element table-element" style="${baseStyle}">
317
- ${tableHtml}
318
- </div>
319
- `;
320
- case 'group':
321
- // Render child elements
322
- let groupHtml = '';
323
- if (element.children && Array.isArray(element.children)) {
324
- for (const child of element.children) {
325
- // Adjust child positions relative to group
326
- const adjustedChild = {
327
- ...child,
328
- position: {
329
- x: child.position.x + element.position.x,
330
- y: child.position.y + element.position.y,
331
- z: child.position.z
332
- }
333
- };
334
- groupHtml += this.renderElement(adjustedChild, scale);
335
- }
336
- }
337
- return groupHtml;
338
- default:
339
- return `
340
- <div class="slide-element" style="${baseStyle} border: 1px dashed #ccc; background: #fafafa;">
341
- <div style="padding: 4px; font-size: 12px; color: #666;">
342
- ${element.type || 'Unknown'}
343
- </div>
344
- </div>
345
- `;
346
- }
347
- }
348
- /**
349
- * Escape HTML characters
350
- */
351
- escapeHtml(text) {
352
- return text
353
- .replace(/&/g, '&amp;')
354
- .replace(/</g, '&lt;')
355
- .replace(/>/g, '&gt;')
356
- .replace(/"/g, '&quot;')
357
- .replace(/'/g, '&#39;');
358
- }
359
- /**
360
- * Check if Puppeteer is available
361
- */
362
- static async isAvailable() {
363
- try {
364
- await Function('return import("puppeteer")')();
365
- return true;
366
- }
367
- catch {
368
- return false;
369
- }
370
- }
371
- /**
372
- * Close browser instance
373
- */
374
- async close() {
375
- if (this.browser) {
376
- try {
377
- await this.browser.close();
378
- this.browser = null;
379
- console.log('Puppeteer browser closed');
380
- }
381
- catch (error) {
382
- console.warn('Error closing Puppeteer browser:', error);
383
- }
384
- }
385
- }
386
- /**
387
- * Clean up resources
388
- */
389
- async cleanup() {
390
- await this.close();
391
- }
392
- }
393
- //# sourceMappingURL=puppeteer-renderer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"puppeteer-renderer.js","sourceRoot":"","sources":["../../src/utils/puppeteer-renderer.ts"],"names":[],"mappings":"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"}
@@ -1,119 +0,0 @@
1
- import { Buffer } from 'node:buffer';
2
- import type { ImageData } from '../types/interfaces.js';
3
- import { type SlideLayout } from './pptx-visual-parser.js';
4
- import { type PuppeteerRenderOptions } from './puppeteer-renderer.js';
5
- export interface SlideRenderOptions {
6
- readonly quality?: number;
7
- readonly density?: number;
8
- readonly format?: 'png' | 'jpg';
9
- readonly saveBase64?: boolean;
10
- readonly useVisualLayouts?: boolean;
11
- readonly usePuppeteer?: boolean;
12
- readonly puppeteerOptions?: PuppeteerRenderOptions;
13
- }
14
- export interface SlideRenderResult {
15
- readonly slideImages: readonly ImageData[];
16
- readonly slideCount: number;
17
- readonly visualLayouts?: readonly SlideLayout[];
18
- readonly metadata: {
19
- readonly format: string;
20
- readonly quality: number;
21
- readonly density: number;
22
- readonly hasVisualLayouts?: boolean;
23
- };
24
- }
25
- export declare class SlideRenderer {
26
- private readonly outputDir;
27
- private readonly converter;
28
- constructor(outputDir: string);
29
- /**
30
- * Convert PPTX buffer to individual slide images
31
- */
32
- renderSlidesToImages(pptxBuffer: Buffer, options?: SlideRenderOptions): Promise<SlideRenderResult>;
33
- /**
34
- * Convert PPTX buffer to PDF buffer using enhanced LibreOffice converter
35
- */
36
- private convertPptxToPdf;
37
- /**
38
- * Create slide images without LibreOffice using direct PPTX parsing
39
- */
40
- private createAlternativeSlideImages;
41
- private generatedSlideImages;
42
- /**
43
- * Render a single slide to image using canvas with multi-language font support
44
- */
45
- private renderSlideToImage;
46
- /**
47
- * Register system fonts and fallback fonts for international character support
48
- */
49
- private registerFontsForCanvas;
50
- /**
51
- * Get font family name from font path
52
- */
53
- private getFontFamily;
54
- /**
55
- * Get universal font string with fallbacks for international characters
56
- */
57
- private getUniversalFont;
58
- /**
59
- * Wrap text to fit within specified width
60
- */
61
- private wrapText;
62
- /**
63
- * Create a text-based slide image when canvas is not available
64
- */
65
- private createTextBasedSlideImage;
66
- /**
67
- * Create SVG representation of slide content
68
- */
69
- private createSVGSlideImage;
70
- /**
71
- * Convert SVG to PNG buffer
72
- */
73
- private convertSVGToPNG;
74
- /**
75
- * Extract text content from slide XML data
76
- */
77
- private extractSlideText;
78
- /**
79
- * Create placeholder slide image for failed conversions
80
- */
81
- private createPlaceholderSlideImage;
82
- /**
83
- * Convert PDF buffer to individual slide images with optimization
84
- */
85
- private convertPdfToSlideImages;
86
- /**
87
- * Optimize PDF to image conversion settings based on quality requirements
88
- */
89
- private optimizePdfToImageSettings;
90
- /**
91
- * Generate markdown with slide images
92
- */
93
- generateSlideMarkdown(slideImages: readonly ImageData[], title?: string): string;
94
- /**
95
- * Enhance slide images using visual layout information
96
- */
97
- private enhanceSlideImagesWithLayouts;
98
- /**
99
- * Add visual enhancements based on layout information
100
- */
101
- private addVisualEnhancements;
102
- /**
103
- * Clean up generated image files
104
- */
105
- cleanup(): Promise<void>;
106
- /**
107
- * Render slides using Puppeteer browser-based rendering
108
- */
109
- private renderWithPuppeteer;
110
- /**
111
- * Check if LibreOffice is available on the system
112
- */
113
- static checkLibreOfficeAvailability(): Promise<boolean>;
114
- /**
115
- * Check if Puppeteer is available on the system
116
- */
117
- static checkPuppeteerAvailability(): Promise<boolean>;
118
- }
119
- //# sourceMappingURL=slide-renderer.d.ts.map
@@ -1 +0,0 @@
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;AAGxD,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAKzF,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;IAC9B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAChD,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;QACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;KACrC,CAAC;CACH;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;gBAErC,SAAS,EAAE,MAAM;IAK7B;;OAEG;IACG,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC;IAmG7B;;OAEG;YACW,gBAAgB;IAmE9B;;OAEG;YACW,4BAA4B;IAkF1C,OAAO,CAAC,oBAAoB,CAAmB;IAE/C;;OAEG;YACW,kBAAkB;IA8DhC;;OAEG;YACW,sBAAsB;IA2CpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAwBhB;;OAEG;YACW,yBAAyB;IAmBvC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;YACW,eAAe;IAwB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;YACW,2BAA2B;IAQzC;;OAEG;YACW,uBAAuB;IAwFrC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA6ClC;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAuBhF;;OAEG;YACW,6BAA6B;IA2D3C;;OAEG;YACW,qBAAqB;IA6CnC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;YACW,mBAAmB;IAmBjC;;OAEG;WACU,4BAA4B,IAAI,OAAO,CAAC,OAAO,CAAC;IAW7D;;OAEG;WACU,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC;CAG5D"}