Применение цифровых подписей к PDF-файлам на C# и .NET

Цифровая подпись является важным элементом в процессе обеспечения безопасности и подлинности документов. В этой статье мы рассмотрим, как добавить цифровую подпись в PDF-документ с помощью библиотеки SautinSoft.Pdf в среде разработки C# и .NET. Обратите внимание, что для работы с цифровыми подписями вам понадобится сертификат в формате PFX и пароль к нему. В этом примере используется тестовый сертификат, который необходимо заменить на ваш собственный сертификат для реального использования.

Использование цифровых подписей в PDF-файлах с помощью C# и .NET имеет несколько важных целей и преимуществ:

  • Аутентификация. Цифровая подпись подтверждает подлинность документа и удостоверяет личность подписавшего. Это особенно важно для юридически значимых документов, контрактов и соглашений.
  • Целостность данных. Цифровая подпись гарантирует, что документ не был изменен после подписания. Любые изменения в документе после подписания сделают подпись недействительной.
  • Юридическая сила. Во многих странах цифровые подписи имеют такую же юридическую силу, как и рукописные. Это позволяет использовать их для подписания договоров, соглашений и других юридически значимых документов.
  • Безопасность. Цифровые подписи обеспечивают высокий уровень безопасности, поскольку для защиты данных используются криптографические методы. Это предотвращает подделку и несанкционированное изменение документов.
  • Удобство и экономия времени. Цифровые подписи позволяют подписывать документы удаленно, без необходимости физического присутствия. Это ускоряет процесс подписания и обработки документов.
  • Экономия ресурсов. Использование цифровых подписей снижает потребность в бумажных документах, что экономит ресурсы и сокращает расходы на печать и хранение.

Процесс добавления цифровой подписи состоит из нескольких этапов:

  1. Добавить SautinSoft.PDF from NuGet.
  2. Загрузить PDF document.
  3. Добавить поле подписи.
  4. Создать и настроить нового подписывающего лица..
  5. Подписать PDF-документ.
  6. Сохранить документ.

Входной файл:

Выходной результат:

Полный код

using System;
using System.IO;
using SautinSoft;
using SautinSoft.Pdf;
using SautinSoft.Pdf.Annotations;
using SautinSoft.Pdf.Content;
using SautinSoft.Pdf.Forms;
using SautinSoft.Pdf.Security;

namespace Sample
{
    class Sample
    {
        /// <summary>
        /// Add sign in PDF
        /// </summary>
        /// <remarks>
        /// Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/add-signature.php
        /// </remarks>
        static void Main(string[] args)
        {
            // Before starting this example, please get a free trial key:
            // https://sautinsoft.com/start-for-free/

            // Apply the key here:
            // PdfDocument.SetLicense("...");

            string pdfFile = Path.GetFullPath(@"..\..\..\simple text.pdf");

            var document = PdfDocument.Load(pdfFile);
            {
                // Add a signature field.
                var sig = document.Form.Fields.AddSignature(document.Pages[0], 10, 10, 250, 50);
                // Create new Signer.
                PdfSigner pdfSigner = new PdfSigner(@"..\..\..\sautinsoft.pfx", "123456789");
                // Configure signer.
                pdfSigner.Timestamper = new PdfTimestamper(@"https://tsa.cesnet.cz:5817/tsa");
                pdfSigner.SignatureFormat = PdfSignatureFormat.CAdES;
                pdfSigner.SignatureLevel = PdfSignatureLevel.PAdES_B_LTA;
                pdfSigner.HashAlgorithm = PdfHashAlgorithm.SHA256;
                pdfSigner.Location = "Test workplace";
                pdfSigner.Reason = "Test";
                var im = PdfImage.Load(@"..\..\..\JPEG2.jpg");
                sig.Appearance.Icon = im;
                sig.Appearance.TextPlacement = PdfTextPlacement.TextRightOfIcon;
                // Sign PDF Document.
                var si = sig.Sign(pdfSigner);
                // Save PDF Document.
                document.Save();
            }

            System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(pdfFile) { UseShellExecute = true });
        }
    }
}

Download

Option Infer On

Imports System
Imports System.IO
Imports SautinSoft
Imports SautinSoft.Pdf
Imports SautinSoft.Pdf.Annotations
Imports SautinSoft.Pdf.Content
Imports SautinSoft.Pdf.Forms
Imports SautinSoft.Pdf.Security

Namespace Sample
	Friend Class Sample
		''' <summary>
		''' Add sign in PDF
		''' </summary>
		''' <remarks>
		''' Details: https://sautinsoft.com/products/pdf/help/net/developer-guide/add-signature.php
		''' </remarks>
		Shared Sub Main(ByVal args() As String)
			' Before starting this example, please get a free trial key:
			' https://sautinsoft.com/start-for-free/

			' Apply the key here:
			' PdfDocument.SetLicense("...");

			Dim pdfFile As String = Path.GetFullPath("..\..\..\simple text.pdf")

			Dim document = PdfDocument.Load(pdfFile)
			If True Then
				' Add a signature field.
				Dim sig = document.Form.Fields.AddSignature(document.Pages(0), 10, 10, 250, 50)
				' Create new Signer.
				Dim pdfSigner As New PdfSigner("..\..\..\sautinsoft.pfx", "123456789")
				' Configure signer.
				pdfSigner.Timestamper = New PdfTimestamper("https://tsa.cesnet.cz:5817/tsa")
				pdfSigner.SignatureFormat = PdfSignatureFormat.CAdES
				pdfSigner.SignatureLevel = PdfSignatureLevel.PAdES_B_LTA
				pdfSigner.HashAlgorithm = PdfHashAlgorithm.SHA256
				pdfSigner.Location = "Test workplace"
				pdfSigner.Reason = "Test"
				Dim im = PdfImage.Load("..\..\..\JPEG2.jpg")
				sig.Appearance.Icon = im
				sig.Appearance.TextPlacement = PdfTextPlacement.TextRightOfIcon
				' Sign PDF Document.
				Dim si = sig.Sign(pdfSigner)
				' Save PDF Document.
				document.Save()
			End If

			System.Diagnostics.Process.Start(New System.Diagnostics.ProcessStartInfo(pdfFile) With {.UseShellExecute = True})
		End Sub
	End Class
End Namespace

Download


Если вам нужен пример кода или у вас есть вопрос: напишите нам по адресу support@sautinsoft.ru или спросите в онлайн-чате (правый нижний угол этой страницы) или используйте форму ниже:



Вопросы и предложения всегда приветствуются!

Мы разрабатываем компоненты .Net с 2002 года. Мы знаем форматы PDF, DOCX, RTF, HTML, XLSX и Images. Если вам нужна помощь в создании, изменении или преобразовании документов в различных форматах, мы можем вам помочь. Мы напишем для вас любой пример кода абсолютно бесплатно.