寻求SharePoint 2016列表表单添加签名的有效解决方案(已尝试方法失效)
针对你在SharePoint 2016列表表单中添加签名功能遇到的问题,我整理了几个经过验证的可行方案,替换你之前尝试的兼容性不佳的方法:
方案一:使用Canvas + JavaScript自定义签名控件(无需第三方工具)
这个方法直接在列表的新/编辑表单中嵌入自定义脚本,通过HTML Canvas捕获签名,然后将签名转为图片存储到列表字段中,兼容性好且无需额外工具。
步骤:
- 准备列表字段:在你的SharePoint列表中添加一个多行文本(增强型)字段(建议命名为
Signature,后续代码中字段名需同步匹配),用来存储签名的Base64图片数据;如果偏好直接展示图片,也可添加一个图片字段,但多行文本字段实现更简单。 - 编辑列表表单:
- 进入列表的新表单页面,点击右上角的设置 > 编辑页面。
- 点击添加Web部件,选择媒体和内容分类下的内容编辑器,添加到页面合适位置。
- 插入自定义代码:
- 编辑内容编辑器Web部件,点击编辑HTML源,粘贴以下代码:
<div> <h4>请签署您的姓名:</h4> <canvas id="signatureCanvas" width="400" height="150" style="border:1px solid #ccc;"></canvas> <br> <button onclick="clearSignature()">清除签名</button> <button onclick="saveSignature()">保存签名</button> </div> <script type="text/javascript"> var canvas = document.getElementById('signatureCanvas'); var ctx = canvas.getContext('2d'); var isDrawing = false; var lastX = 0; var lastY = 0; // 鼠标事件处理 canvas.addEventListener('mousedown', startDrawing); canvas.addEventListener('mousemove', draw); canvas.addEventListener('mouseup', stopDrawing); canvas.addEventListener('mouseout', stopDrawing); // 触摸事件处理(支持移动端) canvas.addEventListener('touchstart', function(e) { e.preventDefault(); var touch = e.touches[0]; lastX = touch.clientX - canvas.offsetLeft; lastY = touch.clientY - canvas.offsetTop; isDrawing = true; }); canvas.addEventListener('touchmove', function(e) { e.preventDefault(); if (isDrawing) { var touch = e.touches[0]; var currentX = touch.clientX - canvas.offsetLeft; var currentY = touch.clientY - canvas.offsetTop; drawLine(lastX, lastY, currentX, currentY); lastX = currentX; lastY = currentY; } }); canvas.addEventListener('touchend', stopDrawing); function startDrawing(e) { isDrawing = true; [lastX, lastY] = [e.offsetX, e.offsetY]; } function draw(e) { if (!isDrawing) return; drawLine(lastX, lastY, e.offsetX, e.offsetY); [lastX, lastY] = [e.offsetX, e.offsetY]; } function drawLine(x1, y1, x2, y2) { ctx.beginPath(); ctx.strokeStyle = '#000'; ctx.lineWidth = 2; ctx.lineCap = 'round'; ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.stroke(); } function stopDrawing() { isDrawing = false; } function clearSignature() { ctx.clearRect(0, 0, canvas.width, canvas.height); // 清空对应字段内容 var field = document.querySelector("input[title='Signature']") || document.querySelector("textarea[title='Signature']"); if(field) field.value = ''; } function saveSignature() { // 将Canvas转为Base64图片 var signatureData = canvas.toDataURL('image/png'); // 将Base64数据填入列表的Signature字段 var field = document.querySelector("input[title='Signature']") || document.querySelector("textarea[title='Signature']"); if(field) field.value = signatureData; } </script> - 保存内容编辑器Web部件,再保存整个页面。
- 编辑内容编辑器Web部件,点击编辑HTML源,粘贴以下代码:
- 优化显示表单:如果需要在列表的显示表单中展示签名图片,同样添加内容编辑器Web部件,插入以下代码解析Base64数据:
<script type="text/javascript"> var signatureData = document.querySelector("div[title='Signature']").innerText; if (signatureData) { document.write('<img src="' + signatureData + '" style="max-width:400px; border:1px solid #eee;">'); } </script>
方案二:使用SPFx Web Part(企业级可复用方案)
如果你的环境允许部署SharePoint Framework(SPFx)解决方案,可以开发一个自定义签名Web Part,封装签名逻辑,更易于维护和跨列表复用。
核心步骤:
- 初始化SPFx项目:使用Yeoman SharePoint Generator创建新的Web Part项目,选择兼容SharePoint 2016的版本(建议使用SPFx 1.11.x及以下版本)。
- 开发签名组件:用TypeScript重构方案一的Canvas签名逻辑,添加样式美化和用户交互优化。
- 集成列表字段:通过PnP JS或SharePoint REST API,将签名的Base64数据保存到列表对应字段。
- 部署与使用:打包解决方案并部署到SharePoint 2016环境,将Web Part添加到列表的新/编辑/显示表单页面。
方案三:使用Power Apps自定义表单(低代码方案)
如果你的SharePoint 2016环境已配置Power Apps集成(需满足版本和租户配置要求),可以用Power Apps快速构建带签名功能的自定义表单,无需编写代码。
步骤:
- 打开Power Apps编辑器:在列表中点击设置 > 自定义表单 > 使用Power Apps创建。
- 添加签名控件:在左侧控件库中找到签名控件,拖到表单的合适位置。
- 绑定字段:将签名控件的
Image属性绑定到列表的图片字段(或多行文本字段,需通过JSON函数转换格式)。 - 发布表单:保存并发布自定义表单,回到SharePoint列表后,新/编辑表单将自动切换为带签名功能的Power Apps表单。
注意:Power Apps集成需要确保你的SharePoint 2016环境已启用Power Apps连接,且版本支持该功能。
内容的提问来源于stack exchange,提问作者KoolRaj
相关产品推荐
相关产品推荐

