@QingQ77: 一个 Open WebUI 工具,用 python-docx 把模型产出的 Markdown(含 YAML 头)或 JSON 规范直接生成为原生、可编辑的 Word(.docx)文档。 https://github.com/ianuste…

X AI KOLs Timeline 工具

摘要

一个 Open WebUI 工具,使用 python-docx 将模型产出的 Markdown(含 YAML 头)或 JSON 规范直接生成为原生、可编辑的 Word (.docx) 文档,支持多种模板和样式。

一个 Open WebUI 工具,用 python-docx 把模型产出的 Markdown(含 YAML 头)或 JSON 规范直接生成为原生、可编辑的 Word(.docx)文档。 https://github.com/ianustec/openwebui-generate-documents…
查看原文
查看缓存全文

缓存时间: 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-docxPillowmarkdown-it-pymdit-py-pluginsPyYAMLlxml (在 frontmatter 中声明 → Open WebUI 会自动安装)
  • 可选:httpx(用于从 URL / Unsplash 获取图片)

安装

选项 A —— 从 Open WebUI 社区

  1. 打开 Open WebUI 社区网站上的工具页面。
  2. 点击 获取 / 导入 到你的实例。

选项 B —— 手动安装

  1. 进入你的 Open WebUI 实例,打开 工作区 → 工具 → +
  2. 粘贴 generate_documents.py 的内容。
  3. 保存。声明的依赖项在首次使用时自动安装。
  4. 为需要使用此工具的模型(或对话)启用该工具。

用法

模型调用 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_templateblank当规范未指定时使用的默认模板
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_statustrue在聊天中发送状态事件

工作原理

  1. 模型生成 Markdown(或 JSON)并调用 generate_document
  2. 解析器将两种格式归一化为同一规范,与模板默认值合并,并解析强调色调色板。
  3. 每个块都被写入原生 OOXML(段落、表格、底纹、边框、域代码)。
  4. .docx 文件通过 Files API 保存(备选路径 /cache/files),链接返回至聊天。

本地开发 / 测试

需要 python-docxmarkdown-it-pymdit-py-pluginsPyYAML(以及可选的 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…

X AI KOLs Timeline

微软开源了 MarkItDown,一个轻量级 Python 工具,可将 PDF、Word、PPT、Excel、HTML 和图片等文件一键转换为干净的结构化 Markdown 文本,方便用于 AI 摘要、数据分析、知识库构建等场景。

@Jolyne_AI: 写技术文档时我们常用 Markdown,但一遇到复杂排版就力不从心。 我在 GitHub 上偶然发现一个开源工具:Quarkdown。你可以把它理解成“更强的 Markdown”——语法依旧轻量,却把排版、生成和自动化直接拉满。 GitH…

X AI KOLs Timeline

Quarkdown 是一个基于 Markdown 的增强版排版系统,支持变量和函数、多格式输出、实时预览等强大功能,适用于书籍、论文、演示文稿等场景,安装需 Java 17+。