使用Topaz Systems签名板调用GetSigImage()报参数无效问题求助
解决方案
核心原因
你遇到的Parameter is not valid报错90%以上是因为sigPlusNET1.GetSigImage()返回了null,传入到你写的GetImage()方法时,source参数为空导致参数校验不通过。返回空的常见原因和修复步骤如下:
修复步骤
- 先加载从数据库取出的签名字符串到控件
你存储到SQL Server的是Topaz控件GetSigString()方法输出的专有格式字符串,重构签名时必须先把这个字符串加载回控件,才能生成图片,你当前的代码没有这一步。 - 保持加密、压缩参数和采集时完全一致
你采集签名时用了密钥为123的AutoKey加密,未开启额外加密模式和压缩模式,重构时必须配置完全相同的参数,否则控件无法解析签名数据。 - 确认数据库存储的签名字符串无截断
Topaz签名字符串长度最长可达数千字符,你存储的SQL Server字段需要设置为nvarchar(max)类型,若使用nvarchar(1000)这类短长度字段会导致字符串截断,无法正常加载。
正确的重构代码示例
// 1. 初始化控件状态 sigPlusNET1.SetTabletState(0); // 2. 配置和采集时完全一致的加密参数 sigPlusNET1.AutoKeyStart(); sigPlusNET1.SetAutoKeyData("123"); sigPlusNET1.AutoKeyFinish(); // 采集时注释了加密、压缩配置,这里也要保持不开启 // sigPlusNET1.SetEncryptionMode(2); // sigPlusNET1.SetSigCompressionMode(1); // 3. 加载从数据库查询到的签名字符串(这里替换成你自己读库取到的字符串变量) string sigStringFromDb = 你的SQL Server查询到的签名字符串; sigPlusNET1.SetSigString(sigStringFromDb); // 4. 生成图片前先判断是否为空 var sigImage = sigPlusNET1.GetSigImage(); if (sigImage == null) { // 此处加错误处理:签名数据加载失败,检查字符串是否完整、加密参数是否匹配 throw new Exception("签名数据加载失败"); } ImageSource v = GetImage(sigImage);
辅助排查方案
如果执行完上述步骤还是报错,可按以下顺序排查:
- 确认你项目引用的
System.Drawing.Common包版本和官方Demo一致,WPF项目需添加对System.Drawing的引用 - 若你是在非UI线程调用该代码,需将生成图片的逻辑调度到UI线程执行,WPF中可通过
Dispatcher实现 - 检查
GetImage方法中的ImageFormat.Bmp是否支持,可尝试替换为ImageFormat.Png测试
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

