アプリケーション自体によって作成されたドキュメントにサインアップするためにWacomタブレット(STU-430)署名を使用する必要があるASP.NETWebフォームアプリケーションを作成しています。
ASP.NETアプリケーションはWebサーバー上で実行され、リモートクライアント(Wacom COMオブジェクトを使用しているため現時点ではInternetExplorerのみ)が署名用のタブレットを所有/処理します。
Webフォームには、署名を収集/キャプチャするためのコードのみを埋め込む必要があります。署名処理は、Webサーバーによってリモートで処理される必要があります。
Wacom HTMLサンプルは、javascriptとCOMを使用して、クライアント側のhtmlページがフォームの要素内に署名を「保存」する署名をキャプチャできるようにします。簡単に言うと、これは「署名」の前のHTMLドキュメント構造です。
<div id="signatureDiv">
Signature image:<br/>
<img id="signatureImage"/>
</div>
これは、署名の後のHTML構造です。
<div id="signatureDiv">
Signature image:<br/>
<img id="signatureImage" src="data:image/jpeg;base64,/9j/....">
</div>
COMオブジェクトは、クライアントサイトのDOM構造を「変更」し、「img」プレースホルダー「...」内に署名画像のバイナリデータを「挿入」します。
問題は...クライアントDOM構造内の要素のデータを取得してサーバーに送信し、署名を「処理」して正しく処理/保存するにはどうすればよいですか?
非表示のフォームフィールド内にimgデータのバイナリコンテンツを「保存」し、これをゲートウェイとして使用してデータを投稿することは可能ですか?
よろしく、ミケーレ
私は解決策を見つけました。これが他の誰かを助けることができることを願っています:
1)WACOMタブレットを使用するものの開発を開始する前に、署名のキャプチャプロセスに時間がかかる可能性があることを考慮してください(私の経験では、フォームで署名をデジタル化するのに40秒もかかりました)。
2)WACOMによって提供されるコードは機能します(少なくともc#の例とHTMLの例は機能します)。
3)Webフォームソリューションを開発する場合は、HTMLコードサンプルに加えて、少しのJSといくつかのC#またはVBコーディングが必要です。
4)Windows 8.1 64ビットシステム(Win 7でチェックする必要があります)では、2回目に署名を配置するときに、描画中にWACOMタブレットが署名を「表示」しない可能性があります...ブラインド署名後に[OK]を押すと、「署名」がクライアントに送信されます。システムを元に戻す唯一の方法は、USBポートのプラグを抜いて再度差し込むことです。
Webフォームでは、次のようなものを配置する必要があります。
HTML:
<link rel="stylesheet" type="text/css" href="Signature.css" />
<script type="text/javascript" src="BigInt.js"></script>
<script type="text/javascript" src="sjcl.js"></script>
<script type="text/javascript" src="Signature_encryption.js"></script>
<script type="text/javascript" src="Signature.js"></script>
<script type="text/javascript">
var _signatureForm = null;
function initDemo() {
if (_signatureForm == null)
{
var _signatureImage = document.getElementById("signatureImage");
_signatureForm = new SignatureForm(_signatureImage);
}
_signatureForm.connect();
return false;
}
function signForm() {
var _signatureImage = document.getElementById("signatureImage");
var _hdnSignature = $("input[id$='_hdnSignature']");
_hdnSignature.value = _signatureImage.src;
return true;
}
</script>
<form id="_frmMain" runat="server">
<div>
<div id="signatureDiv">
Signature image:<br />
<img id="signatureImage" />
</div>
<div>
Actions:<br />
<asp:Button ID="signButton" runat="server" Text="Capture" OnClientClick="javascript: return initDemo();" />
<asp:Button ID="_btnSign" runat="server" Text="Sign" OnClientClick="javascript: return signForm();" OnClick="_btnSign_Click" />
<asp:HiddenField ID="_hdnSignature" runat="server" />
</div>
</div>
<object id="wgssSTU" type="application/x-wgssSTU" ></object>
</form>
この例で参照されているすべての.jsファイルは、Wacom SDKHTMLサンプル内で提供されているものです。
ダーティジョブは、画像を取得して非表示フィールドに挿入するsignForm()関数によって実行され、分離コードプロシージャが署名を処理できるようにします。
セクションの背後にあるコード(私の場合はC#)は非常に単純です。ボタンイベントを処理し、画像をデコードするだけです。
protected void _btnSign_Click(object sender, EventArgs e)
{
string _sImage = _hdnSignature.Value.Replace("data:image/jpeg;base64,", "");
byte[] _rgbBytes = Convert.FromBase64String(_sImage);
string _sImageFile = Guid.NewGuid().ToString().Replace("-", string.Empty);
_sImageFile += ".jpg";
using (FileStream imageFile = new FileStream(Server.MapPath("~/" + _sImageFile), FileMode.Create))
{
imageFile.Write(_rgbBytes, 0, _rgbBytes.Length);
imageFile.Flush();
}
}
WACOMタブレットはMETADATAを画像ファイルに埋め込まないことを考慮してください。コードに埋め込むことをお勧めします。
よろしく、マイク
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加