Files
FunMD_Convert/docling/README.zh-CN.md

155 lines
5.6 KiB
Markdown
Raw Normal View History

2026-01-07 17:18:26 +08:00
# 本地安装与启动指南Docling + FastAPI 服务)
本文档介绍如何在本机安装与启动本仓库的转换服务,以供前端调用生成并下载 PDF。
## 环境要求
- 操作系统macOS已验证Linux/Windows 亦可
- Python3.93.13
- 建议安装工具:`python -m venv` 或 [uv](https://docs.astral.sh/uv/)
## 创建虚拟环境
- 使用 venv
```bash
cd /Users/fanyang/Desktop/docling
python -m venv .venv
source .venv/bin/activate
python -m pip install -U pip
```
- 或使用 uv
```bash
cd /Users/fanyang/Desktop/docling
uv venv
source .venv/bin/activate
```
## 安装依赖
- 安装本地 Docling 库(可编辑模式):
```bash
python -m pip install -e ./docling
```
- 安装后端服务依赖:
```bash
python -m pip install fastapi uvicorn minio weasyprint pytest
```
- 若 WeasyPrint 在 macOS 上提示缺少系统库,可使用 Homebrew 安装:
```bash
brew install cairo pango gdk-pixbuf libffi
```
## 启动服务
- 在项目根目录执行:
```bash
PYTHONPATH=. python -m uvicorn app.server:app --host 127.0.0.1 --port 8000
```
- 访问:
- 首页 UI`http://127.0.0.1:8000/`
- 健康检查:`http://127.0.0.1:8000/health`(返回 `{"status":"ok"}`
### 接口总览
- `GET /` 本地 UI静态文件
- `GET /health` 服务健康检查
- `POST /md/convert` Markdown/HTML → `docx|pdf`(核心接口,返回 MinIO 下载链接)
- `POST /md/convert-folder` 批量转换本地文件夹内的 `.md` 文件并上传结果到 MinIO
- `POST /md/upload-folder` 批量上传前端打包的文件夹内容并转换其中 `.md` 文件
- MinIO 配置相关:
- `POST /config/minio` 设置连接信息与前缀
- `POST /config/minio/test` 验证连接
- `GET /config/minio/buckets` 列出桶
- `POST /config/minio/create-bucket` 创建桶
## MinIO 配置
- 环境变量方式(推荐):
```bash
export MINIO_ENDPOINT=127.0.0.1:9000
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
export MINIO_BUCKET=docling-target
export MINIO_SECURE=false
export MINIO_PUBLIC_ENDPOINT=http://127.0.0.1:9000
export MINIO_PREFIX=cms-files
```
- 运行时接口方式:
- `POST /config/minio` 设置连接信息与前缀
- `POST /config/minio/test` 测试连通性
- `GET /config/minio/buckets` 列出桶
- `POST /config/minio/create-bucket` 创建桶
## 前端下载 PDF接口说明
- 核心接口:`POST /md/convert`
- 作用:将 Markdown/HTML 转换为 PDF 并上传至 MinIO返回可下载链接
- 参数FormData以下三选一提供文档来源
- `md_file`:上传 Markdown 文件
- `markdown_text`:直接传入 Markdown 文本
- `markdown_url`:文档 URL推荐
- 目标格式:`target=pdf`
- 可选参数:`toc``header_text``footer_text``logo_url|logo_file``cover_url|cover_file``product_name``document_name``product_version``document_version``css_name|css_text`
- 返回 JSON 字段:`minio_presigned_url`(时效下载链接)或 `minio_url`(公开链接)、`name``media_type`
### 前端调用示例TypeScript
```ts
async function downloadPdf(markdownUrl: string) {
const fd = new FormData();
fd.append('markdown_url', markdownUrl);
fd.append('target', 'pdf');
fd.append('toc', 'true');
// 可选品牌参数:
// fd.append('header_text', '产品名|文档标题');
// fd.append('footer_text', '© 公司');
const resp = await fetch('http://127.0.0.1:8000/md/convert', { method: 'POST', body: fd });
if (!resp.ok) throw new Error('转换失败');
const data = await resp.json();
const url = data.minio_presigned_url || data.minio_url;
if (!url) throw new Error('未返回可下载链接,请检查 MinIO 配置');
window.location.href = url; // 触发下载
}
```
### cURL 示例URL → PDF
```bash
curl -s -X POST \
-F 'markdown_url=http://127.0.0.1:9000/docs/assets/rewritten/DMDRS_Build_Manual_Oracle/DMDRS搭建手册-Oracle.md' \
-F 'target=pdf' \
-F 'toc=true' \
-F 'header_text=产品名|文档标题' \
-F 'footer_text=© 2025 公司' \
http://127.0.0.1:8000/md/convert
```
返回示例:
```json
{
"minio_url": "http://127.0.0.1:9000/docling-target/cms-files/converted/DMDRS搭建手册-Oracle.pdf",
"minio_presigned_url": "http://127.0.0.1:9000/...presigned...",
"name": "DMDRS搭建手册-Oracle.pdf",
"media_type": "application/pdf"
}
```
### 批量转换(文件夹)
- 将本地文件夹内的 `.md` 全量转换并上传结果:
```bash
curl -s -X POST -F 'folder_path=/Users/you/docs' http://127.0.0.1:8000/md/convert-folder
```
### 直接转 DOCX按需
```bash
curl -s -X POST \
-F 'markdown_url=http://127.0.0.1:9000/docs/assets/rewritten/DMDRS_Build_Manual_Oracle/DMDRS搭建手册-Oracle.md' \
-F 'target=docx' \
http://127.0.0.1:8000/md/convert
```
## 常见问题
- `ModuleNotFoundError: No module named 'app' / 'docling'`
- 请在启动命令前设置 `PYTHONPATH=.` 或在当前 shell 直接以 `PYTHONPATH=. python -m uvicorn ...` 方式启动。
- 未返回下载 URL
- 请检查 MinIO 环境变量或使用 `/config/minio` 进行配置;确保桶存在且服务端启用了 `store_final=true`
- 图片或样式异常
- 确认资源已被重写为公共 URL服务会自动上传并改写并检查 `css_name`/`css_text`PDF 默认样式为 `default`,位于 `app/configs/styles/default.css`)。
- WeasyPrint 依赖缺失macOS
- 执行 `brew install cairo pango gdk-pixbuf libffi` 后重试;如仍失败,请检查 `PATH`/`DYLD_LIBRARY_PATH`
## 相关文档
- 服务端接口中文说明:`docling/README.zh-CN.md`