PDF: Как добавить цифровую подпись в PDF-документ?
В этом разделе
PDF-документ можно подписать с помощью цифрового сертификата, который можно получить в доверенном центре сертификации (CA), таком как DigiCert или GlobalSign. Также можно
создать самоподписанный цифровой сертификат
для внутренних целей или в целях тестирования.
VintaSoft Imaging .NET SDK может подписывать PDF-документы с помощью цифрового сертификата. SDK использует технологию "байтового диапазона" для подписи PDF-документов, т.е. SDK вычисляет контрольную сумму для двоичных данных всего документа. Рассчитанная контрольная сумма и цифровая подпись сохраняются в поле подписи интерактивной формы PDF-документа.
Если PDF-документ должен быть подписан с использованием цифровой подписи, необходимо выполнить следующие действия:
- Создайте поле для подписи, в котором будет храниться подпись.
- Определите информацию о цифровом сертификате.
- Добавьте цифровой сертификат в поле подпись.
- Определите внешний вид поля подписи. Этот шаг следует выполнить, если цифровая подпись должна иметь визуальный вид, например, выглядеть как обычный росчерк пера.
- Добавьте поле для подписи в интерактивную форму PDF-документа.
- Добавьте аннотацию, которая представляет поле подписи, в список аннотаций страницы PDF, где должна располагаться подпись.
- Сохраните изменения в PDF-документе - PDF-документ будет подписан во время сохранения документа.
Если PDF-документ должен содержать поле для подписи для дальнейшего подписания документа другим лицом, необходимо выполнить следующие действия:
- Создайте поле для подписи, в котором будет храниться подпись.
- Определите внешний вид поля подписи. Этот шаг следует выполнить, если цифровая подпись должна иметь визуальный вид, например, выглядеть как обычный росчерк пера.
- Добавьте поле для подписи в интерактивную форму PDF-документа.
- Добавьте аннотацию, которая представляет поле подписи, в список аннотаций страницы PDF, где должна располагаться подпись.
- Сохраните изменения в PDF-документе.
Вот C#/VB.NET код, демонстрирующий, как добавить цифровую подпись в PDF-документ:
/// <summary>
/// Signs a PDF or PDF/A document using X509 Certificate.
/// </summary>
/// <param name="inputFilename">The filename of input PDF document.</param>
/// <param name="outputFilename">The filename of output PDF document.</param>
/// <param name="certificate">The X509 certificate.</param>
/// <param name="conformance">PDF/A conformance.</param>
public static void SignDocument(
string inputFilename,
string outputFilename,
X509Certificate2 certificate,
PdfDocumentConformance conformance)
{
// create digital signature helper
PdfPageDigitalSignatureHelper digitalSignatureHelper = new PdfPageDigitalSignatureHelper(certificate, new RectangleF(10, 10, 250, 75));
// set signing reason
digitalSignatureHelper.SigningReason = "Test signing";
// set text
digitalSignatureHelper.SignatureText = string.Format("Digitally signed by\n{0}", digitalSignatureHelper.SignerName);
PdfAConverter pdfAConverter = null;
// if specified PDF/A conformance
if (conformance != PdfDocumentConformance.Undefined)
{
// create PDF/A converter
pdfAConverter = (PdfAConverter)PdfDocumentConverter.Create(conformance);
//pdfAConverter.DefaultCmykIccProfileFilename = "DefaultCMYK.icc";
//pdfAConverter.DefaultRgbIccProfileFilename = "DefaultRGB.icc";
}
// sign PDF document and save PDF document to the output file
digitalSignatureHelper.SignDocument(inputFilename, outputFilename, 0, pdfAConverter);
}
''' <summary>
''' Signs a PDF or PDF/A document using X509 Certificate.
''' </summary>
''' <param name="inputFilename">The filename of input PDF document.</param>
''' <param name="outputFilename">The filename of output PDF document.</param>
''' <param name="certificate">The X509 certificate.</param>
''' <param name="conformance">PDF/A conformance.</param>
Public Shared Sub SignDocument(inputFilename As String, outputFilename As String, _
certificate As X509Certificate2, conformance As PdfDocumentConformance)
' create digital signature helper
Dim digitalSignatureHelper As New PdfPageDigitalSignatureHelper(certificate, New RectangleF(10, 10, 250, 75))
' set signing reason
digitalSignatureHelper.SigningReason = "Test signing"
' set text
digitalSignatureHelper.SignatureText = String.Format("Digitally signed by" & vbLf & "{0}", digitalSignatureHelper.SignerName)
Dim pdfAConverter As PdfAConverter = Nothing
' if specified PDF/A conformance
If conformance <> PdfDocumentConformance.Undefined Then
' create PDF/A converter
'pdfAConverter.DefaultCmykIccProfileFilename = "DefaultCMYK.icc";
'pdfAConverter.DefaultRgbIccProfileFilename = "DefaultRGB.icc";
pdfAConverter = DirectCast(PdfDocumentConverter.Create(conformance), PdfAConverter)
End If
' sign PDF document and save PDF document to the output file
digitalSignatureHelper.SignDocument(inputFilename, outputFilename, 0, pdfAConverter)
End Sub
Вот C#/VB.NET код, демонстрирующий, как добавить цифровую подпись с меткой времени в PDF-документ:
using System.Drawing;
using System.Security.Cryptography.X509Certificates;
using Vintasoft.Imaging.Pdf;
/// <summary>
/// Adds digital signature with timestamp to a PDF page.
/// </summary>
public class PdfPageDigitalSignatureHelper_Timestamp
{
public static void Run()
{
// get the X509 certificate from .pfx-file
using (X509Certificate2 certificate = new X509Certificate2("TestCertificate.pfx", "test"))
{
// create a helper that alows to add digital signature to a PDF document
PdfPageDigitalSignatureHelper digitalSignatureHelper =
new PdfPageDigitalSignatureHelper(certificate, new RectangleF(20, 20, 250, 100));
// set the reason for signing
digitalSignatureHelper.SigningReason = "Approve document";
// set the name of image file that defines the signature appearance
digitalSignatureHelper.SignatureImageFilename = "SignatureImage.svg";
// set the URL to the timestamp server
digitalSignatureHelper.TimestampServerUrl = "http://timestamp.comodoca.com/";
// add digital signature to the first PDF page, sign PDF document and save PDF document to the output file
digitalSignatureHelper.SignDocument("TestDocumentToSign.pdf", "TestDocumentToSign-signed.pdf", 0);
}
}
}
Imports System.Drawing
Imports System.Security.Cryptography.X509Certificates
Imports Vintasoft.Imaging.Pdf
''' <summary>
''' Adds digital signature with timestamp to a PDF page.
''' </summary>
Public Class PdfPageDigitalSignatureHelper_Timestamp
Public Shared Sub Run()
' get the X509 certificate from .pfx-file
Using certificate As New X509Certificate2("TestCertificate.pfx", "test")
' create a helper that alows to add digital signature to a PDF document
Dim digitalSignatureHelper As New PdfPageDigitalSignatureHelper(certificate, New RectangleF(20, 20, 250, 100))
' set the reason for signing
digitalSignatureHelper.SigningReason = "Approve document"
' set the name of image file that defines the signature appearance
digitalSignatureHelper.SignatureImageFilename = "SignatureImage.svg"
' set the URL to the timestamp server
digitalSignatureHelper.TimestampServerUrl = "http://timestamp.comodoca.com/"
' add digital signature to the first PDF page, sign PDF document and save PDF document to the output file
digitalSignatureHelper.SignDocument("TestDocumentToSign.pdf", "TestDocumentToSign-signed.pdf", 0)
End Using
End Sub
End Class
Пожалуйста, ознакомьтесь с тем, как проверить цифровые подписи в PDF-документе
здесь
.
Пожалуйста, прочтите, как удалить цифровую подпись из PDF-документа
здесь
.