READMESource: main@74e2474a
dsh-doc-merge · 文档合并
多份 Word / Markdown / 文本 → 一份带目录的 .docx。本机完成,不联网。
不装会怎样
十几份合同、附件、周报要交出去,只能一份份打开、复制、粘贴、手动加标题、手动敲目录; 粘完格式乱、标题层级乱、漏了一份还得从头数。用在线合并工具,又得把合同先上传。
它做什么
- 多份合一:
.docx/.md/.txt,给目录就按名字排序(数字自然序:2 在 10 前),也可显式指定顺序。 - 每份前插一级标题:默认用文件名;
--title-from first-line取首行、--title-from front-matter取 md 的title:。 - 自动目录页:
第 1 章 文件名……静态清单,Word 打开就能看到,不依赖更新域。 - 可选排版:
--page-break每份另起一页,--strip-title去掉原文档开头的一级标题避免重复;页脚自动页码。 - 坏一份不拖垮全部:报「第 N 份解析失败(原因),已跳过」,其余照合,结尾汇总。
- 可预览:
--dry-run只算不写;--json出机器可读统计(份数 / 段落数 / 目录条数 / 预估页数 / 跳过项)。
安装
dsh plugin --profile web add @deepwhale-cn/dsh-doc-merge
用法
# 三份按给定顺序合并
dsh-doc-merge 01-合同.docx 02-技术方案.md 03-说明.txt -o 投标文件.docx
# 整个目录按名字排序,每份另起一页,去掉原文重复标题
dsh-doc-merge ./章节 -o 合集.docx --page-break --strip-title
# 只预览,不写文件
dsh-doc-merge ./章节 -o 合集.docx --dry-run
| 选项 | 作用 |
|---|---|
-o, --out <路径> |
输出 docx(默认 merged-时间.docx) |
--title-from <来源> |
filename(默认)/ first-line / front-matter |
--sort <name|mtime> |
目录内排序(默认 name) |
--page-break |
每份另起一页 |
--strip-title |
去掉原文档开头的一级标题 |
--dry-run |
只预览,不写文件 |
--json |
机器可读 JSON |
退出码:0 全部成功 / 1 有文件被跳过 / 2 全部失败或参数错误。
输出长什么样
- 目录页:「目录」+
第 1 章 文件名(条目数 = 成功合并的份数); - 每份:一级标题 + 正文;原文档标题整体降一级(H1→H2…),不会出现两个同级 H1;
- 表格保留为真正的 Word 表格;页脚居中显示页码。
docx 方案(为什么可靠)
写:零依赖。docx 就是 zip + 几份 XML;本插件用 Node 内置 zlib 手写 zip 与 WordprocessingML
(标题/段落/表格/分页/目录清单/页脚 PAGE 域),不引 docx、不引任何模板引擎。
读:mammoth ^1.13.0(纯 JS、离线、约 1.9MB,只用来解析输入的 .docx)。
产物在测试里用 mammoth 独立回读 + 自写 zip 检查器逐项验证结构,Word / WPS / LibreOffice 均可打开。
边界
- 只读输入;只写
--out指定的那一个文件,不覆盖输入。 - 合并是内容级:保留标题层级、段落、表格,不保留原文档的字体、颜色、页眉页脚、批注、修订痕迹。
- 不做 PDF / 图片;单文件上限 40MB。
powered by dwh · deepwhale.org.cn
No comments yet. Be the first to write one.