Demo: Signature Fields in the Document Editor
We just published a new online demo that shows how to insert and handle signature fields in the document editor. Additionally, signature fields are exported to PDF and signed individually using digital certificates.

Signature
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
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
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:
Related Posts
TX Text Control 33.0 SP3 is Now Available: What's New in the Latest Version
TX Text Control 33.0 Service Pack 3 is now available, offering important updates and bug fixes for all platforms. If you use TX Text Control in your document processing applications, this service…
ASP.NETASP.NET CoreDocument Viewer
High-Performance Text Replacement in Large DOCX Files using C# .NET
Learn how to efficiently replace text in large DOCX files using C# .NET and the ServerTextControl component from Text Control. This article demonstrates the performance benefits of using the…
ASP.NETASP.NET CoreDocument Viewer
Document Viewer 33.2.1 Released: New Event and Bug Fixes
This service pack includes important bug fixes and improvements to enhance the stability and performance of the Document Viewer. In addition, a new event has been introduced to provide developers…
ASP.NETAccessibilityASP.NET Core
Upcoming Support for PDF/UA Compliance and Tagged PDF Generation in Version 34.0
We are happy to announce that version 34.0 will support PDF/UA compliance and the creation of tagged PDF documents. This significant update demonstrates our ongoing commitment to accessibility by…
TX Text Control 33.0 SP2 is Now Available: What's New in the Latest Version
TX Text Control 33.0 Service Pack 2 is now available, offering important updates and bug fixes for all platforms. If you use TX Text Control in your document processing applications, this service…