name: e-signature-zh description: 在 Word 文档(.doc/.docx)中插入手写电子签名。提供画布签名板供用户手写签名,解析文档定位签字栏,插入签名图片,填写日期和姓名。当用户提到电子签名、手写签名、签字、签署文件、在Word中签名时触发此技能。
Word 文档电子签名
触发场景
当用户需要:
- 在 Word 文档中添加手写电子签名
- 签署 .doc 或 .docx 文件
- 填写文档中的签字栏、日期、姓名等字段
工作流程
第一步:解析文档
对于 .doc 文件 — 使用 word-extractor(Node.js):
npm install word-extractor # 如未安装
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)创建最终文档:
npm install docx # 如未安装
插入签名图片的核心代码:
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 转义 - 签名图片放在签字标签行之后
- 日期栏填写当天日期(除非用户另有要求)
- 中文正式文档的日期行右对齐
第四步:验证
生成后确认:
- 原文档所有文本内容完整保留
- 签名图片已嵌入且可见
- 日期和姓名字段已正确填写
- 文档可正常打开
备选方案:字体签名
如果用户不想手写,可生成字体签名:
const { createCanvas, registerFont } = require('canvas');
// 注册书法字体(如华文行楷)
registerFont('C:/Windows/Fonts/STXINGKA.TTF', { family: 'STXingkai' });
// 在画布上绘制文字 → 导出 PNG → 插入文档
中文姓名推荐使用 华文行楷(STXingkai),英文姓名使用 Segoe Script 等手写风格字体。
其他资源
- 详细 API 说明和字段检测方法见 reference.md
- 签名板源码:assets/signature_pad.html