document/README.md

75 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# document
极简、高效的 Go 办公文档处理桥梁,符合 `@go` 设计哲学。
## 核心设计
`document` 包将所有复杂的文档格式Excel, Word, PPT, PDF, Graph抽象为统一的 `Document` 接口。你只需要关心 **数据载体** (JSON/Markdown),而不需要关心底层实现。
- **结构化数据 (Excel)** <-> **JSON**
- **半结构化内容 (Word/PPT/PDF)** -> **结构化 Markdown** (支持标题识别)
- **关系型内容 (Graph/Mindmap)** <-> **JSON/Mermaid**
## 统一 API
```go
import "apigo.cc/go/document"
// 1. 打开文档 (自动识别类型)
doc, _ := document.Open("data.xlsx")
// 2. 转换为通用载体
jsonStr := doc.ToJSON() // 适合 Excel / Graph
mdStr := doc.ToMarkdown() // 适合 Word / PDF / Graph (Mermaid)
// 3. 修改并保存 (Excel/Graph 支持数据回写)
if xls, ok := doc.(*document.Excel); ok {
xls.SetData("Sheet1", newData, "A1", "")
}
doc.Save("updated.xlsx")
```
## 支持格式
| 格式 | 后缀 | `ToJSON` 表现 | `ToMarkdown` 表现 | `Save` 行为 |
| :--- | :--- | :--- | :--- | :--- |
| **Excel** | `.xlsx` | 返回第一个 Sheet 的对象数组 | 返回第一个 Sheet 的 MD 表格 | 保存为 Excel 文件 |
| **Word** | `.docx` | 返回 `{"metadata":..., "content":...}` | 返回**带层级标题**的 Markdown | 保存为文本 |
| **PPT** | `.pptx` | 返回 `{"metadata":..., "content":...}` | 返回提取的全文文本 | 保存为文本 |
| **PDF** | `.pdf` | 返回 `{"metadata":..., "content":...}` | 返回提取的全文文本 | 保存为文本 |
| **Graph** | `.graph` | 返回节点与关系的结构化 JSON | 返回 **Mermaid 关系图** + 节点详情 | 保存为 JSON |
## 快速示例
### AI 友好型转换 (RAG 增强)
```go
// 一行代码将 Word 转为带层级标题的 Markdown方便 AI 分片 (Chunking)
md, _ := document.Open("manual.docx").ToMarkdown()
```
### 关系型文档 (脑图/小说大纲/分镜脚本)
```go
g := document.NewGraph()
g.Title = "故事大纲"
g.AddNode(&document.Node{ID: "1", Title: "开端", Content: "主角获得系统", Type: "plot"})
g.AddNode(&document.Node{ID: "2", Title: "冲突", Content: "反派出现", Links: []string{"1"}})
mdStr := g.ToMarkdown() // 包含 Mermaid graph TD 的渲染内容
```
## API 参考
### 顶级函数
- `Open(filename string, password ...string) (Document, error)`
- `Create(ext string) (Document, error)`
### Document 接口
- `ToJSON() string`
- `ToMarkdown() string`
- `Save(filename ...string) error`
### Graph 专用 (关系型文档)
- `AddNode(n *Node)`
- `OpenGraph(filename string) (*Graph, error)`