Default.aspx
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="RadPdf" Namespace="RadPdf.Web.UI" TagPrefix="radPdf" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <script type="text/javascript">
        function initRadPdf()
        {
            // Get id
            var id = "<%= PdfWebControl1.ClientID%>";
            // Get api instance
            var api = new PdfWebControlApi(id);
            // Function for finding object by customData
            function findObject(s)
            {
                for( var i = 1; i <= api.getPageCount(); i++ )
                {
                    var p = api.getPage(i);
                    for( var j = 0; j < p.getObjectCount(); j++ )
                    {
                        var o = p.getObject(j);
                        if( o.getProperties()["customData"] == s )
                        {
                            return o;
                        }
                    }
                }
            }
            // Attach listeners
            api.addEventListener(
            api.addEventListener(
                "objectChanged", 
                function(evt) {
                    // Get properties of changed object
                    var props = evt.obj.getProperties();
                    // If the popup signature was changed (or signed)
                    if( "MyPopupSignature" == props.customData )
                    {
                        // Change popup hint if signed
                        var msg = props.isSigned ? "thank you for signing!" : "click above to sign via popup"
                        // Update hint object
                        findObject("MyPopupHint").setProperties( { "text" : msg } );
                    }
                }
                );
            api.addEventListener(
                "objectClicked", 
                function(evt) {
                    // If this is our special image signature object
                    if( "MyImageSignature" == evt.obj.getProperties()["customData"] )
                    {
                        // Set the image via key
                        evt.obj.setImage("MyImageSignature");
                    }
                }
                );
        }
    </script>
    <title>RAD PDF Sample</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <radPdf:PdfWebControl id="PdfWebControl1" runat="server" height="600px" width="100%" OnClientLoad="initRadPdf();"
             HideToolsMenu="true" HideToolsTabs="true" HideObjectPropertiesBar="true" HideBookmarks="true" HideThumbnails="true" />
    </div>
    </form>
</body>
</html>
Default.aspx.cs
using System;
using System.Drawing;
using System.IO;
using System.Web.UI.HtmlControls;
using RadPdf.Data.Document;
using RadPdf.Data.Document.Common;
using RadPdf.Data.Document.Objects;
using RadPdf.Data.Document.Objects.FormFields;
using RadPdf.Data.Document.Objects.Shapes;
using RadPdf.Data.Document.Pages;
partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Create new document for DEMO
            this.PdfWebControl1.CreateDocument("Document_Name", 1, PdfPageSize.Letter, PdfDocumentSettings.FlattenForm);
            // NOTE: To use PdfWebControlLite instead, change <radPdf:PdfWebControl ... to <radPdf:PdfWebControlLite ... in the .aspx file and replace the above line with:
            // RadPdf.Lite.PdfLiteSettings settings = new RadPdf.Lite.PdfLiteSettings();
            // settings.DocumentSettings = PdfDocumentSettings.FlattenForm;
            // this.PdfWebControl1.CreateDocument("Document_Name", 1, PdfPageSize.Letter, settings);
            // Setup document editor
            PdfDocumentEditor editor = this.PdfWebControl1.EditDocument();
            int dpi = Convert.ToInt32(editor.Document.Dpi);
            // Create custom font form field example (It will be flattened on save. Replace "PdfDocumentSettings.FlattenForm" with "PdfDocumentSettings.None" above to prevent this.)
            PdfTextField field = editor.Pages[0].CreateObject(PdfObjectCreatable.FormFieldText) as PdfTextField;
            field.Top = dpi;
            field.Left = 3 * dpi / 4;
            field.Width = dpi * 2;
            field.Height = dpi / 2;
            field.Font.Name = "Signature";
            field.Font.Size = dpi / 4;
            field.Deletable = false;
            field.Duplicatable = false;
            field.Moveable = false;
            field.Name = "MySignatureField";
            field.Resizable = false;
            field.Stylable = false;
            // Create image example
            PdfImageShape image = editor.Pages[0].CreateObject(PdfObjectCreatable.ShapeImage) as PdfImageShape;
            image.Top = dpi;
            image.Left = 13 * dpi / 4;
            image.Width = dpi * 2;
            image.Height = dpi / 2;
            image.CustomData = "MyImageSignature";
            image.Deletable = false;
            image.Duplicatable = false;
            image.Moveable = false;
            image.Resizable = false;
            image.Stylable = false;
            image.ImageData = File.ReadAllBytes(Server.MapPath(@"/demo/images/empty.gif"));
            // Create signature shape example
            PdfSignatureShape signature = editor.Pages[0].CreateObject(PdfObjectCreatable.ShapeSignature) as PdfSignatureShape;
            signature.Top = dpi;
            signature.Left = 23 * dpi / 4;
            signature.Width = dpi * 2;
            signature.Height = dpi / 2;
            signature.Border = new PdfBorder(2, PdfBorderStyle.Solid, new PdfColor(Color.Black));
            signature.PenColor = new PdfColor(Color.Blue);
            signature.PenWidth = 2;
            // Create signature shape popup example
            PdfSignatureShape signaturePopup = editor.Pages[0].CreateObject(PdfObjectCreatable.ShapeSignature) as PdfSignatureShape;
            signaturePopup.Top = 2 * dpi;
            signaturePopup.Left = 13 * dpi / 4;
            signaturePopup.Width = dpi * 2;
            signaturePopup.Height = dpi / 2;
            signaturePopup.Border = new PdfBorder(2, PdfBorderStyle.Solid, new PdfColor(Color.Black));
            signaturePopup.CustomData = "MyPopupSignature";
            signaturePopup.Font.Name = "Signature";
            signaturePopup.Font.Size = dpi / 4;
            signaturePopup.PenColor = new PdfColor(Color.Blue);
            signaturePopup.PenWidth = 2;
            signaturePopup.PopupInput = true;
            // Create hints
            PdfTextShape fHint = editor.Pages[0].CreateObject(PdfObjectCreatable.ShapeText) as PdfTextShape;
            fHint.Top = 5 + 3 * dpi / 2;
            fHint.Left = 3 * dpi / 4;
            fHint.Width = dpi * 2;
            fHint.Height = dpi / 4;
            fHint.Font.Name = "Arial";
            fHint.Font.Size = dpi / 8;
            fHint.Changeable = false;
            fHint.Deletable = false;
            fHint.Duplicatable = false;
            fHint.HideFocusOutline = true;
            fHint.Moveable = false;
            fHint.OutputToPDF = false;
            fHint.Print = false;
            fHint.Resizable = false;
            fHint.Stylable = false;
            fHint.Text = "type a signature";
            fHint.Wrappable = false;
            PdfTextShape iHint = editor.Pages[0].CreateObject(PdfObjectCreatable.ShapeText) as PdfTextShape;
            iHint.Top = 5 + 3 * dpi / 2;
            iHint.Left = 13 * dpi / 4;
            iHint.Width = dpi * 2;
            iHint.Height = dpi / 4;
            iHint.Font.Name = "Arial";
            iHint.Font.Size = dpi / 8;
            iHint.Changeable = false;
            iHint.Deletable = false;
            iHint.Duplicatable = false;
            iHint.HideFocusOutline = true;
            iHint.Moveable = false;
            iHint.OutputToPDF = false;
            iHint.Print = false;
            iHint.Resizable = false;
            iHint.Stylable = false;
            iHint.Text = "click above to sign via image";
            iHint.Wrappable = false;
            PdfTextShape sHint = editor.Pages[0].CreateObject(PdfObjectCreatable.ShapeText) as PdfTextShape;
            sHint.Top = 5 + 3 * dpi / 2;
            sHint.Left = 23 * dpi / 4;
            sHint.Width = dpi * 2;
            sHint.Height = dpi / 4;
            sHint.Font.Name = "Arial";
            sHint.Font.Size = dpi / 8;
            sHint.Changeable = false;
            sHint.Deletable = false;
            sHint.Duplicatable = false;
            sHint.HideFocusOutline = true;
            sHint.Moveable = false;
            sHint.OutputToPDF = false;
            sHint.Print = false;
            sHint.Resizable = false;
            sHint.Stylable = false;
            sHint.Text = "draw a signature with your mouse";
            sHint.Wrappable = false;
            PdfTextShape pHint = editor.Pages[0].CreateObject(PdfObjectCreatable.ShapeText) as PdfTextShape;
            pHint.Top = 5 + 5 * dpi / 2;
            pHint.Left = 13 * dpi / 4;
            pHint.Width = dpi * 2;
            pHint.Height = dpi / 4;
            pHint.CustomData = "MyPopupHint";
            pHint.Font.Name = "Arial";
            pHint.Font.Size = dpi / 8;
            pHint.Changeable = false;
            pHint.Deletable = false;
            pHint.Duplicatable = false;
            pHint.HideFocusOutline = true;
            pHint.Moveable = false;
            pHint.OutputToPDF = false;
            pHint.Print = false;
            pHint.Resizable = false;
            pHint.Stylable = false;
            pHint.Text = "click above to sign via popup";
            pHint.Wrappable = false;
            // Save changes
            editor.Save();
        }
    }
}
web.config
<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="RadPdfConnectionString" value="Server=.\SQLExpress;Database=RadPdf;Trusted_Connection=Yes;"/>
    <add key="RadPdfIntegrationProvider" value="SignaturesPdfIntegrationProvider,App_Code"/>
    <add key="RadPdfLicenseKey" value="DEMO"/>
  </appSettings>
  <system.web>
    <httpHandlers>
      <add path="RadPdf.axd" verb="GET,POST" type="RadPdf.Web.HttpHandler.PdfHttpHandler"/>
    </httpHandlers>
  </system.web>
  <!--
    The system.webServer element is for use with IIS 7 (and later) when Managed Pipeline Mode is set to "Integrated".
    It will be ignored in other versions of IIS.
    -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <add path="RadPdf.axd" verb="GET,POST" name="PdfHttpHandler" preCondition="integratedMode" type="RadPdf.Web.HttpHandler.PdfHttpHandler"/>
    </handlers>
  </system.webServer>
