--- name: e-signature-zh description: 在 Word 文档(.doc/.docx)中插入手写电子签名。提供画布签名板供用户手写签名,解析文档定位签字栏,插入签名图片,填写日期和姓名。当用户提到电子签名、手写签名、签字、签署文件、在Word中签名时触发此技能。 --- # Word 文档电子签名 ## 触发场景 当用户需要: - 在 Word 文档中添加手写电子签名 - 签署 .doc 或 .docx 文件 - 填写文档中的签字栏、日期、姓名等字段 ## 工作流程 ### 第一步:解析文档 **对于 .doc 文件** — 使用 `word-extractor`(Node.js): ```bash npm install word-extractor # 如未安装 ``` ```javascript const WordExtractor = require('word-extractor'); const extractor = new WordExtractor(); const doc = await extractor.extract('file.doc'); console.log(doc.getBody()); ``` **对于 .docx 文件** — 使用 docx skill 的提取工具,或直接解压读取 XML。 识别关键位置:签名栏(关键词:"签字"、"签名"、"signature"、"sign here")、日期栏、姓名栏。 ### 第二步:采集手写签名 向用户提供签名板: ``` 打开签名板 HTML 文件:assets/signature_pad.html ``` 签名板支持鼠标/触屏手写,导出裁剪后的透明背景 PNG。用户保存后会提供 PNG 文件路径。 如果用户已有签名图片,跳过此步。 ### 第三步:生成签名文档 使用 `docx`(Node.js)创建最终文档: ```bash npm install docx # 如未安装 ``` 插入签名图片的核心代码: ```javascript const { Document, Packer, Paragraph, TextRun, ImageRun, AlignmentType } = require('docx'); const fs = require('fs'); const signatureImg = fs.readFileSync('签名图片路径.png'); // 在签名位置的 children 数组中: new Paragraph({ children: [ new TextRun("签字:"), new ImageRun({ type: "png", data: signatureImg, transformation: { width: 150, height: 70 }, altText: { title: "签名", description: "手写电子签名", name: "signature" } }) ] }) ``` **重要规则:** - 忠实还原原文档内容(字体、间距、对齐方式) - 中文文档使用 `SimSun`(宋体)字体 - 中文引号 `\u201C` / `\u201D` 在 JS 字符串中需用模板字面量或 unicode 转义 - 签名图片放在签字标签行之后 - 日期栏填写当天日期(除非用户另有要求) - 中文正式文档的日期行右对齐 ### 第四步:验证 生成后确认: - [ ] 原文档所有文本内容完整保留 - [ ] 签名图片已嵌入且可见 - [ ] 日期和姓名字段已正确填写 - [ ] 文档可正常打开 ## 备选方案:字体签名 如果用户不想手写,可生成字体签名: ```javascript const { createCanvas, registerFont } = require('canvas'); // 注册书法字体(如华文行楷) registerFont('C:/Windows/Fonts/STXINGKA.TTF', { family: 'STXingkai' }); // 在画布上绘制文字 → 导出 PNG → 插入文档 ``` 中文姓名推荐使用 `华文行楷`(STXingkai),英文姓名使用 `Segoe Script` 等手写风格字体。 ## 其他资源 - 详细 API 说明和字段检测方法见 [reference.md](reference.md) - 签名板源码:[assets/signature_pad.html](assets/signature_pad.html)