scripts/generate-book-pdf.ts
基本信息
- 类型: CLI 脚本 / PDF 生成器
- 路径:
./scripts/generate-book-pdf.ts
功能描述
将交互式 Prompt 书籍(Interactive Book of Prompting)从 MDX 格式转换为静态 HTML/PDF 的生成脚本。支持多语言和印刷就绪模式,将 React 交互组件转换为静态可打印内容。
导出内容
- 无(CLI 脚本,直接执行)
依赖导入
fs- 文件系统操作path- 路径处理@/lib/book/chapters- 书籍章节数据@/components/book/elements/locales- 本地化数据
使用方法
# 生成英文版本(默认)
npx tsx scripts/generate-book-pdf.ts
# 生成指定语言版本
npx tsx scripts/generate-book-pdf.ts tr
# 生成所有语言版本
npx tsx scripts/generate-book-pdf.ts --all
# 印刷就绪模式(带出血边距、CMYK 颜色)
npx tsx scripts/generate-book-pdf.ts --print
# 所有语言,印刷模式
npx tsx scripts/generate-book-pdf.ts --all --print
核心配置
目录结构
| 变量 | 路径 | 说明 |
|---|---|---|
| BOOK_DIR | src/content/book | MDX 源文件 |
| MESSAGES_DIR | messages | i18n 翻译文件 |
| OUTPUT_DIR | public/book-pdf | 输出目录 |
印刷尺寸
| 参数 | 屏幕版 | 印刷版 |
|---|---|---|
| 宽度 | 6in | 6.25in (+出血) |
| 高度 | 9in | 9.25in (+出血) |
| 出血边距 | - | 0.125in |
主要功能
MDX 组件转换
将交互式组件转换为静态 HTML:
| 组件 | 转换方式 |
|---|---|
| TryIt | 带样式的代码块展示 |
| Quiz | 问题 + 选项 + 正确答案标注 |
| Callout | 静态信息框 |
| Compare | 前后对比布局 |
| TokenizerDemo | 彩色分词展示 |
| TemperatureDemo | 温度参数对比表 |
| Framework Demos | 框架步骤展示 |
本地化支持
- 支持 17 种语言
- 从
messages/*.json加载翻译 - 交互提示语自动翻译
印刷优化
- SVG 图标替代 Emoji(CMYK 安全)
- 出血边距计算
- 移除导航组件
- 静态渲染所有交互元素
核心函数
transformMdxForPdf()
MDX 内容转换主函数,处理所有组件标签的正则替换。
extractProps() / extractArrayProp()
从 JSX 属性字符串中提取参数值。
protectCodeBlock()
保护代码块中的特殊字符,防止 HTML 转义问题。
输出文件
book-{locale}.html- 屏幕阅读版本book-{locale}-print.html- 印刷版本book-{locale}.pdf- PDF 文件(需配合 html-to-pdf.ts)