</configuration>
App_Code\SignaturesPdfIntegrationProvider.cs
using System;
using System.Drawing;
using System.Web;
using RadPdf.Data.Document;
using RadPdf.Data.Document.Common;
using RadPdf.Data.Document.Objects;
using RadPdf.Data.Document.Objects.Shapes;
using RadPdf.Data.Document.Pages;
using RadPdf.Integration;
public class SignaturesPdfIntegrationProvider : PdfIntegrationProvider
{
    public SignaturesPdfIntegrationProvider()
        : base()
    {
        // Add the signature font of our choice.
        // This example uses Herr Von Muellerhoff which is an open source font (SIL Open Font License, Version 1.1).
        // Herr Von Muellerhoff must be installed on your server. The TrueType file is provided by Google here:
        // https://github.com/google/fonts/tree/master/ofl/herrvonmuellerhoff
        this.FontResources.Add(new PdfFontResource("Signature", "Herr Von Muellerhoff, cursive, serif", "Herr Von Muellerhoff"));
    }
    private static void ApplyTimestamp(PdfDocument document, string timestampText)
    {
        const string TimestampCustomData = "timestamp";
        int dpi = Convert.ToInt32(document.Dpi);
        // Add our watermark on each page
        foreach (PdfPage p in document.Pages)
        {
            PdfTextShape timestamp = FindOnPage(p, TimestampCustomData) as PdfTextShape;
            // If not found
            if (null == timestamp)
            {
                timestamp = p.CreateObject(PdfObjectCreatable.ShapeText) as PdfTextShape;
                // Set custom data so we can find it next save and re-use it
                timestamp.CustomData = TimestampCustomData;
            }
            // Set position
            timestamp.Left = 0;
            timestamp.Top = dpi * 3;
            timestamp.Height = dpi / 2;
            timestamp.Width = p.Width;
            timestamp.Rotation = PdfRotation.Rotation0;
            // Set properties
            timestamp.Changeable = false;
            timestamp.Deletable = false;
            timestamp.Duplicatable = false;
            timestamp.HideFocusOutline = true;
            timestamp.Moveable = false;
            timestamp.Resizable = false;
            timestamp.Stylable = false;
            timestamp.Wrappable = true;
            // Set font
            timestamp.Font.Alignment = PdfHorizontalAlignment.AlignCenter;
            timestamp.Font.Color = new PdfColor(Color.Red);
            timestamp.Font.Size = dpi / 3;
            // Set text
            timestamp.Text = timestampText;
        }
    }
    private static PdfObject FindOnPage(PdfPage page, string searchForCustomData)
    {
        foreach (PdfObject o in page.Objects)
        {
            if (o.CustomData == searchForCustomData)
            {
                return o;
            }
        }
        return null;
    }
    public override void OnDocumentInit(DocumentInitEventArgs e)
    {
        base.OnDocumentInit(e);
        //Add web font for client side fall back if Herr Von Muellerhoff isn't installed on clients.
        // (fonts.bunny.net is a more privacy conscious option vs. fonts.googleapis.com)
        e.ExternalStyle = "https://fonts.bunny.net/css?family=Herr+Von+Muellerhoff";
        // Or to use Google Fonts:
        // e.ExternalStyle = "https://fonts.googleapis.com/css?family=Herr+Von+Muellerhoff";
    }
    public override void OnDocumentPrinting(DocumentPrintingEventArgs e)
    {
        base.OnDocumentPrinting(e);
        string timestampText = "Last Printed " + DateTime.UtcNow.ToString();
        ApplyTimestamp(e.Document, timestampText);
    }
    public override void OnDocumentSaving(DocumentSavingEventArgs e)
    {
        base.OnDocumentSaving(e);
        string timestampText = "Last Saved " + DateTime.UtcNow.ToString();
        ApplyTimestamp(e.Document, timestampText);
    }
    public override void OnDocumentSaved(DocumentSavedEventArgs e)
    {
        base.OnDocumentSaved(e);
        // Reload the document client side after saving
        e.ThenReloadDocument = true;
    }
    public override void ProcessObjectDataRequest(PdfDataContext context)
    {
        switch (context.Request.DataKey)
        {
            case "MyImageSignature":
                // Write a file to the response
                // Alternatively, we could also use the .Write method to write data from almost any source (e.g. database, memory, etc.)
                context.Response.WriteFile(HttpContext.Current.Server.MapPath("/demo/images/signature.gif"));
                break;
        }
    }
}
Default.aspx
<%@ Page Language="VB" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<%@ Register Assembly="RadPdf" Namespace="RadPdf.Web.UI" TagPrefix="radPdf" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <script type="text/javascript">
        function initRadPdf()
        {
            // Get id
            var id = "<%= PdfWebControl1.ClientID%>";
            // Get api instance
            var api = new PdfWebControlApi(id);
            // Function for finding object by customData
            function findObject(s)
            {
                for( var i = 1; i <= api.getPageCount(); i++ )
                {
                    var p = api.getPage(i);
                    for( var j = 0; j < p.getObjectCount(); j++ )
                    {
                        var o = p.getObject(j);
                        if( o.getProperties()["customData"] == s )
                        {
                            return o;
                        }
                    }
                }
            }
            // Attach listeners
            api.addEventListener(
            api.addEventListener(
                "objectChanged", 
                function(evt) {
                    // Get properties of changed object
                    var props = evt.obj.getProperties();
                    // If the popup signature was changed (or signed)
                    if( "MyPopupSignature" == props.customData )
                    {
                        // Change popup hint if signed
                        var msg = props.isSigned ? "thank you for signing!" : "click above to sign via popup"
                        // Update hint object
                        findObject("MyPopupHint").setProperties( { "text" : msg } );
                    }
                }
                );
            api.addEventListener(
                "objectClicked", 
                function(evt) {
                    // If this is our special image signature object
                    if( "MyImageSignature" == evt.obj.getProperties()["customData"] )
                    {
                        // Set the image via key
                        evt.obj.setImage("MyImageSignature");
                    }
                }
                );
        }
    </script>
    <title>RAD PDF Sample</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <radPdf:PdfWebControl id="PdfWebControl1" runat="server" height="600px" width="100%" OnClientLoad="initRadPdf();"
             HideToolsMenu="true" HideToolsTabs="true" HideObjectPropertiesBar="true" HideBookmarks="true" HideThumbnails="true" />
    </div>
    </form>
</body>
</html>
Default.aspx.vb
Option Explicit On
Option Strict On
Imports System
Imports System.Drawing
Imports System.IO
Imports System.Web.UI.HtmlControls
Imports RadPdf.Data.Document
Imports RadPdf.Data.Document.Common
Imports RadPdf.Data.Document.Objects
Imports RadPdf.Data.Document.Objects.FormFields
Imports RadPdf.Data.Document.Objects.Shapes
Imports RadPdf.Data.Document.Pages
Partial Class _Default
    Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            ' Create new document for DEMO (It will be flattened on save. Replace PdfDocumentSettings.FlattenForm with PdfDocumentSettings.None to prevent this.)
            Me.PdfWebControl1.CreateDocument("Document_Name", 1, PdfPageSize.Letter, PdfDocumentSettings.FlattenForm)
            ' NOTE: To use PdfWebControlLite instead, change <radPdf:PdfWebControl ... to <radPdf:PdfWebControlLite ... in the .aspx file and replace the above line with:
            ' Dim settings As RadPdf.Lite.PdfLiteSettings = New RadPdf.Lite.PdfLiteSettings()
            ' settings.DocumentSettings = PdfDocumentSettings.FlattenForm
            ' Me.PdfWebControl1.CreateDocument("Document_Name", 1, PdfPageSize.Letter, settings)
            ' Setup document editor
            Dim editor As PdfDocumentEditor = Me.PdfWebControl1.EditDocument()
            Dim dpi as Integer = Convert.ToInt32(editor.Document.Dpi)
            ' Create custom font form field example (It will be flattened on save. Replace "PdfDocumentSettings.FlattenForm" with "PdfDocumentSettings.None" above to prevent this.)
            Dim field As PdfTextField = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.FormFieldText), PdfTextField)
            field.Top = dpi
            field.Left = 3 * dpi \ 4
            field.Width = dpi * 2
            field.Height = dpi \ 2
            field.Font.Name = "Signature"
            field.Font.Size = dpi \ 4
            field.Deletable = False
            field.Duplicatable = False
            field.Moveable = False
            field.Name = "MySignatureField"
            field.Resizable = False
            field.Stylable = False
            ' Create image example
            Dim image As PdfImageShape = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.ShapeImage), PdfImageShape)
            image.Top = dpi
            image.Left = 13 * dpi \ 4
            image.Width = dpi * 2
            image.Height = dpi \ 2
            image.CustomData = "MyImageSignature"
            image.Deletable = False
            image.Duplicatable = False
            image.Moveable = False
            image.Resizable = False
            image.Stylable = False
            image.ImageData = File.ReadAllBytes(Server.MapPath("/demo/images/empty.gif"))
            ' Create signature shape example
            Dim signature As PdfSignatureShape = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.ShapeSignature), PdfSignatureShape)
            signature.Top = dpi
            signature.Left = 23 * dpi \ 4
            signature.Width = dpi * 2
            signature.Height = dpi \ 2
            signature.Border = new PdfBorder(2, PdfBorderStyle.Solid, new PdfColor(Color.Black))
            signature.PenColor = new PdfColor(Color.Blue)
            signature.PenWidth = 2
            ' Create signature shape popup example
            Dim signaturePopup As PdfSignatureShape = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.ShapeSignature), PdfSignatureShape)
            signaturePopup.Top = 2 * dpi
            signaturePopup.Left = 13 * dpi \ 4
            signaturePopup.Width = dpi * 2
            signaturePopup.Height = dpi \ 2
            signaturePopup.Border = new PdfBorder(2, PdfBorderStyle.Solid, new PdfColor(Color.Black))
            signaturePopup.CustomData = "MyPopupSignature"
            signaturePopup.Font.Name = "Signature"
            signaturePopup.Font.Size = dpi / 4
            signaturePopup.PenColor = new PdfColor(Color.Blue)
            signaturePopup.PenWidth = 2
            signaturePopup.PopupInput = true
            ' Create hints
            Dim fHint As PdfTextShape = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.ShapeText), PdfTextShape)
            fHint.Top = 3 * dpi \ 2
            fHint.Left = 3 * dpi \ 4
            fHint.Width = dpi * 2
            fHint.Height = dpi \ 4
            fHint.Font.Name = "Arial"
            fHint.Font.Size = dpi \ 8
            fHint.Changeable = False
            fHint.Deletable = False
            fHint.Duplicatable = False
            fHint.HideFocusOutline = True
            fHint.Moveable = False
            fHint.OutputToPDF = False
            fHint.Print = False
            fHint.Resizable = False
            fHint.Stylable = False
            fHint.Text = "type a signature"
            fHint.Wrappable = False
            Dim iHint As PdfTextShape = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.ShapeText), PdfTextShape)
            iHint.Top = 3 * dpi \ 2
            iHint.Left = 13 * dpi \ 4
            iHint.Width = dpi * 2
            iHint.Height = dpi \ 4
            iHint.Font.Name = "Arial"
            iHint.Font.Size = dpi \ 8
            iHint.Changeable = False
            iHint.Deletable = False
            iHint.Duplicatable = False
            iHint.HideFocusOutline = True
            iHint.Moveable = False
            iHint.OutputToPDF = False
            iHint.Print = False
            iHint.Resizable = False
            iHint.Stylable = False
            iHint.Text = "click above to sign via image"
            iHint.Wrappable = False
            Dim sHint As PdfTextShape = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.ShapeText), PdfTextShape)
            sHint.Top = 3 * dpi \ 2
            sHint.Left = 23 * dpi \ 4
            sHint.Width = dpi * 2
            sHint.Height = dpi \ 4
            sHint.Font.Name = "Arial"
            sHint.Font.Size = dpi \ 8
            sHint.Changeable = False
            sHint.Deletable = False
            sHint.Duplicatable = False
            sHint.HideFocusOutline = True
            sHint.Moveable = False
            sHint.OutputToPDF = False
            sHint.Print = False
            sHint.Resizable = False
            sHint.Stylable = False
            sHint.Text = "draw a signature with your mouse"
            sHint.Wrappable = False
            Dim pHint As PdfTextShape = DirectCast(editor.Pages(0).CreateObject(PdfObjectCreatable.ShapeText), PdfTextShape)
            pHint.Top = 5 + 5 * dpi \ 2
            pHint.Left = 13 * dpi \ 4
            pHint.Width = dpi * 2
            pHint.Height = dpi \ 4
            pHint.CustomData = "MyPopupHint"
            pHint.Font.Name = "Arial"
            pHint.Font.Size = dpi / 8
            pHint.Changeable = False
            pHint.Deletable = False
            pHint.Duplicatable = False
            pHint.HideFocusOutline = True
            pHint.Moveable = False
            pHint.OutputToPDF = False
            pHint.Print = False
            pHint.Resizable = False
            pHint.Stylable = False
            pHint.Text = "click above to sign via popup"
            pHint.Wrappable = False
            ' Save changes
            editor.Save()
        End If
    End Sub
