이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.

C# 및 VB.NET에서 PDF 문서에 서명

디지털 서명은 사용자의 신원과 PDF 문서의 내용을 인증하는 데 사용됩니다. 서명을 통해 PDF 문서가 다음을 증명할 수 있습니다.

  • 서명 이후 수정되지 않았습니다.
  • 특정인의 디지털 서명이 있었습니다.

C# 및 VB.NET에서 PDF에 디지털 서명 추가

PDF 문서에 서명하기 위한 .NET 라이브러리

.NET Framework 및 .NET Core 애플리케이션에서 PDF 문서에 서명하려면 Docotic.Pdf 라이브러리를 사용하세요. 라이브러리의 바이너리를 다운로드하거나 NuGet 패키지를 사용할 수 있습니다. 평가 모드 제한 없이 라이브러리를 사용해 보려면 여기에서 시간 제한이 있는 무료 라이센스 키를 얻을 수 있습니다.

Docotic.Pdf는 다양한 다이제스트 알고리즘(SHA-1, SHA-256, SHA-384, SHA-512, RIPEMD-160)과 다양한 서명 형식(adbe.pkcs7.detached 또는 ETSI.CAdES.detached)을 사용하여 디지털 서명을 생성할 수 있습니다. . 라이브러리에서는 PDF 서명을 확인할 수도 있습니다.

C#에서 PDF에 디지털 서명 추가

PDF 문서에 서명하려면 유효한 인증 기관(CA)에서 발급한 디지털 PKCS#12 인증서(.pfx 또는 .p12 파일)가 필요합니다. 다음은 C#에서 PDF 문서에 서명하는 방법을 보여주는 기본 샘플입니다:

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("document_to_sign.pdf"))
{
    var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
    {
        DigestAlgorithm = PdfDigestAlgorithm.Sha256,
        Format = PdfSignatureFormat.Pkcs7Detached,
        Reason = "Testing digital signatures",
        Location = "My workplace",
        ContactInfo = "support@example.com"
    };

    pdf.SignAndSave(options, "signed.pdf");
}

"your_cert.p12" 및 "your_cert_password"를 자신의 .p12 또는 .pfx 인증서 파일 및 비밀번호로 바꾸십시오. GitHub에서 C# 및 VB.NET의 전체 PDF 서명 문서 샘플을 다운로드하여 사용해 볼 수 있습니다.

이미 서명된 문서에 서명해야 하는 경우가 있습니다. 또는 여러 사람이 차례로 양식에 서명해야 합니다. 이것도 가능합니다. 단계는 대부분 동일합니다. 서명하고 증분식으로 저장하세요. 허용된 변경 사항만 적용하는 경우 증분 업데이트는 디지털 서명을 무효화하지 않습니다.

이러한 경우에 대한 C# 및 VB.NET의 이미 서명된 PDF 문서에 서명여러 사람이 PDF 양식에 서명 샘플이 있습니다.

위의 코드는 보이지 않는 서명 필드를 PDF 문서에 암시적으로 추가하고 이를 서명에 사용합니다. PDF에서 서명 필드를 추가하고 사용자 정의하는 방법을 살펴보겠습니다.

손으로 쓴 서명 이미지로 PDF 문서에 서명

PDF에 디지털 서명 외에 손으로 쓴 서명 이미지를 추가해야 하는 경우가 많습니다. 이 샘플은 C#에서 연결된 이미지와 함께 디지털 서명을 추가하는 방법을 보여줍니다:

using (var pdf = new PdfDocument("document_to_sign.pdf"))
{
    var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
    {
        DigestAlgorithm = PdfDigestAlgorithm.Sha256,
        Format = PdfSignatureFormat.Pkcs7Detached,
    };

    PdfSignatureField field = pdf.Pages[0].AddSignatureField(20, 20, 100, 50);
    options.Field = field;

    PdfImage image = pdf.AddImage("your_signature.jpg");
    options.Appearance.Image = image;
    options.Appearance.HideAllText();

    pdf.SignAndSave(options, "signed.pdf");
}

이 코드는 서명 필드를 추가하고, 필드를 서명 옵션과 연결하고, 필드 모양을 사용자 정의합니다. 서명 필드에 텍스트, 이미지 또는 둘 다를 표시할 수 있습니다. 자세한 내용은 PdfSignatureAppearanceOptions 클래스사용자 정의 스타일을 사용하여 서명 필드 서명 샘플을 참조하세요.

서명 필드로 PDF 양식 필드 잠그기

서명 필드를 사용하여 서명 후 PDF 양식 필드를 잠글 수 있습니다. 이 샘플은 C#에 로그인한 후 특정 양식 필드를 잠그는 방법을 보여줍니다:

var first = page.AddSignatureField("first", 100, 100, 200, 50);

// 첫 번째 필드가 서명되면 "some_text_field" 및 "some_checkbox" 이름이 있는 필드는 편집을 위해 잠깁니다
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");

다음 코드는 서명 후 모든 양식 필드를 잠그는 방법을 보여줍니다:

var second = page.AddSignatureField("second", 100, 200, 200, 50);

// second 필드에 서명하면 편집을 위해 모든 필드가 잠깁니다
second.Lock = PdfSignatureFieldLock.CreateLockAll();

특정 필드를 제외한 PDF 문서의 모든 양식 필드를 잠글 수도 있습니다. 이를 위해서는 PdfSignatureFieldLock.CreateLockAllExceptFields 메서드를 사용하세요.

GitHub에서 C# 및 VB.NET의 전체 잠금으로 서명 필드 서명 샘플을 다운로드하여 사용해 보세요.

디지털 서명에 타임스탬프 포함

타임스탬프를 삽입하여 디지털 서명에 추가 보안을 추가할 수 있습니다. 이를 위해 서명 옵션 중 하나로 타임스탬프 기관 URL을 지정합니다. 필요한 경우 사용자 이름과 비밀번호를 제공할 수도 있습니다.

서명할 때 라이브러리는 Timestamp Authority로부터 타임스탬프를 받아 서명에 포함시킵니다.

호환성을 위해 타임스탬프 서명에 SHA 다이제스트 알고리즘 중 하나를 사용하는 것이 좋습니다.

// 다음 테스트 URL을 타임스탬프 기관 URL로 바꾸세요
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");

// 타임스탬프 기관에 인증이 필요한 경우 사용자 이름과 비밀번호를 지정하세요
options.Timestamp.Username = null;
options.Timestamp.Password = null;