@QingQ77: 一个 Open WebUI 工具,用 python-docx 把模型产出的 Markdown(含 YAML 头)或 JSON 规范直接生成为原生、可编辑的 Word(.docx)文档。 https://github.com/ianuste…
摘要
一个 Open WebUI 工具,使用 python-docx 将模型产出的 Markdown(含 YAML 头)或 JSON 规范直接生成为原生、可编辑的 Word (.docx) 文档,支持多种模板和样式。
查看缓存全文
缓存时间: 2026/07/11 17:28
ianustec/openwebui-generate-documents
来源:https://github.com/ianustec/openwebui-generate-documents
生成文档 —— Open WebUI 的原生 DOCX 引擎
这是一个 Open WebUI (https://github.com/open-webui/open-webui) 的工具,用于从 Markdown(含 YAML 头信息)或模型产出的 JSON 规范直接生成 原生 Word (.docx) 文档。它不导出 HTML 或 PDF:而是直接使用 python-docx 构建文档,具备一致的设计系统——封面页、带分割线的编号标题、样式化表格、标注、代码块、签名、目录以及页眉/页脚。
生成的文件通过 Open WebUI 的 Files API 保存(备选路径为 /cache/files),聊天中会显示可点击的下载链接。
许可协议:MIT · 作者:IANUSTEC (https://ianustec.com)
预览
由示例 examples/report.md 生成的文档 → examples/demo_report.docx。
功能特性
- 原生、可编辑的 .docx(文本、表格和样式在 Word / Pages / LibreOffice 中均可编辑)。
- 双输入,自动识别:Markdown 带 YAML 头(推荐)或 JSON —— 输出效果相同。
- 7 套模板,基于单一
accent颜色衍生出协调的调色板:report(报告)、whitepaper(白皮书)、proposal(提案)、letter(信函)、memo(备忘录)、minutes(会议纪要)、blank(空白)。 - 封面页:
band(色带面板)、rule(编辑风格)或plain(简约)。 - 编号标题(1,1.1,1.1.1),H1/H2 带强调色分隔线——自动移除手动编号。
- 丰富的表格:填充强调色的表头,斑马纹行,数值/货币列自动右对齐。
- 标注:
info(信息)、success(成功)、warning(警告)、danger(危险)(彩色侧边栏 + 背景色)。 - 列表(无序、有序、勾选清单)、引用块、代码块、签名、目录、分页符。
==highlight==映射为强调色强调;智能引号;排版间距。- 页眉/页脚:支持 3 个区域(
left/center/right)和动态页码({{page}}/{{pages}})。 - 可读文件名:从标题派生(例如
Q3 Board Report.docx)。 - 可选图片:来自 Unsplash(需密钥)或通过 Open WebUI 生成。
- 单文件:一个独立的
.py文件,可直接粘贴至工具注册表。
系统要求
- Open WebUI
>= 0.4.0 - Python:
python-docx、Pillow、markdown-it-py、mdit-py-plugins、PyYAML、lxml(在 frontmatter 中声明 → Open WebUI 会自动安装) - 可选:
httpx(用于从 URL / Unsplash 获取图片)
安装
选项 A —— 从 Open WebUI 社区
- 打开 Open WebUI 社区网站上的工具页面。
- 点击 获取 / 导入 到你的实例。
选项 B —— 手动安装
- 进入你的 Open WebUI 实例,打开 工作区 → 工具 → +。
- 粘贴
generate_documents.py的内容。 - 保存。声明的依赖项在首次使用时自动安装。
- 为需要使用此工具的模型(或对话)启用该工具。
用法
模型调用 generate_document(content),其中 content 可以是 Markdown 带 YAML 头(推荐)或 JSON 字符串。
Markdown(推荐)
---
template: report
title: "数字化转型计划 —— FY 2026"
subtitle: "战略、路线图与预算"
author: "Northwind Analytics"
cover: auto
header:
left: "Northwind Analytics — 机密"
right: "修订版 1.0"
footer:
center: "第 {{page}} 页,共 {{pages}} 页"
styles:
accent: "#1B6B93"
---
# 执行摘要
营收同比增长 **24%**。
::: callout type="success" title="亮点"
营业利润率扩大 ==6 个百分点==。
:::
| 目标 | KPI 目标 | 优先级 |
|------|----------|--------|
| 流程自动化 | 80% 的流程 | ==高== |
完整示例见 examples/report.md。
JSON(遗留支持,仍可工作)
{
"template": "report",
"title": "FY 2026 报告",
"cover": "auto",
"styles": { "accent": "#1B6B93" },
"blocks": [
{ "type": "heading", "level": 1, "text": "执行摘要" },
{ "type": "paragraph", "text": "营收同比增长 24%。" },
{ "type": "callout", "kind": "success", "title": "亮点", "text": "利润率 +6pp。" }
]
}
模板
report · whitepaper · proposal · letter · memo · minutes · blank。
每个模板都从单一的 accent 颜色派生完整的调色板,因此 styles: { accent: "#C0392B" } 即可重新主题整个文档。
内容块(Markdown 语法)
| 块类型 | 语法 |
|---|---|
| 标题 | # H1 … #### H4(在 report/whitepaper 中自动编号) |
| 强调 | **粗体**、*斜体*、`代码`、==高亮== |
| 列表 | - 无序、1. 有序、- [ ] 勾选清单 |
| 表格 | 标准 Markdown 管道表格(数值列自动右对齐) |
| 标注 | ::: callout type="info|success|warning|danger" title="..." … ::: |
| 引用 | > 引用文本 |
| 代码 | 围栏代码块 ``` |
| 签名 | ::: signature name="..." role="..." date="..." … ::: |
| 目录 | [[toc]] |
| 分页符 | \newpage |
截图
| 封面 | 内容 |
|---|---|
| 封面 | 内容 |
| 标注与表格 | 风险矩阵与签名 |
| 标注 | 表格 |
阀门(配置项)
| 阀门 | 默认值 | 描述 |
|---|---|---|
default_template | blank | 当规范未指定时使用的默认模板 |
unsplash_access_key | "" | Unsplash 密钥(可选),用于获取库存图片 |
image_generation_url | "" | 兼容 OpenAI 的图片生成端点(可选) |
image_generation_api_key | "" | image_generation_url 的 Bearer 令牌 |
docx_export_dir | /app/backend/data/cache/files | 保存文件的备选目录 |
emit_status | true | 在聊天中发送状态事件 |
工作原理
- 模型生成 Markdown(或 JSON)并调用
generate_document。 - 解析器将两种格式归一化为同一规范,与模板默认值合并,并解析强调色调色板。
- 每个块都被写入原生 OOXML(段落、表格、底纹、边框、域代码)。
.docx文件通过 Files API 保存(备选路径/cache/files),链接返回至聊天。
本地开发 / 测试
需要 python-docx、markdown-it-py、mdit-py-plugins、PyYAML(以及可选的 pillow/httpx):
pip install python-docx pillow httpx markdown-it-py mdit-py-plugins PyYAML
python examples/build.py # → examples/demo_report.docx
该文件设计在 Open WebUI 内部运行:open_webui.* 的导入是可选的,当缺失时工具会优雅降级(便于独立的渲染测试)。
贡献
欢迎提交 Issue 和 PR。请保持文件单文件,核心功能不依赖网络库。
许可协议
MIT © IANUSTEC
相似文章
@Chenzeze777: 微软开源了一个 14 万星的文档神器,我整理了它最实用的 5 个场景。 MarkItDown,Python 工具,把 PDF/Word/PPT/Excel/HTML/图片,一键转成干净的 Markdown 文本。 你能用它做什么: · P…
微软开源了 MarkItDown,一个轻量级 Python 工具,可将 PDF、Word、PPT、Excel、HTML 和图片等文件一键转换为干净的结构化 Markdown 文本,方便用于 AI 摘要、数据分析、知识库构建等场景。
@MindfulReturn: 我决定,以后的产物,不是docx, PPT, 不是pdf, md, 而是HTML。 有了这个html-anything,可以把以上产物都做成html了。 分享出去才几百K,以前分享同样内容的docx,至少2m。
该工具允许用户将文档(docx、PPT、pdf、md)转换为HTML格式,并利用AI agent CLI进行编辑,支持多种输出格式,本地优先,开源。
@kiwiflysky: 强烈推荐 @xicilion 大佬的 Markdwon 插件 (https://docu.md) , 终于找到一个能让 plantuml 渲染的线条不打架人类可读的了。图一是插件渲染后的,图二是原版
推荐一款Markdown插件docu.md,能完美渲染PlantUML等图表,并支持导出为DOCX、PDF、HTML等格式,适合AI生成的Markdown文档美化与发布。
@Jolyne_AI: 写技术文档时我们常用 Markdown,但一遇到复杂排版就力不从心。 我在 GitHub 上偶然发现一个开源工具:Quarkdown。你可以把它理解成“更强的 Markdown”——语法依旧轻量,却把排版、生成和自动化直接拉满。 GitH…
Quarkdown 是一个基于 Markdown 的增强版排版系统,支持变量和函数、多格式输出、实时预览等强大功能,适用于书籍、论文、演示文稿等场景,安装需 Java 17+。
@nini_incrypto_: 一个被严重低估的副业:帮人把文件转Markdown。 GitHub上有个工具叫markitdown,微软出的。 它能把Word / Excel / PDF / PPT全部转成Markdown。
介绍微软开源的markitdown工具,可将Word、Excel、PDF、PPT等文件转换为Markdown格式,适合作为副业。