在 Word 里写好模板、填上占位符,系统接收业务数据后秒级渲染, 直接输出标准化合同 PDF——免编程、API 直连、每一次调用全程留痕。
{
"供应商": "上海某某科技有限公司",
"合同编号": "HT-2026-0912",
"发票": [
{ "号": "A001", "金额": 10000 },
{ "号": "A002", "金额": 25000 }
]
}
| 发票号 | 品名 | 金额(元) |
|---|---|---|
| A001 | 设备采购 | 10,000.00 |
| A002 | 设备采购 | 25,000.00 |
| 合计 | 35,000.00 | |
合同、函件、账单附件……每次都要打开 Word 复制粘贴、改表格行数、查错别字。
每单都要人工填字段、对金额、改表格行数,一单十几分钟,还总有错漏,返工成本居高不下。
每个人手里的 Word 版本不一样,表格列宽、合并单元格、字体格式各不相同,产出质量全凭手气。
谁在什么时候用哪个模板出了哪份文档?没有记录就无法追溯,事后对账、审计全靠翻聊天记录。
不需要学代码。会做 Word 表格,就会做 xdoc 模板。
打开你的 Word 文档(或下载官方样例模板),把要替换的地方写成占位符:{{ 供应商名称 }}。
管理台「模板制作助手」提供字段字典 + 样例 + 绑定地图校验,写错一目了然。
业务系统 POST /xdoc:传模板编号 + 字段值即可。
发票、明细等多行数据以 JSON 传入,一行 {% for %} 自动展开成 N 行表格。
接口直接返回 PDF 二进制流(可配嵌二维码)。同一请求加 _dryrun=1 只做试渲染校验,
联调阶段不产生正式文档。
{
"tpl": "采购合同",
"invs": [
{ "no": "A001", "amt": 10000 },
{ "no": "A002", "amt": 25000 }
]
}
从模板制作到调用审计,全流程内置。
表格行内写一行 {% for inv in invs %},数据有几条发票就渲染几行,行号自动顺延。
相同内容自动纵向 / 横向合并(${vm} / ${hm}),跨行跨列的合同表格瞬间整齐。
旧 ${} 引擎与新 Jinja2 引擎并存,按模板语法自动识别、自动切换,老模板零改动继续用。
管理台直接打开浏览器版 Word(OnlyOffice)改模板,Ctrl+S 保存即覆盖原模板,原编号不变。
干跑(dryrun)出 PDF 绑定地图:绿=字段匹配、红=缺失、黄=数据未使用,发布前问题全暴露。
上传、版本号、预览、下载、删除一站管理;root 可代改他人模板,权限清晰可查。
每次 /xdoc 调用(无论成败)自动入库,日 / 周 / 月调用趋势、耗时、费用统计一屏看全。
SaaS 多租户:root 管理员 + 普通账户,模板归属、调用记录、统计数据严格按账户隔离。
Linux 走 OnlyOffice Document Server,Windows 走本机 Word,渲染保真、部署随环境自选。
请求带业务 ID 即可在 PDF 上自动嵌入对应二维码,对账、防伪一步完成。
| # | 模板名称 | 版本 | 引擎 | 更新时间 | 操作 |
|---|---|---|---|---|---|
| 35 | 采购合同(含发票附表) | v12 | jinja | 09-12 14:02 | 试渲染在线编辑下载 |
| 34 | 销售合同(A4) | v8 | auto | 09-11 18:40 | 试渲染在线编辑下载 |
| 33 | 对账单(多行发票) | v5 | jinja | 09-10 10:22 | 试渲染在线编辑下载 |
| 32 | 验收报告(合并单元格) | v3 | legacy | 09-08 09:15 | 试渲染在线编辑下载 |
| 时间 | 模板 | 状态 | 耗时 |
|---|---|---|---|
| 15:42:07 | 采购合同(含发票附表) | 200 | 1.2s |
| 15:41:53 | 对账单(多行发票) | 200 | 1.8s |
| 15:40:21 | 销售合同(A4) | 200 | 1.1s |
HTTP 表单直传,PDF 二进制流返回,与业务系统无感集成。
# 渲染一份合同并返回 PDF POST /xdoc _key <接口密钥> _tid 35 # 模板编号(或用 _xdoc=模板URL) 供应商名称 上海某某科技有限公司 合同编号 HT-2026-0912 invs [{"invNo":"A001","invAmount":"10000"}, {"invNo":"A002","invAmount":"25000"}] _qrcode <业务ID,可选,PDF 嵌二维码> # 试渲染(联调校验,不产生正式文档) POST /xdoc ... _dryrun=1 # → JSON: { placeholders, est_rows, engine, ... }
_tid(注册表编号)或 _xdoc(模板 URL),老系统不受影响。