End Class
web.config
<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="RadPdfConnectionString" value="Server=.\SQLExpress;Database=RadPdf;Trusted_Connection=Yes;"/>
    <add key="RadPdfIntegrationProvider" value="SignaturesPdfIntegrationProvider,App_Code"/>
    <add key="RadPdfLicenseKey" value="DEMO"/>
  </appSettings>
  <system.web>
    <httpHandlers>
      <add path="RadPdf.axd" verb="GET,POST" type="RadPdf.Web.HttpHandler.PdfHttpHandler"/>
    </httpHandlers>
  </system.web>
  <!--
    The system.webServer element is for use with IIS 7 (and later) when Managed Pipeline Mode is set to "Integrated".
    It will be ignored in other versions of IIS.
    -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <add path="RadPdf.axd" verb="GET,POST" name="PdfHttpHandler" preCondition="integratedMode" type="RadPdf.Web.HttpHandler.PdfHttpHandler"/>
    </handlers>
  </system.webServer>
</configuration>
App_Code\SignaturesPdfIntegrationProvider.vb
Option Explicit On
Option Strict On
Imports System
Imports System.Drawing
Imports System.Web
Imports RadPdf.Data.Document
Imports RadPdf.Data.Document.Common
Imports RadPdf.Data.Document.Objects
Imports RadPdf.Data.Document.Objects.Shapes
Imports RadPdf.Data.Document.Pages
Imports RadPdf.Integration
Public Class SignaturesPdfIntegrationProvider
    Inherits PdfIntegrationProvider
    Public Sub New()
        MyBase.New()
        ' Add the signature font of our choice.
        ' This example uses Herr Von Muellerhoff which is an open source font (SIL Open Font License, Version 1.1).
        ' Herr Von Muellerhoff must be installed on your server. The TrueType file is provided by Google here:
        ' https://github.com/google/fonts/tree/master/ofl/herrvonmuellerhoff
        Me.FontResources.Add(new PdfFontResource("Signature", "Herr Von Muellerhoff, cursive, serif", "Herr Von Muellerhoff"))
    End Sub
    Private Shared Sub ApplyTimestamp(ByVal document As PdfDocument, ByVal timestampText As String)
        Const TimestampCustomData As String = "timestamp"
        Dim dpi As Integer = Convert.ToInt32(document.Dpi)
        ' Add our watermark on each page
        For Each p As PdfPage In document.Pages
            Dim timestamp As PdfTextShape = DirectCast(FindOnPage(p, TimestampCustomData), PdfTextShape)
            ' If not found
            If (timestamp Is Nothing) Then
                timestamp = DirectCast(p.CreateObject(PdfObjectCreatable.ShapeText), PdfTextShape)
                ' Set custom data so we can find it next save and re-use it
                timestamp.CustomData = TimestampCustomData
            End If
            ' Set position
            timestamp.Left = 0
            timestamp.Top = dpi * 3
            timestamp.Height = dpi \ 2
            timestamp.Width = p.Width
            timestamp.Rotation = PdfRotation.Rotation0
            ' Set properties
            timestamp.Changeable = False
            timestamp.Deletable = False
            timestamp.Duplicatable = False
            timestamp.HideFocusOutline = True
            timestamp.Moveable = False
            timestamp.Resizable = False
            timestamp.Stylable = False
            timestamp.Wrappable = True
            ' Set font
            timestamp.Font.Alignment = PdfHorizontalAlignment.AlignCenter
            timestamp.Font.Color = new PdfColor(Color.Red)
            timestamp.Font.Size = dpi \ 3
            ' Set text
            timestamp.Text = timestampText
        Next
    End Sub
    Private Shared Function FindOnPage(ByVal page As PdfPage, ByVal searchForCustomData As String) As PdfObject
        For Each o As PdfObject In page.Objects
            If (o.CustomData = searchForCustomData) Then
                Return o
            End If
        Next
        Return Nothing
    End Function
    Public Overrides Sub OnDocumentInit(ByVal e As DocumentInitEventArgs)
        MyBase.OnDocumentInit(e)
        'Add Web font for client side
        ' (fonts.bunny.net is a more privacy conscious option vs. fonts.googleapis.com)
        e.ExternalStyle = "https://fonts.bunny.net/css?family=Herr+Von+Muellerhoff"
        ' Or to use Google Fonts:
        ' e.ExternalStyle = "https://fonts.googleapis.com/css?family=Herr+Von+Muellerhoff"
    End Sub
    Public Overrides Sub OnDocumentPrinting(ByVal e As DocumentPrintingEventArgs)
        MyBase.OnDocumentPrinting(e)
        Dim timestampText As String = "Last Printed " & DateTime.UtcNow.ToString()
        ApplyTimestamp(e.Document, timestampText)
    End Sub
    Public Overrides Sub OnDocumentSaving(ByVal e As DocumentSavingEventArgs)
        MyBase.OnDocumentSaving(e)
        Dim timestampText As String = "Last Saved " & DateTime.UtcNow.ToString()
        ApplyTimestamp(e.Document, timestampText)
    End Sub
    Public Overrides Sub OnDocumentSaved(ByVal e As DocumentSavedEventArgs)
        MyBase.OnDocumentSaved(e)
        ' Reload the document client side after saving
        e.ThenReloadDocument = true
    End Sub
    Public Overrides Sub ProcessObjectDataRequest(ByVal context As PdfDataContext)
        Select context.Request.DataKey
            Case "MyImageSignature"
                ' Write a file to the response
                ' Alternatively, we could also use the .Write method to write data from almost any source (e.g. database, memory, etc.)
                context.Response.WriteFile(HttpContext.Current.Server.MapPath("/demo/images/signature.gif"))
        End Select
    End Sub
End Class