企业文档转换服务,14 种格式转 Markdown,面向 RAG 文档摄取管道
57
企业内网文档转换微服务,将 Word / Excel / PowerPoint / PDF / ODF / RTF / EPUB / CSV 共14种格式统一转换为 GitHub Flavored Markdown,面向Java RAG文档摄取管道设计。底层基于 Rust anydoc 引擎,转换速度快,镜像轻量,提供同步/异步API、PDF页面渲染、缓存、限流、优雅停机等生产级能力。
Java配套SDK:anydoc‑sdk 2.8.0,类型安全Java客户端
/healthz /readyz存活就绪探针、Prometheus metrics、结构化JSON日志、X‑Request‑ID全链路透传docker pull jubb/anydoc-service:latest
docker run --rm -p 8080:8080 \
-e ANYDOC_SERVICE_TOKEN="your-strong-secret-token" \
jubb/anydoc-service:latest
健康检查
curl http://localhost:8080/healthz
curl -H "Authorization: Bearer your-strong-secret-token" \
-F "[email protected]" \
"http://localhost:8080/v1/convert?include_assets=true"
# 提交任务,返回 job‑id
curl -H "Authorization: Bearer your-strong-secret-token" \
-F "[email protected]" \
"http://localhost:8080/v1/jobs?include_assets=true&timeout=900"
# 轮询任务状态
curl -H "Authorization: Bearer your-strong-secret-token" http://localhost:8080/v1/jobs/{job_id}
curl -H "Authorization: Bearer your-strong-secret-token" \
-F "[email protected]" \
"http://localhost:8080/v1/pdf/render?pages=0,2&scale=1.5&format=png"
| Env | 默认 | 说明 |
|---|---|---|
ANYDOC_SERVICE_TOKEN | dev‑token | Bearer鉴权Token,生产务必替换强随机值 |
ANYDOC_MAX_BYTES | 52428800(50MB) | 上传文档大小上限 |
ANYDOC_MAX_CONCURRENCY | 8 | 同步转换并发上限 |
ANYDOC_CONVERT_TIMEOUT_SECONDS | 30 | 同步默认超时 |
ANYDOC_CACHE_ENABLED | true | 开启转换结果LRU缓存 |
ANYDOC_ASYNC_WORKERS | 2 | 异步任务工作线程 |
ANYDOC_ASYNC_JOB_TIMEOUT_SECONDS | 600 | 异步任务默认超时 |
ANYDOC_JOB_RETENTION_SECONDS | 3600 | 完成任务保留轮询时长 |
ANYDOC_DRAIN_TIMEOUT_SECONDS | 20 | 优雅停机等待窗口 |
完整配置参考项目README,支持格式白名单、图片归属修复开关、渲染参数、限流RPM等。
| Method | Path | Description |
|---|---|---|
| GET | /healthz | 存活探针 |
| GET | /readyz | 就绪探针(停机drain返回503) |
| GET | /metrics | Prometheus指标 |
| POST | /v1/convert | 同步文档转换 multipart/form‑data |
| POST | /v1/jobs | 提交异步转换任务 |
| GET | /v1/jobs/{job_id} | 查询异步任务状态 |
| POST | /v1/pdf/render | PDF页面位图渲染 |
配套Java客户端,JDK17+,Maven坐标:
<dependency>
<groupId>io.github.zll‑g</groupId>
<artifactId>anydoc‑sdk</artifactId>
<version>2.8.0</version>
</dependency>
Retry‑After、熔断器、single‑flight在途合并AnydocClient Bean,内置Actuator健康指示器X‑Request‑ID透传,对接服务端日志可观测java.net.http.HttpClientAnydocClient anydoc = AnydocClient.builder()
.baseUrl("http://localhost:8080")
.token("your-strong-secret-token")
.build();
ConversionResult result = anydoc.convert(Files.readAllBytes(Path.of("report.docx")), "report.docx");
String markdown = result.markdown();
415 unsupported,需要对接外部OCR服务预处理assets数组,包含图片base64与placements章节归属信息;docx浮动图片会标记floating:truetimeout、use_cache、pages、max_pages参数dev‑token,会输出告警日志Content type
Image
Digest
sha256:efc8b1af7…
Size
77.2 MB
Last updated
2 months ago
docker pull jubb/anydoc-service:2.8.0