这篇内容是什么
下面给你一条可直接复制到 AI 的“在线工具生成型”提示词(Prompts)。目标是让 AI 一次性产出一个可运行、可构建、可部署的在线工具:上传 DOCX/PPTX 后进行在线预览,并生成“版式差异对比 + 字体替换建议”的自检报告,适合在跨系统/跨字体环境下做排版回流风险排查。
覆盖场景
适用于:Windows/Mac/Linux 之间协作;客户机缺字导致排版变化;导出 PDF 前需要快速对比;同一份文件在不同字体映射/不同渲染引擎下的差异定位;需要把差异点(页/幻灯片/坐标)标出来方便返工。
交付物要求(必须输出)
AI 需要输出:完整项目源码(前端+后端)、清晰的文件树、可复现的运行命令、Docker 部署方案、以及测试用例或 QA checklist。工具必须提供 Web UI,可在浏览器中完成上传、预览、对比与报告下载。
Prompt(复制到 AI)
你是一名资深全栈工程师 + 文档渲染专家。请从零生成一个“在线预览 DOCX/PPTX 版式差异对比与字体替换建议”工具的完整可运行项目。
【产品目标】
- 用户上传 DOCX 或 PPTX(单个文件)。
- 系统在服务器端用两套“渲染配置”生成预览:
A 配置:默认字体映射(如 Noto/Source 系列),缺失字体使用可配置的 fallback。
B 配置:另一套字体映射(模拟目标环境),并允许用户在 UI 中指定“替代字体映射表”。
- 把 A/B 生成的每页(DOCX->PDF->PNG)或每张幻灯片(PPTX->PDF->PNG)做像素级 diff,输出:
- 差异热力图/标注图(只针对差异区域,不是生成新图片内容,而是对比产生的标注结果)
- 差异面积占比、差异块数量
- 对应页码/幻灯片编号
- 可能原因:字体缺失、行距变化、字形宽度差异、换行点变化
- 输出“字体诊断报告”:
- 解析文档中引用的字体列表(含字体名称、是否嵌入、是否可用)
- 给出替代字体建议(基于字形家族、衬线/无衬线、等宽、CJK 覆盖)
- 生成一份可下载的 JSON 映射模板(originalFont -> replacementFont)
【技术约束】
- 必须提供一键运行:本地运行 + Docker 运行两套方式。
- 不得依赖任何需要手动安装的商业软件。
- DOCX/PPTX 转换建议使用 LibreOffice headless(容器中安装),将其转换为 PDF。
- PDF 转 PNG 可用 poppler(pdftoppm)或其他开源方案。
- 图片 diff 可用 pixelmatch 或 OpenCV。
- 前端使用 React + Vite(或纯 HTML/JS 也可,但需美观可用)。
- 后端使用 Node.js (Express/Fastify) 或 Python (FastAPI)。
- 文件处理必须有:大小限制、类型校验、临时目录清理、超时控制。
【功能清单】
1) 上传页:拖拽上传、显示文件信息。
2) 预览页:分页/逐张预览 A 与 B,并可切换“对比模式”(左右/叠加/差异图)。
3) 字体页:列出检测到的字体,标记缺失/替代情况;允许编辑映射表并重新生成 B 版本。
4) 报告导出:一键导出 ZIP:
- diff 标注图
- summary.json(统计与结论)
- fonts.json(字体诊断)
- mapping-template.json(可编辑模板)
5) API:
- POST /api/jobs 创建任务
- GET /api/jobs/:id 查询进度
- GET /api/jobs/:id/result 下载结果
【必须输出的交付物】
A. 完整文件树(逐层列出)。
B. 全部关键源码(前端、后端、转换与 diff 逻辑、字体解析逻辑、任务队列/进度)。
C. 运行命令:开发模式、生产构建、Docker build/run。
D. 部署说明:端口、环境变量、存储目录、并发与超时设置。
E. 测试与 QA:
- 至少 5 条自动化测试(或可运行的脚本测试),覆盖:上传校验、任务生成、超时、结果结构、清理逻辑。
- 一份 QA checklist(包含不同字体缺失、不同页数、异常文件、并发)。
【实现细节要求】
- 转换与 diff 建议采用“任务制”避免阻塞:每个 job 在独立工作目录,完毕后生成 result.zip。
- 差异检测:对每页生成 diff.png 与 diff.json(记录差异块 bounding boxes)。
- 字体解析:
- DOCX:解析 word/fontTable. 与 styles. ;
- PPTX:解析 ppt/theme/theme1. 与 slideMaster/slideLayout 中的字体引用;
- 同时输出实际渲染端可用字体列表(从系统字体目录扫描,或容器内预置)。
- UI 必须显示“差异强度阈值”与“忽略微小差异”的参数,并能触发重新 diff。
请直接开始输出项目,不要写空泛方案,不要只给伪代码。所有内容都用中文注释/说明,代码本身保持常规英文命名。
使用建议
如果你的目标环境字体较特殊,先在“字体页”把映射表补齐,再跑一次 B 版本生成 diff;对比结果中差异区域密集的页/幻灯片优先返工检查。报告里的 mapping-template.json 可以作为团队共享的字体替换基线。