Forums

Overview » C# » How to Create PDF Digital Signature with C#
Reply

How to Create PDF Digital Signature with C#

Lemon Brown
Member



Since: 15 Sep 2011
Posts: 89
Posted 15 Sep 2011 12:42:37

Digital signature exists in data information with electronic format. It is used to distinguish singer's identity and demonstrate that the singer approve information included in data.

Actually, digital signature is similar to signature written on paper but it uses public key encryption technology to distinguish data information. It can ensure completeness of data when sending, verify sender indentity and prevent repudiation in trade.

Digital Signature is often used in PDF document. And I will introduce the method to create PDF digital signature with C#.

In this method, a component, Spire.PDF is used. Before using the following code, please download and install it. Then add DLL file in project.

Download Spire.PDF here.

Using the Code:

namespace DigitalSignature  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //Create a pdf document.  
            PdfNewDocument doc = new PdfNewDocument();  
   
            // Create one page  
            PdfPageBase page = doc.Pages.Add();  
   
            //Draw the page  
            DrawPage(page);  
   
            String pfxPath = @"Demo.pfx";  
            PdfCertificate cert = new PdfCertificate(pfxPath, "e-iceblue");  
            PdfSignature signature = new PdfSignature(doc, page, cert, "demo");  
            signature.ContactInfo = "Harry Hu";  
            signature.Certificated = true;  
            signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill;  
   
            //Save pdf file.  
            doc.Save("DigitalSignature.pdf");  
            doc.Close();  
   
            //Launching the Pdf file.  
            System.Diagnostics.Process.Start("DigitalSignature.pdf");  
        }  
   
        private static void DrawPage(PdfPageBase page)  
        {  
            float pageWidth = page.Canvas.ClientSize.Width;  
            float y = 0;  
   
            //page header  
            PdfPen pen1 = new PdfPen(Color.LightGray, 1f);  
            PdfBrush brush1 = new PdfSolidBrush(Color.LightGray);  
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 8f, FontStyle.Italic));  
            PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Right);  
            String text = "Demo of Spire.Pdf";  
            page.Canvas.DrawString(text, font1, brush1, pageWidth, y, format1);  
            SizeF size = font1.MeasureString(text, format1);  
            y = y + size.Height + 1;  
            page.Canvas.DrawLine(pen1, 0, y, pageWidth, y);  
   
            //title  
            y = y + 5;  
            PdfBrush brush2 = new PdfSolidBrush(Color.Black);  
            PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial", 16f, FontStyle.Bold));  
            PdfStringFormat format2 = new PdfStringFormat(PdfTextAlignment.Center);  
            format2.CharacterSpacing = 1f;  
            text = "Summary of Science";  
            page.Canvas.DrawString(text, font2, brush2, pageWidth / 2, y, format2);  
            size = font2.MeasureString(text, format2);  
            y = y + size.Height + 6;  
   
            //icon  
            PdfImage image = PdfImage.FromFile(@"Wikipedia_Science.png");  
            page.Canvas.DrawImage(image, new PointF(pageWidth - image.PhysicalDimension.Width, y));  
            float imageLeftSpace = pageWidth - image.PhysicalDimension.Width - 2;  
            float imageBottom = image.PhysicalDimension.Height + y;  
   
            //refenrence content  
            PdfTrueTypeFont font3 = new PdfTrueTypeFont(new Font("Arial", 9f));  
            PdfStringFormat format3 = new PdfStringFormat();  
            format3.ParagraphIndent = font3.Size * 2;  
            format3.MeasureTrailingSpaces = true;  
            format3.LineSpacing = font3.Size * 1.5f;  
            String text1 = "(All text and picture from ";  
            String text2 = "Wikipedia";  
            String text3 = ", the free encyclopedia)";  
            page.Canvas.DrawString(text1, font3, brush2, 0, y, format3);  
   
            size = font3.MeasureString(text1, format3);  
            float x1 = size.Width;  
            format3.ParagraphIndent = 0;  
            PdfTrueTypeFont font4 = new PdfTrueTypeFont(new Font("Arial", 9f, FontStyle.Underline));  
            PdfBrush brush3 = PdfBrushes.Blue;  
            page.Canvas.DrawString(text2, font4, brush3, x1, y, format3);  
            size = font4.MeasureString(text2, format3);  
            x1 = x1 + size.Width;  
   
            page.Canvas.DrawString(text3, font3, brush2, x1, y, format3);  
            y = y + size.Height;  
   
            //content  
            PdfStringFormat format4 = new PdfStringFormat();  
            text = System.IO.File.ReadAllText(@"Summary_of_Science.txt");  
            PdfTrueTypeFont font5 = new PdfTrueTypeFont(new Font("Arial", 10f));  
            format4.LineSpacing = font5.Size * 1.5f;  
            PdfStringLayouter textLayouter = new PdfStringLayouter();  
            float imageLeftBlockHeight = imageBottom - y;  
            PdfStringLayoutResult result  
                = textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBlockHeight));  
            if (result.ActualSize.Height < imageBottom - y)  
            {  
                imageLeftBlockHeight = imageLeftBlockHeight + result.LineHeight;  
                result = textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBl    kHeight));  
            }  
            foreach (LineInfo line in result.Lines)  
            {  
                page.Canvas.DrawString(line.Text, font5, brush2, 0, y, format4);  
                y = y + result.LineHeight;  
            }  
            PdfTextWidget textWidget = new PdfTextWidget(result.Remainder, font5, brush2);  
            PdfTextLayout textLayout = new PdfTextLayout();  
            textLayout.Break = PdfLayoutBreakType.FitPage;  
            textLayout.Layout = PdfLayoutType.Paginate;  
            RectangleF bounds = new RectangleF(new PointF(0, y), page.Canvas.ClientSize);  
            textWidget.StringFormat = format4;  
            textWidget.Draw(page, bounds, textLayout);  
        }  
    }  
}

