| name | webnovel-export |
| description | 将网文正文导出为 Markdown/TXT/EPUB/HTML/DOCX/PDF 格式。立即使用此 skill 当用户说:导出、导出小说、导出章节、生成电子书、导出 TXT、导出 Markdown、导出 EPUB、导出 HTML、导出 Word、导出 PDF、下载小说、输出正文。 |
| compatibility | opencode |
正文导出
目标
将网文正文导出为多种格式,便于发布或存档。导出是只读操作,不修改项目文件。
支持格式
| 格式 | 扩展名 | 依赖 | 说明 |
|---|
| Markdown | .md | 无 | 原文拼接,适合存档 |
| TXT | .txt | 无 | 纯文本,去 Markdown 标记 |
| EPUB | .epub | ebooklib | 电子书,带目录 + CSS 排版 |
| HTML | .html | 无 | 单文件网页,内嵌 CSS + 目录 |
| DOCX | .docx | python-docx | Word 文档,中文排版(首行缩进) |
| PDF | .pdf | weasyprint(可选) | 印刷品质,自动分页 |
环境设置
export SCRIPTS_DIR="${PWD}/.opencode/scripts"
test -d "${SCRIPTS_DIR}" || { echo "错误: 未找到 ${SCRIPTS_DIR},请确保当前目录是 webnovel-writer 仓库根目录"; exit 1; }
export PROJECT_ROOT="$(python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PWD}" where)"
test -n "$PROJECT_ROOT" && test -f "${PROJECT_ROOT}/.webnovel/state.json" || { echo "错误: PROJECT_ROOT 解析失败,请用 --project-root 显式指定"; exit 1; }
echo "项目路径: ${PROJECT_ROOT}"
test -d "${PROJECT_ROOT}/正文" || { echo "错误: ${PROJECT_ROOT}/正文/ 不存在,无章节可导出"; exit 1; }
执行流程
Step 0:确认参数
若用户指令未明确包含以下参数,必须先询问用户:
| 参数 | 何时询问 | 选项 |
|---|
| 格式 | 用户未指定导出格式 | Markdown / TXT / EPUB / HTML / DOCX / PDF |
| 范围 | 用户未指定章节范围 | 全部 / 指定范围(1-50)/ 指定卷 |
| 书名 | 未指定且需元数据(EPUB/PDF/HTML) | 默认项目目录名 |
| 作者 | EPUB/DOCX/PDF 未指定 | — |
| CSS | 用户提到"排版""样式" | 默认内置中文排版 CSS |
明确指令示例(直接执行):
- "导出为 EPUB" → 格式明确
- "导出第 1-50 章为 DOCX" → 格式和范围明确
- "导出全部为 PDF" → 格式和范围明确
模糊指令示例(必须询问):
- "导出小说" → 格式不明
- "导出" → 所有参数不明
- "下载小说" → 同上
推荐一次性告知所有格式让用户选择,减少来回。
Step 1:列出章节
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export list
确认章节数量和范围。
Step 2:导出
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format md
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format txt
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format epub --author "作者名"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format html
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format docx --author "作者名"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format pdf
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format docx --range 1-50
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format epub --volume 1
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format html --style "${PROJECT_ROOT}/export-style.css"
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format txt --output "${PROJECT_ROOT}/导出/第一卷.txt"
Step 3:验证
ls -la "${PROJECT_ROOT}/导出/" && echo "导出完成"
参数说明
| 参数 | 说明 | 适用格式 | 默认值 |
|---|
--format | md / txt / epub / html / docx / pdf | 全部 | md |
--range | 1-50 / 1,3,5 / all | 全部 | all |
--volume | 按卷导出(覆盖 --range) | 全部 | — |
--output | 输出文件路径 | 全部 | 导出/{书名}.{ext} |
--title | 书名(元数据) | 全部 | 项目目录名 |
--author | 作者名 | EPUB/DOCX/PDF | — |
--cover | 封面图路径 | EPUB | 图片/封面/ 下最新 |
--cover-size | 封面裁剪尺寸 | EPUB | 1200x1600 |
--style | 自定义 CSS 路径 | EPUB/HTML/PDF | 内置中文排版 CSS |
CSS 自定义
项目根目录放置 export-style.css 自动生效。默认排版:
- 首行缩进 2em
- 1.8 倍行距
- 章节标题居中
- 场景分隔符
* * *
- 思源宋体 / 宋体
充分性闸门
常见问题
| 错误 | 原因 | 解决 |
|---|
| 未找到章节 | 正文/ 目录不存在 | 先用 /webnovel-write 写章节 |
| EPUB 导出失败 | ebooklib 未安装 | pip install ebooklib |
| DOCX 导出失败 | python-docx 未安装 | pip install python-docx |
| PDF 导出失败 | weasyprint 未安装 | pip install weasyprint |
| 封面未裁剪 | Pillow 未安装 | pip install Pillow,不影响导出 |
| HTML 排版异常 | CSS 编码问题 | 确保 export-style.css 为 UTF-8 |