#!/usr/bin/env node // 由 manual.md 生成 HTML / PDF / DOCX 三种格式到 dist/ // 依赖:pandoc(brew install pandoc)、playwright(复用 web/node_modules) // 运行:node docs/user-manual/scripts/build-formats.mjs import { execFileSync } from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; const MANUAL_DIR = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); const DIST = path.join(MANUAL_DIR, 'dist'); const MD = path.join(MANUAL_DIR, 'manual.md'); const CSS = path.join(MANUAL_DIR, 'scripts', 'manual.css'); fs.mkdirSync(DIST, { recursive: true }); function pandoc(args) { execFileSync('pandoc', args, { cwd: MANUAL_DIR, stdio: 'inherit' }); } // 1) HTML(嵌入图片与样式,单文件可分发) const htmlPath = path.join(DIST, '系统使用说明书.html'); pandoc([ 'manual.md', '-f', 'gfm', '-t', 'html5', '--standalone', '--embed-resources', `--css=${CSS}`, '--metadata', 'title=水木东方 · 医疗器械 AI 协同工作台 — 系统使用说明书', '--toc', '--toc-depth=2', '--shift-heading-level-by=0', '-o', htmlPath, ]); console.log('[ok] HTML:', htmlPath); // 2) DOCX(pandoc 自动嵌入 images/ 下的图片) const docxPath = path.join(DIST, '系统使用说明书.docx'); pandoc(['manual.md', '-f', 'gfm', '--resource-path=.', '-o', docxPath]); console.log('[ok] DOCX:', docxPath); // 3) PDF(主机缺 chromium 系统依赖,改在 playwright docker 镜像内打印) const pdfPath = path.join(DIST, '系统使用说明书.pdf'); const REPO = '/home/weichen/projects/Agent-System'; execFileSync('docker', [ 'run', '--rm', '-v', `${REPO}:${REPO}`, '-w', `${REPO}/web`, 'mcr.microsoft.com/playwright:v1.63.0-noble', 'node', path.join(MANUAL_DIR, 'scripts', 'pdf-print.mjs'), htmlPath, pdfPath, ], { stdio: 'inherit' });