Signature
╰ TXTextControl Namespace
╰ SignatureField Class
An instance of the SignatureField class represents a signature field in a Text Control document. objects are compatible to the Document Viewer ╰ TX Text Control .NET Server for ASP.NET
╰ Web.MVC.DocumentViewer Namespace
TXTextControl.Web.MVC.DocumentViewer Namespace to acquire signatures using a signature soft pad, but can be also used to digitally sign documents when exported to Adobe PDF. SignatureField objects are inherited from the Frame
╰ TXTextControl Namespace
╰ FrameBase Class
The FrameBase class is the base class of the Image, TextFrame, ChartFrame, BarcodeFrame and DrawingFrame classes. class and are handled similar to TextFrames, Images and other FrameBase objects.
Online Demo
Launch the online demos to test this new sample on your own.
Setting a Signature Image
After one or more signature fields are inserted, you can use the first button Set Signature Image to apply an image to the signature field. Therefore, select the signature field you would like to apply an image for and click the button Set Signature Image.
The JavaScript function setSignatureImage uses the Signature
╰ JavaScript API
╰ SignatureField Object
╰ setImage Method
Sets the signature field's image. method to apply an SVG as a base64 encoded string to the field.
function setSignatureImage() { | |
$('.alert').hide(); | |
TXTextControl.signatureFields.getItem(function (sf) { | |
if (sf === null) { | |
$('.alert .alert-text').text("Please add a Signature Field first."); | |
$('.alert').show(); | |
return; | |
} | |
sf.setImage("PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNi41LjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCA1NjYgMTM2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1NjYgMTM2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBkPSJNMTAwLjksMjAuOWMwLDIuNC0xLDMuOS00LjMsNS41Yy0xLDAuNi0yLjQsMC4xLTIuNC0wLjhjMC0wLjMsMC45LTEuMywyLjEtMi40bDItMS44bC0wLjktMC45Yy0wLjYtMC40LTEuNi0wLjktMi41LTEuMQ0KCQljLTExLjktMy4yLTQyLjgsMS40LTY0LjIsOS43Yy03LjQsMi44LTkuOSw0LjEtOS45LDQuOWMwLDEuMi00LjYsMi41LTUuNSwxLjVjLTEuNC0xLjUsMC0yLjgsNi45LTUuOWM5LjQtNC41LDIxLjgtOC40LDMzLjktMTAuOA0KCQljMTEtMi4zLDIxLTMuMywyOC42LTMuM0M5NC43LDE1LjYsMTAwLjksMTcuNCwxMDAuOSwyMC45eiBNNjEuMSwyMmMwLjEsMCwwLjIsMCwwLjQsMC4xYzEuNSwwLjUsMC44LDQuMi0wLjksNC4yDQoJCWMtMSwwLTIsMC45LTUuMiw1LjNjLTUuNiw3LjQtMTIuOSwxOS4yLTIwLjgsMzMuMWMtOC4yLDE0LjYtMTIsMjIuNi0xMi40LDI1LjhjLTAuMywxLjQtMC41LDEuOC0xLDEuOWMtMC41LDAuMS0xLTAuMS0xLjMtMC40DQoJCWMtMS4zLTEuMy0wLjItNC45LDQuNS0xNC4xYzEwLjMtMjAuNiwyNS4yLTQ0LjUsMzMtNTNDNTkuMiwyMi42LDYwLjIsMjEuOSw2MS4xLDIyeiIvPg0KCTxwYXRoIGQ9Ik01OS42LDY5LjFjLTEuMywyLjQtMS4zLDMuNy0wLjEsNC45YzAuOSwwLjksMS4zLDAuOSwzLjcsMC45YzQuNiwwLDE0LjYtMS45LDIyLTQuM2MyLjUtMC44LDMuNy0wLjYsMy43LDAuNg0KCQljMCwyLjgtMjMuOSw3LjgtMjkuNCw2LjFjLTEuNi0wLjUtMy4yLTIuNC0zLjUtNC4xYy0wLjUtMi42LDEuNS03LDMuMi03LjNjMC4xLDAsMC4yLDAsMC4zLDBDNjAuNiw2Niw2MC42LDY3LjEsNTkuNiw2OS4xeg0KCQkgTTYyLjEsNjIuMmMtMC42LDAuOC0xLjksMC44LTIuMiwwYy0wLjQtMC45LDAuNC0yLDEuNC0yQzYyLjQsNjAuMiw2Mi44LDYxLjMsNjIuMSw2Mi4yeiIvPg0KCTxwYXRoIGQ9Ik05MS4xLDY2LjVjNi45LTEyLjMsMTEuNi0xNy43LDEzLTE1YzAuNSwwLjgtMC4xLDItMC45LDJzLTMuOSw0LjMtNi45LDkuNGMtMS4zLDIuMy0yLjQsNC4yLTIuNCw0LjNjMCwwLjEsMS42LTEsMy42LTIuNg0KCQljMTAuNy04LjIsMjEtMTAuMiwyMi44LTQuNWMwLjUsMS4yLDAuNSwyLjEtMC4yLDQuNmMtMC4zLDEtMC4yLDAuOSwzLjgtMWM3LjEtMy43LDEyLjQtNSwxNC40LTMuNmMyLjMsMS42LDIsNS4zLTAuOCwxMQ0KCQljLTAuOSwxLjktMS43LDMuNC0xLjYsMy40YzAsMCwyLTAuOSw0LjQtMmM1LjEtMi41LDEzLjQtNS4yLDE3LjUtNmMyLjgtMC41LDMuMS0wLjQsMy44LDAuMmMxLjEsMS4yLDAuMiwyLTMuNywyLjgNCgkJYy01LjUsMS4xLTExLjMsMy4yLTE4LDYuNWMtNC42LDIuMi02LjUsMi45LTcuMSwyLjhjLTEuOS0wLjUtMS43LTEuNiwxLjEtNy4xYzIuNy01LjEsMy42LTguNCwyLjYtOS4xYy0wLjktMC42LTQuNywwLjctOS43LDMuMQ0KCQljLTcuNCwzLjYtOS4zLDQuOC0xMy41LDguOGMtMy42LDMuNS03LjEsNi04LjUsNmMtMC44LDAtMS45LTEtMS45LTEuOGMwLTEsMi44LTMuNyw2LjktNi41YzIuMy0xLjUsNC42LTMuMyw1LjEtNC4xDQoJCWMyLjMtMy4xLDMuMi02LjUsMi4xLTcuN2MtMC45LTAuOS00LjUtMC42LTcuNywwLjdjLTguMywzLjItMTguMSwxMS44LTIyLjIsMTkuM2MtMS4yLDIuMy0xLjgsMi44LTIuNSwyLjhjLTAuNiwwLTEtMC4xLTEuMi0wLjINCgkJQzgyLjYsODEuOSw4My4zLDgwLjMsOTEuMSw2Ni41eiIvPg0KCTxwYXRoIGQ9Ik0xODkuNiw5My40Yy0xLTIuMi0wLjktNS4xLDAuNS05LjRjMC45LTIuOSw0LjQtMTAuMyw3LTE1LjFsMS42LTIuOGwtMC45LTAuNGMtMC43LTAuMy0xLTAuOC0xLTEuNGMwLTEuMSwxLjMtMi4yLDMuOC0zLjINCgkJYzEuNi0wLjcsMi4yLTEuMiw0LjgtNWM5LjUtMTMuOCwyMC40LTI2LjgsMjktMzQuNWMyLjEtMS44LDMuNy0zLjQsMy42LTMuNGMtMC4yLTAuMi03LjQsMS41LTEwLjIsMi41Yy0zLDEtNCwxLjctMi4yLDEuNw0KCQljMS4zLDAsMi44LDEuMywyLjYsMi4xYy0wLjMsMC45LTEuNCwwLjktNC40LDAuM2MtNi41LTEuNC0zLjctNC44LDYuMi03LjdjNy44LTIuMiwxNy0zLDI4LjYtMi41YzEyLjgsMC42LDIwLjQsMi40LDIyLjEsNS4yDQoJCWMwLjksMS40LDAuOSwyLjMsMC4yLDMuOGMtMSwyLTMuNCwxLjEtMi42LTAuOWMwLjMtMC44LDAuMi0xLjEtMC40LTEuNmMtMi4yLTItMTEuMS0zLjQtMjMtMy43Yy04LjQtMC4yLTguNS0wLjItOC43LDAuNw0KCQljLTAuMywxLjItMS40LDEuNS0yLjEsMC43Yy0wLjYtMC44LTAuNi0wLjgtMi4xLDBjLTIuMSwxLjEtMTIuNCwxMS4zLTE4LDE3LjhjLTQuNiw1LjQtMTAuNywxMy4zLTE1LDE5LjINCgkJYy0xLjcsMi41LTEuOCwyLjgtMC45LDIuNmMwLjYtMC4yLDMuNC0wLjksNi4zLTEuNmM3LjEtMS45LDExLjktMi43LDE3LjYtMi45YzguMy0wLjQsMTUuMiwxLjUsMTMsMy43Yy0wLjUsMC42LTAuOSwwLjUtMy40LTAuMQ0KCQljLTYtMS41LTE2LjItMC43LTI3LjgsMi40Yy05LjEsMi40LTEwLjQsMy4xLTEwLjQsNS44YzAsMC41LTAuMywwLjktMC44LDAuOWMtMS4zLDAuNC04LDEzLTkuOSwxOC43Yy0wLjUsMS40LTAuOSwzLjYtMC45LDQuOQ0KCQljLTAuMSwyLjEsMCwyLjUsMC45LDMuMmMyLjMsMiw2LjMsMS4yLDIzLjctNC42YzI0LTgsMzMuOS0xMC41LDQzLjktMTEuNWM0LjctMC41LDYuMi0wLjMsNi41LDAuN2MwLjUsMS4yLTAuNywxLjctNS4zLDIuMQ0KCQljLTEwLDAuOS0yMC40LDMuNi00NC44LDExLjZjLTE2LDUuMi0xOS41LDYuMS0yMy4xLDUuNEMxOTEuNyw5Ni40LDE5MC40LDk1LjQsMTg5LjYsOTMuNHoiLz4NCgk8cGF0aCBkPSJNMjY5LjgsODAuNmMwLjMsMC41LDAuNCwxLDAuMiwxLjRjLTAuMywwLjgtMi42LDAuNy0yLjgtMC4xQzI2Ni41LDgwLjMsMjY5LDc5LjEsMjY5LjgsODAuNnoiLz4NCgk8cGF0aCBkPSJNMzk5LDIwLjljMCwyLjQtMSwzLjktNC4zLDUuNWMtMSwwLjYtMi40LDAuMS0yLjQtMC44YzAtMC4zLDAuOS0xLjMsMi4xLTIuNGwyLTEuOGwtMC45LTAuOWMtMC42LTAuNC0xLjYtMC45LTIuNS0xLjENCgkJYy0xMS45LTMuMi00Mi44LDEuNC02NC4yLDkuN2MtNy40LDIuOC05LjksNC4xLTkuOSw0LjljMCwxLjItNC42LDIuNS01LjUsMS41Yy0xLjQtMS41LDAtMi44LDYuOS01LjljOS40LTQuNSwyMS44LTguNCwzMy45LTEwLjgNCgkJYzExLTIuMywyMS0zLjMsMjguNi0zLjNDMzkyLjgsMTUuNiwzOTksMTcuNCwzOTksMjAuOXogTTM1OS4zLDIyYzAuMSwwLDAuMiwwLDAuNCwwLjFjMS41LDAuNSwwLjgsNC4yLTAuOSw0LjJjLTEsMC0yLDAuOS01LjIsNS4zDQoJCWMtNS42LDcuNC0xMi45LDE5LjItMjAuOCwzMy4xYy04LjIsMTQuNi0xMiwyMi42LTEyLjQsMjUuOGMtMC4zLDEuNC0wLjUsMS44LTEsMS45Yy0wLjUsMC4xLTEtMC4xLTEuMy0wLjQNCgkJYy0xLjMtMS4zLTAuMi00LjksNC41LTE0LjFjMTAuMy0yMC42LDI1LjItNDQuNSwzMy01M0MzNTcuNCwyMi42LDM1OC4zLDIxLjksMzU5LjMsMjJ6Ii8+DQoJPHBhdGggZD0iTTM4OS4xLDYxLjZjMS40LDEuMSwxLjIsNC43LTAuNCw5LjFjLTAuNywxLjktMS4xLDMuNC0xLjEsMy40YzAuMSwwLjEsMi40LTAuNyw1LjItMS42YzIuOC0wLjksNy0yLjIsOS42LTIuOA0KCQljNC4yLTEsNC41LTEsNS4xLTAuNWMxLjIsMS4yLDAuMiwyLTUuNSwzLjVjLTguNCwyLjQtMTYuMiw1LjEtMTYuNyw2LjFjLTYuOCwxMy40LTEyLjQsMjEuMi0yMS4yLDMwDQoJCWMtMTMuNiwxMy41LTI4LjIsMjAuNi0zNi41LDE3LjVjLTMuOC0xLjMtNS45LTQuNy01LjMtOC40YzEuMi03LjEsOS0xNS4xLDIyLjctMjMuMmM5LjQtNS42LDI5LjYtMTUuNiwzNi44LTE4LjENCgkJYzEuMS0wLjQsMS43LTAuOSwyLjUtMi4zYzEuNC0zLDIuOS03LjksMi44LTkuM2wtMC4xLTEuNEwzODQsNjVjLTEuNywwLjktNS43LDMtOC45LDVjLTYuNSw0LjEtOS45LDUuNC0xMi45LDUuNA0KCQljLTQsMC01LjktMi4xLTUuOC02LjdjMC0zLjIsMS01LjksMi41LTUuOWMxLjYsMCwyLDAuOSwxLDIuNGMtMC43LDAuOS0wLjksMS43LTAuOSwzLjVjLTAuMSwzLjEsMC43LDQsMy4xLDRjMi41LDAsNS40LTEuMywxMi01LjUNCgkJYzcuNC00LjYsMTAuOS02LjQsMTMuMS02LjNDMzg4LjEsNjEuMSwzODguNyw2MS4yLDM4OS4xLDYxLjZ6IE0zNDYuNiw5Ny4yYy0xMy41LDguMS0yMS4zLDE2LjMtMjEuMywyMi4yYzAsMS42LDAuMiwyLjEsMS4yLDMNCgkJYzAuNywwLjcsMS44LDEuMiwyLjcsMS40YzAuOCwwLjEsMS42LDAuMywxLjgsMC40YzAuNywwLjEsMy40LTAuMyw2LTAuOWMxMS4xLTIuOCwyNy42LTE2LjYsMzcuNi0zMS41YzIuOC00LjIsNi45LTExLjMsNi42LTExLjUNCgkJYzAtMC4xLTAuMS0wLjEtMC4xLTAuMUMzNzguOCw4MC40LDM1NS4yLDkyLDM0Ni42LDk3LjJ6Ii8+DQoJPHBhdGggZD0iTTQyMi43LDUyLjdjMC40LDAuNywwLjEsMS0xLjgsMi44Yy0xLjIsMS4xLTIuNiwyLjYtMi45LDMuMWMtMC44LDEtMC44LDEsMi4zLTAuNWMxMC4zLTUsMjAuMy01LjEsMjIuNC0wLjENCgkJYzAuOCwxLjksMC4zLDQuNC0xLjIsNi44Yy0wLjYsMC45LTAuOSwxLjctMC45LDEuOGMwLjEsMC4xLDIuMS0wLjIsNC41LTAuNmM0LjMtMC45LDEwLTEuMSwxMC43LTAuN2MwLjcsMC40LDAuNiwxLjUsMCwyLjENCgkJYy0wLjMsMC4zLTEuNSwwLjUtMi45LDAuNWMtMi43LDAtNy45LDAuOS0xMi41LDIuMWMtMi43LDAuNy0zLjQsMS01LjgsM2MtNy4zLDYuNC0xNSwxMC4xLTE2LjgsOC4zYy0yLjgtMi43LDQuOS04LjgsMTUtMTIuMQ0KCQljMi0wLjcsMi44LTEuMiwzLjgtMi4zYzQuNi02LjEsNC43LTguOCwwLjEtOS41Yy01LjgtMC45LTE0LjUsMi0yMC43LDdjLTYuNyw1LjQtOC43LDkuMi0xMi42LDI0LjljLTIuOCwxMS4yLTYuMSwxOC45LTExLjEsMjYuNA0KCQljLTMsNC41LTMuMyw0LjctNC42LDUuN2MtMS4xLDAuOC0yLDAuOS0yLjgsMC4yYy0zLjItMi41LTEuMS0xMi42LDQuOS0yNS4zYzYuNS0xMy43LDE1LjItMjYuOCwyNS40LTM4LjVjNC41LTUuMSw0LjYtNS4zLDYuMS01LjcNCgkJYzAuMi0wLjEsMC40LTAuMSwwLjUtMC4xQzQyMi4yLDUyLDQyMi40LDUyLjIsNDIyLjcsNTIuN3ogTTQwMi44LDc5LjNjLTAuNC0wLjUtOC45LDE0LjctMTEuNiwyMC42Yy0zLjEsNy01LjgsMTYuMy01LDE4LjINCgkJYzAuMywwLjksMC43LDAuNSwzLjEtMy4yYzMtNC41LDYtMTAuNCw4LjEtMTUuOUMzOTguOCw5NC44LDQwMy4xLDc5LjYsNDAyLjgsNzkuM3ogTTQyNy44LDc0LjVjLTAuNCwwLTMuNywxLjktNC43LDIuOA0KCQljLTEuNiwxLjItMC4zLDAuNywyLjMtMC45QzQyNi43LDc1LjUsNDI3LjgsNzQuNiw0MjcuOCw3NC41QzQyNy44LDc0LjUsNDI3LjgsNzQuNSw0MjcuOCw3NC41eiIvPg0KCTxwYXRoIGQ9Ik00NTYuOSw2NC4xYzAuOSwwLDEuNywwLjMsMi4yLDAuOWMwLjQsMC41LDAuOCwxLjIsMC44LDEuNmMwLDItNiw2LjMtOC44LDYuM2MtMSwwLTEuMSwwLjItMC45LDEuM2MwLjIsMiwyLDIuOCw1LjgsMi41DQoJCWM1LjYtMC40LDE4LjItMy42LDMxLjktOC4yYzQuNi0xLjUsOC44LTIuNyw5LjMtMi43YzEuMywwLjIsMSwxLjUtMC40LDIuNWMtMy40LDEuOS0yMy45LDguMS0zMy44LDEwLjINCgkJYy02LjgsMS40LTEwLjQsMS41LTEyLjgsMC4zYy0zLjktMS45LTQuMS02LjktMC40LTEwLjdDNDUyLjEsNjUuNiw0NTQuOSw2NC4xLDQ1Ni45LDY0LjF6IE00NTYuMiw2N2MtMC43LDAtMS44LDAuNy0zLjIsMS44DQoJCWMtMi41LDItMC4zLDEuMiwyLjUtMC44QzQ1Ni4yLDY3LjUsNDU2LjUsNjcsNDU2LjIsNjd6Ii8+DQoJPHBhdGggZD0iTTUxMC4yLDU0LjVjLTEuNSwyLjgtNy41LDguMS0xMi4yLDEwLjhjLTEuOCwwLjktMi41LDEuNS0yLjEsMS43YzAuOSwwLjYsNC4yLTAuMywxMy4yLTMuM2MxMi00LjEsMjAuMy01LjgsMjMuMy00LjgNCgkJYzAuNSwwLjIsMSwwLjgsMS4zLDEuNGMwLjYsMS41LDAuMSwyLjgtMi41LDcuMWMtMi41LDQuMi00LjgsOC45LTUuMiwxMC4zYy0wLjIsMC45LTAuMSwxLjEsMC42LDEuMWMwLjksMCw1LjUtMi4zLDExLjYtNS43DQoJCWMxMS4zLTYuMywxNi45LTguMiwxNy43LTZjMC40LDEtMC40LDEuNy0yLjMsMmMtMC45LDAuMi01LjIsMi4yLTkuNyw0LjVjLTQuNSwyLjMtOS44LDUtMTEuOSw2LjFzLTQuNSwyLTUuNCwyLjINCgkJYy0xLjQsMC4yLTEuOCwwLTIuNy0wLjljLTAuOS0wLjktMS0xLjMtMC45LTNjMC4yLTIuMSwyLjEtNi4yLDUuNi0xMi4xYzEuMi0yLjEsMi4yLTMuOSwyLjItNC4xYzAtMS4zLTkuNSwwLjktMjEuMyw0LjgNCgkJYy0xMC4yLDMuNC0xMy4yLDQtMTUuMiwyLjljLTAuNy0wLjMtMS40LTAuOS0xLjctMS4zYy0wLjctMS40LTAuNS00LjIsMC43LTYuNGMxLjQtMi45LDcuNC04LjgsMTAuNi0xMC41YzEuNi0wLjksMi45LTEuMiw0LjEtMS4zDQoJCUM1MTAuNSw1MCw1MTEuNiw1MS43LDUxMC4yLDU0LjV6IE01MDEsNTcuMWMtMS4xLDEtMi43LDIuNy0zLjQsMy43Yy0yLjMsMy0xLjksMywyLjMsMGM0LjItMi45LDguOC04LDcuNi04DQoJCUM1MDYuOSw1Mi44LDUwMyw1NS40LDUwMSw1Ny4xeiIvPg0KPC9nPg0KPC9zdmc+DQo=") | |
}); | |
} |
Creating a PDF
The second button Export Signature Fields to PDF creates a PDF document including unsigned signature fields. These fields can be signed in Acrobat Reader after the PDF has been created.
After opening this PDF in Acrobat Reader, the unsigned fields can be signed using a digital ID:
Signing Signature Fields
The third button is calling an HttpPost controller method that uses a Server
╰ TXTextControl Namespace
╰ ServerTextControl Class
The ServerTextControl class implements a component that provide high-level text processing features for server-based applications. instance to sign the signature fields using the Save
╰ TXTextControl Namespace
╰ SaveSettings Class
╰ SignatureFields Property
Specifies an array of DigitalSignature objects, each of which defines an X.509 certificate and is associated with a SignatureField in the document. property.
Learn More
Using TX Text Control, there are two ways of signing PDF documents: The whole document and individual signature fields. This article shows how to implement both ways in a .NET 6 command line application.
[HttpPost] | |
public string PDFSignSignatureFields(string document) { | |
byte[] bDocument; | |
// create temporary ServerTextControl | |
using (TXTextControl.ServerTextControl tx = new TXTextControl.ServerTextControl()) { | |
tx.Create(); | |
tx.Load(Convert.FromBase64String(document), BinaryStreamType.InternalUnicodeFormat); | |
X509Certificate2 cert = new X509Certificate2(Server.MapPath("~/App_Data/textcontrolself.pfx"), "123"); | |
List<DigitalSignature> digitalSignatures = new List<DigitalSignature>(); | |
foreach (SignatureField field in tx.SignatureFields) { | |
field.Name = Guid.NewGuid().ToString(); | |
digitalSignatures.Add(new DigitalSignature(cert, null, field.Name)); | |
field.Image = new SignatureImage(Server.MapPath("~/App_Data/Documents/signature.svg"), 4); | |
field.SignerData = new SignerData("Tim Typer", "Developer", "", "", "Online Demo"); | |
} | |
TXTextControl.SaveSettings saveSettings = new TXTextControl.SaveSettings() { | |
CreatorApplication = "TX Text Control Sample Application", | |
SignatureFields = digitalSignatures.ToArray() | |
}; | |
// export to PDF | |
tx.Save(out bDocument, BinaryStreamType.AdobePDF, saveSettings); | |
} | |
// return as Base64 encoded string | |
return Convert.ToBase64String(bDocument); | |
} |
When loading this document into Acrobat Reader, the signature fields are shown as visual representations in the document. If you click on a field, a dialog confirms the validation status. Additionally, the signature field names are shown in the sidebar.
Online Demo
Test this on your own using the live demos: