# Webnovel Export

> 将网文正文导出为 Markdown/TXT/EPUB/HTML/DOCX/PDF 格式。立即使用此 skill 当用户说：导出、导出小说、导出章节、生成电子书、导出 TXT、导出 Markdown、导出 EPUB、导出 HTML、导出 Word、导出 PDF、下载小说、输出正文。

- Skill: `lujih/webnovel-export` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lujih/webnovel-export`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lujih/webnovel-export/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: lujih (https://skillmd.com/u/lujih)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lujih/webnovel-export

---


# 正文导出

## 目标

将网文正文导出为多种格式，便于发布或存档。导出是只读操作，不修改项目文件。

## 支持格式

| 格式 | 扩展名 | 依赖 | 说明 |
|------|--------|------|------|
| Markdown | `.md` | 无 | 原文拼接，适合存档 |
| TXT | `.txt` | 无 | 纯文本，去 Markdown 标记 |
| EPUB | `.epub` | ebooklib | 电子书，带目录 + CSS 排版 |
| HTML | `.html` | 无 | 单文件网页，内嵌 CSS + 目录 |
| DOCX | `.docx` | python-docx | Word 文档，中文排版（首行缩进） |
| PDF | `.pdf` | weasyprint（可选） | 印刷品质，自动分页 |

## 环境设置

```bash
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：列出章节

```bash
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export list
```

确认章节数量和范围。

### Step 2：导出

```bash
# Markdown
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format md

# TXT
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format txt

# EPUB（需 ebooklib）
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format epub --author "作者名"

# HTML（单文件，含目录和内嵌 CSS）
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format html

# DOCX（中文排版：首行缩进、宋体、1.8 倍行距）
python -X utf8 "${SCRIPTS_DIR}/webnovel.py" --project-root "${PROJECT_ROOT}" export export --format docx --author "作者名"

# PDF（需 weasyprint，未安装时提示安装）
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：验证

```bash
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 倍行距
- 章节标题居中
- 场景分隔符 `* * *`
- 思源宋体 / 宋体

## 充分性闸门

- [ ] 正文/ 目录存在且有章节文件
- [ ] 导出命令返回码为 0
- [ ] 导出/ 下有非空输出文件

## 常见问题

| 错误 | 原因 | 解决 |
|------|------|------|
| 未找到章节 | 正文/ 目录不存在 | 先用 /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 |

