我正在使用这个黄玉签名板,我正在尝试这样做并保存到数据库现在我有一个输入字段来获取文本框 (HTML) 中的用户名,如下所示
<input type="text" name="username" id="username" />
现在当我在后面的代码中这样调用它时
protected void Page_Load(object sender, EventArgs e)
{
//Put user code to initialize the page here
Topaz.SigPlusNET sigObj = new Topaz.SigPlusNET();
sigObj.AutoKeyStart();
//use the same data to decrypt signature
sigObj.SetAutoKeyData(Request.Form["username"]); <--- Error shows here
sigObj.AutoKeyFinish();
sigObj.SetSigCompressionMode(1);
sigObj.SetEncryptionMode(2);
//Now, get sigstring from client
//Sigstring can be stored in a database if
//a biometric signature is desired rather than an image
sigObj.SetSigString(Request.Form["hidden"]);
if (sigObj.NumberOfTabletPoints() > 0)
{
sigObj.SetImageFileFormat(0);
sigObj.SetImageXSize(500);
sigObj.SetImageYSize(150);
sigObj.SetImagePenWidth(8);
sigObj.SetJustifyX(5);
sigObj.SetJustifyY(5);
sigObj.SetJustifyMode(5);
System.Drawing.Image img = sigObj.GetSigImage();
base64ImageString = ImageToBase64(img, System.Drawing.Imaging.ImageFormat.Jpeg);
/* String path;
//path = System.AppDomain.CurrentDomain.BaseDirectory & "mySig.bmp"
path = "C:\\mySig.bmp";
img.Save(path, System.Drawing.Imaging.ImageFormat.Bmp);
Response.Write("Image saved successfully to " + path);
*/
//Send to database
if (sigBase64.Length > 3000)
{
using (SqlConnection con = new SqlConnection(constring))
{
con.Open();
string sql = "insert into SakalPicturecontrol (firstname,lastname,email,base64ImageString) Values (@firstname,@lastname,@email,@base64ImageString)";
try
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@firstname", firstname);
cmd.Parameters.AddWithValue("@lastname", lastname);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@base64ImageString", base64ImageString);
cmd.ExecuteNonQuery();
Response.Write("Information has been saved Correctly..");
con.Close();
}
}
catch (Exception ex)
{
Response.Write("Error: " + ex.ToString());
}
}
}
}
else
{
//signature has not been returned successfully!
}
}
我得到这个错误,String Reference not set to instance of String
。我错过了什么吗?有什么我可能做的不对吗?
编辑
当我做 Shift + F9 我得到这个图像
编辑
HTML 部分如下所示:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SignatureCaptureForm.aspx.cs" Inherits="SakalGBSignatureProcess.SignatureCaptureForm" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">
.auto-style1 {
width: 20px;
}
.auto-style4 {
left: 0px;
width: 424px;
top: 0px;
height: 204px;
}
.auto-style5 {
width: 344px;
}
.auto-style6 {
width: 509px;
text-align: right;
}
.auto-style7 {
width: 90%;
}
.auto-style8 {
width: 328px;
}
.auto-style10 {
width: 317px;
}
</style>
<script type="javascript">
function OnClear()
{
document.TopazForm.SigPlus1.ClearTablet(); //Clears the signature, in case of error or mistake
}
function onSign()
{
document.TopazForm.SigPlus1.TabletState = 1;
}
function onSave()
{
if(document.TopazForm.username.value == "")
{
alert("Please Username Before Continuing...");
return false;
}
if(document.TopazForm.SigPlus1.NumberOfTabletPoints > 0)
{
document.TopazForm.SigPlus1.TabletState = 0; //Turns tablet off
document.TopazForm.SigPlus1.AutoKeyStart();
document.TopazForm.SigPlus1.AutoKeyData = document.TopazForm.username.value;
//pass here the data you want to use to encrypt the signature
//this demo simply encrypts to the name typed in by the user
//you'll probably want to make sure your encryption data you use is
//more useful...that you encrypt the signature to the data important
//to your app, and what the client has agreed to
document.TopazForm.SigPlus1.AutoKeyFinish();
document.TopazForm.SigPlus1.EncryptionMode = 2;
document.TopazForm.SigPlus1.SigCompressionMode = 1;
document.TopazForm.hidden.value = document.TopazForm.SigPlus1.SigString;
//pass the signature ASCII hex string to the hidden field,
//so it will be automatically passed when the page is submitted
document.TopazForm.submit();
}
else
{
alert("Please Sign Before Continuing...");
return false;
}
}
</script>
</head>
<body>
<form id="TopazForm" name="TopazForm" method="post" action="SignatureCaptureForm.aspx" />
<div>
<table class="auto-style7">
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020"> </td>
<td class="auto-style1"> </td>
<td>
</td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020">Username: </td>
<td class="auto-style1"> </td>
<td>
<INPUT id="username" type="text" name="username" class="auto-style8"></td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020">First Name : </td>
<td class="auto-style1"> </td>
<td>
<input id="firstname" class="auto-style8" type="text" name="firstname" runat="server"/></td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020">Last Name : </td>
<td class="auto-style1"> </td>
<td>
<input id="lastname" class="auto-style8" type="text" name="lastname" runat="server" /></td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020">Email: </td>
<td class="auto-style1"> </td>
<td>
<input id="email" class="auto-style8" type="text" name="email" runat="server"/></td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020">Passport Photograph:</td>
<td class="auto-style1"> </td>
<td>
<asp:Image ID="passport" runat="server" Height="164px" Width="170px" />
</td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020"> </td>
<td class="auto-style1"> </td>
<td>
<asp:FileUpload ID="FileUpload1" runat="server" />
</td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020">Signature Capture:</td>
<td class="auto-style1"> </td>
<td><OBJECT id="SigPlus1"
classid="clsid:69A40DA3-4D42-11D0-86B0-0000C025864A" name="SigPlus1" class="auto-style4">
<PARAM NAME="_Version" VALUE="131095">
<PARAM NAME="_ExtentX" VALUE="11218">
<PARAM NAME="_ExtentY" VALUE="5398">
<PARAM NAME="_StockProps" VALUE="9">
</OBJECT></td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020"> </td>
<td class="auto-style1"> </td>
<td> </td>
</tr>
<tr>
<td class="auto-style6" style="font-family: 'Century Gothic'; font-size: medium; font-weight: normal; font-style: normal; color: #202020"> </td>
<td class="auto-style1"> </td>
<td>
<table style="width:100%;">
<tr>
<td class="auto-style5">
<input id="SignBtn" type="button" value="Sign" onclick="onSign();"/>
<input id="ClearBtn" type="button" value="Clear" onclick="OnClear();" /></td>
<td>
<input id="Button1" type="button" value="Save" onclick="onSave();" />
<INPUT id="hidden" type="hidden" name="hidden"></td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
后端(后面的代码)看起来像这样
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace SakalGBSignatureProcess
{
public partial class SignatureCaptureForm : System.Web.UI.Page
{
string base64ImageString;
string constring = WebConfigurationManager.ConnectionStrings["MYCON"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
//Put user code to initialize the page here
Topaz.SigPlusNET sigObj = new Topaz.SigPlusNET();
sigObj.AutoKeyStart();
//use the same data to decrypt signature
sigObj.SetAutoKeyData(Request.Form["username"]);
sigObj.AutoKeyFinish();
sigObj.SetSigCompressionMode(1);
sigObj.SetEncryptionMode(2);
//Now, get sigstring from client
//Sigstring can be stored in a database if
//a biometric signature is desired rather than an image
sigObj.SetSigString(Request.Form["hidden"]);
if (sigObj.NumberOfTabletPoints() > 0)
{
sigObj.SetImageFileFormat(0);
sigObj.SetImageXSize(500);
sigObj.SetImageYSize(150);
sigObj.SetImagePenWidth(8);
sigObj.SetJustifyX(5);
sigObj.SetJustifyY(5);
sigObj.SetJustifyMode(5);
System.Drawing.Image img = sigObj.GetSigImage();
base64ImageString = ImageToBase64(img, System.Drawing.Imaging.ImageFormat.Jpeg);
/* String path;
//path = System.AppDomain.CurrentDomain.BaseDirectory & "mySig.bmp"
path = "C:\\mySig.bmp";
img.Save(path, System.Drawing.Imaging.ImageFormat.Bmp);
Response.Write("Image saved successfully to " + path);
*/
//Send to database
if (base64ImageString.Length > 3000)
{
using (SqlConnection con = new SqlConnection(constring))
{
con.Open();
string sql = "insert into SakalPicturecontrol (firstname,lastname,email,base64ImageString) Values (@firstname,@lastname,@email,@base64ImageString)";
try
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@firstname", firstname);
cmd.Parameters.AddWithValue("@lastname", lastname);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@base64ImageString", base64ImageString);
cmd.ExecuteNonQuery();
Response.Write("Information has been saved Correctly..");
con.Close();
}
}
catch (Exception ex)
{
Response.Write("Error: " + ex.ToString());
}
}
}
}
else
{
//signature has not been returned successfully!
}
}
/* protected void Button2_Click(object sender, EventArgs e)
{
}*/
public string ImageToBase64(System.Drawing.Image image, System.Drawing.Imaging.ImageFormat format)
{
using (MemoryStream ms = new MemoryStream())
{
// Convert Image to byte[]
image.Save(ms, format);
byte[] imageBytes = ms.ToArray();
// Convert byte[] to Base64 String
string base64String = Convert.ToBase64String(imageBytes);
return base64String;
}
}
/* protected void Button3_Click(object sender, EventArgs e)
{
}*/
}
}