import puppeteer from 'puppeteer'; class ScreenshotService { async generateScreenshot(htmlContent, options = {}) { let browser = null; try { console.log('Starting Puppeteer browser...'); // 更适合容器环境的Puppeteer配置 browser = await puppeteer.launch({ headless: 'new', args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-accelerated-2d-canvas', '--no-first-run', '--no-zygote', '--disable-gpu', '--disable-background-timer-throttling', '--disable-backgrounding-occluded-windows', '--disable-renderer-backgrounding', '--disable-web-security', '--disable-features=TranslateUI', '--disable-extensions', '--disable-component-extensions-with-background-pages', '--disable-default-apps', '--mute-audio', '--no-default-browser-check', '--autoplay-policy=user-gesture-required', '--disable-background-mode', '--disable-plugins', '--disable-translate', '--disable-ipc-flooding-protection', '--memory-pressure-off', '--max_old_space_size=4096' ], timeout: 30000, protocolTimeout: 30000 }); console.log('Browser launched successfully'); const page = await browser.newPage(); console.log('New page created'); // PPT标准尺寸 (4:3 比例) const pptWidth = 1000; const pptHeight = 750; // 设置页面视窗大小,添加足够的边距以避免裁切问题 await page.setViewport({ width: pptWidth + 100, // 添加边距 height: pptHeight + 100, // 添加边距 deviceScaleFactor: 2 // 高分辨率 }); console.log('Viewport set'); // 修改HTML内容,确保PPT容器居中且尺寸精确 const modifiedHtmlContent = htmlContent.replace( '