Edited by - Lemon Brown on 15 Sep 2011  12:47:53

Digital signature exists in data information with electronic format. It is used to distinguish singer's identity and demonstrate that the singer approve information included in data.

Actually, digital signature is similar to signature written on paper but it uses public key encryption technology to distinguish data information. It can ensure completeness of data when sending, verify sender indentity and prevent repudiation in trade.

Digital Signature is often used in PDF document. And I will introduce the method to create PDF digital signature with C#.

In this method, a component, Spire.PDF is used. Before using the following code, please download and install it. Then add DLL file in project.

Download Spire.PDF here.

Using the Code:

namespace DigitalSignature  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            //Create a pdf document.  
            PdfNewDocument doc = new PdfNewDocument();  
   
            // Create one page  
            PdfPageBase page = doc.Pages.Add();  
   
            //Draw the page  
            DrawPage(page);  
   
            String pfxPath = @"Demo.pfx";  
            PdfCertificate cert = new PdfCertificate(pfxPath, "e-iceblue");  
            PdfSignature signature = new PdfSignature(doc, page, cert, "demo");  
            signature.ContactInfo = "Harry Hu";  
            signature.Certificated = true;  
            signature.DocumentPermissions = PdfCertificationFlags.AllowFormFill;  
   
            //Save pdf file.  
            doc.Save("DigitalSignature.pdf");  
            doc.Close();  
   
            //Launching the Pdf file.  
            System.Diagnostics.Process.Start("DigitalSignature.pdf");  
        }  
   
        private static void DrawPage(PdfPageBase page)  
        {  
            float pageWidth = page.Canvas.ClientSize.Width;  
            float y = 0;  
   
            //page header  
            PdfPen pen1 = new PdfPen(Color.LightGray, 1f);  
            PdfBrush brush1 = new PdfSolidBrush(Color.LightGray);  
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 8f, FontStyle.Italic));  
            PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Right);  
            String text = "Demo of Spire.Pdf";  
            page.Canvas.DrawString(text, font1, brush1, pageWidth, y, format1);  
            SizeF size = font1.MeasureString(text, format1);  
            y = y + size.Height + 1;  
            page.Canvas.DrawLine(pen1, 0, y, pageWidth, y);  
   
            //title  
            y = y + 5;  
            PdfBrush brush2 = new PdfSolidBrush(Color.Black);  
            PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Arial", 16f, FontStyle.Bold));  
            PdfStringFormat format2 = new PdfStringFormat(PdfTextAlignment.Center);  
            format2.CharacterSpacing = 1f;  
            text = "Summary of Science";  
            page.Canvas.DrawString(text, font2, brush2, pageWidth / 2, y, format2);  
            size = font2.MeasureString(text, format2);  
            y = y + size.Height + 6;  
   
            //icon  
            PdfImage image = PdfImage.FromFile(@"Wikipedia_Science.png");  
            page.Canvas.DrawImage(image, new PointF(pageWidth - image.PhysicalDimension.Width, y));  
            float imageLeftSpace = pageWidth - image.PhysicalDimension.Width - 2;  
            float imageBottom = image.PhysicalDimension.Height + y;  
   
            //refenrence content  
            PdfTrueTypeFont font3 = new PdfTrueTypeFont(new Font("Arial", 9f));  
            PdfStringFormat format3 = new PdfStringFormat();  
            format3.ParagraphIndent = font3.Size * 2;  
            format3.MeasureTrailingSpaces = true;  
            format3.LineSpacing = font3.Size * 1.5f;  
            String text1 = "(All text and picture from ";  
            String text2 = "Wikipedia";  
            String text3 = ", the free encyclopedia)";  
            page.Canvas.DrawString(text1, font3, brush2, 0, y, format3);  
   
            size = font3.MeasureString(text1, format3);  
            float x1 = size.Width;  
            format3.ParagraphIndent = 0;  
            PdfTrueTypeFont font4 = new PdfTrueTypeFont(new Font("Arial", 9f, FontStyle.Underline));  
            PdfBrush brush3 = PdfBrushes.Blue;  
            page.Canvas.DrawString(text2, font4, brush3, x1, y, format3);  
            size = font4.MeasureString(text2, format3);  
            x1 = x1 + size.Width;  
   
            page.Canvas.DrawString(text3, font3, brush2, x1, y, format3);  
            y = y + size.Height;  
   
            //content  
            PdfStringFormat format4 = new PdfStringFormat();  
            text = System.IO.File.ReadAllText(@"Summary_of_Science.txt");  
            PdfTrueTypeFont font5 = new PdfTrueTypeFont(new Font("Arial", 10f));  
            format4.LineSpacing = font5.Size * 1.5f;  
            PdfStringLayouter textLayouter = new PdfStringLayouter();  
            float imageLeftBlockHeight = imageBottom - y;  
            PdfStringLayoutResult result  
                = textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBlockHeight));  
            if (result.ActualSize.Height < imageBottom - y)  
            {  
                imageLeftBlockHeight = imageLeftBlockHeight + result.LineHeight;  
                result = textLayouter.Layout(text, font5, format4, new SizeF(imageLeftSpace, imageLeftBl    kHeight));  
            }  
            foreach (LineInfo line in result.Lines)  
            {  
                page.Canvas.DrawString(line.Text, font5, brush2, 0, y, format4);  
                y = y + result.LineHeight;  
            }  
            PdfTextWidget textWidget = new PdfTextWidget(result.Remainder, font5, brush2);  
            PdfTextLayout textLayout = new PdfTextLayout();  
            textLayout.Break = PdfLayoutBreakType.FitPage;  
            textLayout.Layout = PdfLayoutType.Paginate;  
            RectangleF bounds = new RectangleF(new PointF(0, y), page.Canvas.ClientSize);  
            textWidget.StringFormat = format4;  
            textWidget.Draw(page, bounds, textLayout);  
        }  
    }  
}

Edited by - Lemon Brown on 15 Sep 2011  12:47:53

Reply to this topic

Message
Reply
Follow us on twitter Subscribe to our RSS feed
Activate your free membership today | Login | Currency