Initial commit: vitepress-exporter plugin

This commit is contained in:
2026-04-20 12:00:50 +08:00
commit e54a8a3b05
15 changed files with 6761 additions and 0 deletions

92
puppeteer_version.txt Normal file
View File

@@ -0,0 +1,92 @@
// 尝试使用 Puppeteer 截图 Canvas(保留完整样式)
async tryNativeCanvasCapture(canvasFile: TFile): Promise<Uint8Array | null> {
let newWindowLeaf: any = null;
try {
console.log('🔍 Step 1: Opening canvas in new window...');
// 创建新窗口
newWindowLeaf = this.app.workspace.getLeaf('window');
if (!newWindowLeaf) {
console.log('❌ Failed to create new window');
return null;
}
console.log('✅ New window created, opening canvas file...');
await newWindowLeaf.openFile(canvasFile);
console.log('⏳ Step 2: Waiting for canvas render...');
// 等待 Canvas 渲染
await new Promise(resolve => setTimeout(resolve, 3000));
console.log('📸 Step 3: Capturing with Puppeteer...');
// @ts-ignore
const puppeteer = require('puppeteer');
// 启动 Puppeteer
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
try {
const page = await browser.newPage();
// 获取新窗口的 HTML 内容
const container = newWindowLeaf.containerEl;
const canvasWrapper = container.querySelector('.canvas-wrapper');
if (!canvasWrapper) {
console.log('❌ Could not find canvas wrapper');
return null;
}
// 获取完整的 HTML,包括所有样式
const htmlContent = canvasWrapper.outerHTML;
// 设置 HTML 内容
await page.setContent(htmlContent, {
waitUntil: 'networkidle0',
timeout: 10000
});
// 计算内容尺寸
const contentSize = this.getCanvasContentSize(canvasWrapper);
const viewportWidth = Math.ceil(contentSize.width);
const viewportHeight = Math.ceil(contentSize.height);
console.log(`📸 Screenshot size: ${viewportWidth}x${viewportHeight}`);
// 截图
const screenshot = await page.screenshot({
type: 'png',
clip: {
x: contentSize.offsetX,
y: contentSize.offsetY,
width: contentSize.width,
height: contentSize.height
}
});
console.log('✅ Capture successful!');
return new Uint8Array(screenshot);
} finally {
await browser.close();
}
} catch (error) {
console.error('❌ Puppeteer capture failed:', error);
return null;
} finally {
// 关闭新窗口
if (newWindowLeaf) {
try {
newWindowLeaf.detach();
console.log('🧹 Closed new window');
} catch (e) {
console.log('⚠️ Could not close new window:', e);
}
}
}
}