import puppeteer from 'puppeteer'; | |
class ScreenshotService { | |
async generateScreenshot(htmlContent, options = {}) { | |
const browser = await puppeteer.launch({ | |
headless: true, | |
args: [ | |
'--no-sandbox', | |
'--disable-setuid-sandbox', | |
'--disable-dev-shm-usage', | |
'--disable-accelerated-2d-canvas', | |
'--no-first-run', | |
'--no-zygote', | |
'--single-process', // <- this one doesn't work in Windows | |
'--disable-gpu' | |
] | |
}); | |
try { | |
const page = await browser.newPage(); | |
// 设置页面视窗大小,匹配PPT的4:3比例 | |
await page.setViewport({ | |
width: 1000, | |
height: 750, | |
deviceScaleFactor: 2 // 高分辨率 | |
}); | |
// 设置HTML内容 | |
await page.setContent(htmlContent, { waitUntil: 'networkidle0' }); | |
// 等待页面完全加载 | |
await page.waitForTimeout(1000); | |
// 截图 | |
const screenshot = await page.screenshot({ | |
type: 'jpeg', | |
quality: 85, | |
fullPage: false | |
}); | |
return screenshot; | |
} finally { | |
await browser.close(); | |
} | |
} | |
} | |
export default new ScreenshotService(); |