푸터 콘텐츠로 바로가기
제품 비교

PDFsharp 전자 서명 문서와 IronPDF (코드 예제)

디지털 서명은 전자 문서의 진위성과 무결성을 검증하는 수학적 기술입니다. 여러 관할권에서 문서를 디지털 서명하는 전자 서명으로 사용되며, 큰 보안과 법적 유효성을 보장합니다.

디지털 서명은 서명자만 알고 있는 개인 키를 사용하여 생성됩니다. 이 개인 키는 문서가 서명될 때 해당 문서에 연결된 고유한 디지털 서명을 설정합니다. 서명에는 서명자의 이름, 이메일 주소 및 기타 개인 정보가 포함됩니다. 디지털 서명이 된 문서의 진위 여부를 확인하려면 수신자가 서명자의 공개 키에 접근할 수 있어야 합니다. 서명의 적법성은 공개 키를 사용하여 서명을 해독함으로써 확인됩니다.

이 튜토리얼에서는 PDFSharpIronPDF를 사용하여 PDF 문서에 디지털 서명을 추가하는 방법을 비교합니다. 디지털 서명은 문서의 진위 여부를 확인하는 데 필수적이며 PDF 파일은 그러한 작업을 위한 인기 있는 형식입니다.

PDFsharp는 PDF 생성 및 조작을 위한 잘 알려진 오픈 소스 라이브러리이며, IronPDF는 유사한 기능을 제공하는 강력한 .NET PDF 라이브러리로 추가적인 고급 기능을 제공합니다.

이 안내서에서는 개인 키로 PDF 문서에 서명하고 서명을 확인하는 방법을 다루며, 두 라이브러리의 예제 소스 코드도 포함되어 있습니다.

디지털 서명의 중요성은 무엇인가요?

디지털 서명은 문서의 무결성을 보장하고 강력한 보안을 제공합니다. 계약서, 합의서 및 기타 법적 문서에 일반적으로 사용됩니다.

주요 혜택:

  • 전통적인 서명보다 더 안전하고 무단 변경이 불가능합니다.
  • 전자적으로 확인되며 수작업 확인 작업을 줄입니다.
  • 전 세계적으로 문서의 원격 서명을 가능하게 합니다.
  • 전통적인 서명보다 더 높은 신뢰를 제공합니다.

PDFsharp 개요

PDFSharp는 주로 PDF 문서를 생성하고 조작하기 위해 설계된 오픈 소스 C# 라이브러리입니다. 간단한 PDF 파일 생성, 기존 문서 편집, 그래픽 렌더링과 같은 기본적인 PDF 작업에 널리 사용됩니다. 그러나 디지털 서명과 같은 고급 기능에 대한 기본 지원이 제한되어 있어 개발자들은 종종 BouncyCastle과 같은 타사 라이브러리에 의존하여 그러한 기능을 통합해야 합니다. PDFsharp는 오픈 소스이며, MIT 라이선스 하에 제공되며 비용 및 유연성이 우선인 프로젝트에 적합한 선택입니다.

주요 기능

  • MIT License 아래 오픈 소스 및 무료.
  • 기본적인 PDF 생성 및 조작.
  • 디지털 서명을 위해 BouncyCastle과 같은 외부 라이브러리로 확장 가능합니다.
  • HTML-to-PDF 변환 및 복잡한 폼 처리와 같은 고급 PDF 기능에 대한 기본 지원이 부족합니다.

IronPDF 개요

PDFsharp PDF 문서를 디지털로 서명하기 vs IronPDF (코드 예제): 그림 1 - image.png

IronPDF는 간단하고 강력한 API를 제공하여 PDF를 생성, 편집 및 조작할 수 있는 강력한 .NET PDF 라이브러리입니다. 그 주요 기능 중 하나는 디지털 서명의 구현이 용이하다는 점이며, 이는 문서의 진위성을 확인하는 데 필수적입니다. 디지털 서명 외에도, IronPDF는 HTML-to-PDF 변환, 워터마킹 및 폼 처리와 같은 고급 기능을 지원합니다. 이는 빠른 구현과 강력한 기능이 우선인 상업용 프로젝트에 참여하는 개발자들에게 특히 유용합니다.

주요 기능

  • 유료 지원이 포함된 상업용 라이센스이며 무료 체험판 이용 가능.
  • 사용하기 쉬운 API로 디지털 서명 및 문서 조작을 위한 현대적인 기능을 제공합니다.
  • HTML-to-PDF 형식 변환, 폼 처리, PDF 주석 (예: 첨부 주석)에 대한 내장 지원 포함.
  • 타임스탬프, 시각적 서명 이미지 및 암호화와 같은 고급 기능과 원활한 통합.

PDFsharp를 사용하여 프로그래밍 방식으로 디지털 서명 추가하기

PDFsharp는 C#에서 PDF 생성 및 조작을 위해 설계된 오픈 소스 라이브러리입니다. 그러나 서명을 추가하는 지원을 제공하지만, PDF 문서의 안전하고 정확한 디지털 서명을 보장하려면 BouncyCastle과 같은 타사 도구를 통합해야 합니다.

PDFsharp로 디지털 서명을 추가하기 위한 단계

  1. PDFsharp와 BouncyCastle을 NuGet을 통해 설치합니다.
  2. X509Certificate2를 사용하여 디지털 인증서를 생성합니다.
  3. BouncyCastle로 PDF에 서명합니다.

예제 코드

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
Imports System
Imports System.IO
Imports System.Security.Cryptography.X509Certificates
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf
Imports BouncyCastleSigner ' Hypothetical namespace for illustration
' Ensure that you have the appropriate namespaces added

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a font for the appearance of the signature
		Dim font = New XFont("Verdana", 10.0, XFontStyle.Regular)

		' Create a new PDF document
		Dim document = New PdfDocument()
		Dim pdfPage = document.AddPage()

		' Prepare graphics for drawing on the PDF page
		Dim xGraphics = XGraphics.FromPdfPage(pdfPage)
		Dim layoutRectangle = New XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point)

		' Add some text to the page
		xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter)

		' Define digital signature appearance options
		Dim options = New DigitalSignatureOptions With {
			.ContactInfo = "John Doe",
			.Location = "Seattle",
			.Reason = "License Agreement",
			.Rectangle = New XRect(36.0, 700.0, 400.0, 50.0),
			.AppearanceHandler = New SignatureAppearanceHandler()
		}

		' Sign the document using BouncyCastle signer
		Dim pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document, New PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options)

		' Save the signed document
		document.Save("PdfSharpSignature.pdf")
	End Sub

	Private Shared Function GetCertificate() As (X509Certificate2, X509Certificate2Collection)
		' Locate the certificate file and read its data
		Dim certFolder = "C:\Users\kyess\AppData\Roaming\Adobe\Acrobat\DC\Security"
		Dim pfxFile = Path.Combine(certFolder, "IronSoftware.pfx")
		Dim rawData = File.ReadAllBytes(pfxFile)

		' Load the certificate using its password (example password)
		Dim certificatePassword = "Passw0rd"
		Dim certificate = New X509Certificate2(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)

		' Create and return the certificate collection
		Dim collection = New X509Certificate2Collection()
		collection.Import(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)
		Return (certificate, collection)
	End Function
End Class
$vbLabelText   $csharpLabel

출력

PDFsharp PDF 문서를 디지털로 서명하기 vs IronPDF (코드 예제): 그림 2

여기에서 볼 수 있듯이, 디지털 서명 필드를 생성하고 인증서를 새로운 문서에 적용할 수 있었지만, 이 과정은 광범위하고 수동적이며 IronPDF와 같은 라이브러리에 비해 효율적으로 구현하기 어렵습니다.

IronPDF로 디지털 서명 추가하기

IronPDF는 개발자에게 PDF 문서를 디지털 서명 하기 위한 간결한 방법을 제공합니다.

using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
        sig.TimestampUrl = "http://timestamp.digicert.com";
        sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));

        // Sign and save the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
        sig.TimestampUrl = "http://timestamp.digicert.com";
        sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));

        // Sign and save the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
Imports IronPdf
Imports System.Security.Cryptography.X509Certificates

Public Class Program
	Shared Sub Main(ByVal args() As String)
		' Load the certificate with its password
		Dim sig = New PdfSignature("IronSoftware.pfx", "your-password")

		' Configure additional signature details
		sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
		sig.TimestampUrl = "http://timestamp.digicert.com"
		sig.SignatureImage = New PdfSignatureImage("IronPdf.png", 0, New Rectangle(150, 100, 200, 200))

		' Sign and save the PDF document
		sig.SignPdfFile("output.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

출력

PDFsharp PDF 문서를 디지털로 서명하기 vs IronPDF (코드 예제): 그림 3

이 코드는 IronPDF의 PdfSignature 클래스를 사용하여 PDF 문서에 서명하는 방법을 보여줍니다. 프로그램은 먼저 .pfx 인증서 파일의 위치와 비밀번호를 지정하여 PdfSignature 객체를 생성합니다. 그 후 해시 알고리즘(SHA256), 타임스탬프 URL, 서명용 사용자 정의 이미지(IronPdf.png)와 같은 추가 서명 속성을 설정합니다.

마침내 SignPdfFile 메서드가 호출되어 PDF 문서에 디지털 서명을 적용하고 output.pdf로 저장합니다. 이 과정은 타임스탬프 및 시각적 이미지와 함께 디지털 서명을 포함하여 PDF의 무결성과 진본성을 보장합니다.

PDFSharp:

  • MIT 라이선스 하에 오픈 소스입니다.
  • 디지털 서명과 같은 고급 기능을 위해 외부 라이브러리 (예: BouncyCastle)가 필요합니다.

IronPDF:

결론: C#의 디지털 서명에 대한 IronPDF 대 PDFsharp

C#에서 PDF에 디지털 서명을 추가하기 위해서 IronPDFPDFsharp을 비교할 때, 두 라이브러리 모두 프로젝트 요구에 따라 각각의 장점을 제공합니다.

  • IronPDF는 독립 프리랜서 소프트웨어 개발자이든, 기업의 개발자이든 관계없이 PDF에 디지털 서명을 적용하기 위한 간단하고 사용하기 쉬운 API를 찾는 개발자에게 이상적이며, 현대적인 기능을 제공합니다. 디지털 서명 애플리케이션과의 원활한 통합, HTML-to-PDF 변환 및 기타 PDF 기능들은 사용의 용이성과 빠른 구현을 우선시하는 상업 프로젝트에 적합한 선택입니다. 유료 지원과 명확한 상업 라이선스 구조를 통해 IronPDF는 간단하고 신뢰할 수 있는 솔루션이 필요한 비즈니스에 적합합니다.

  • PDFsharp는 기본적인 PDF 생성 및 조작에서 뛰어납니다. 그러나 IronPDF가 제공하는 디지털 서명을 위한 고급 기능과 직접적인 지원은 부족합니다. PDFsharp는 오픈 소스이며 무료로 사용할 수 있지만, IronPDF에 비해 디지털 서명을 다루는 API가 직관적이지 않기 때문에 개발자들이 이러한 기능을 처리하기 위해 추가적인 솔루션이나 타사 라이브러리들을 사용해야 할 수 있습니다.

요약하자면 IronPDF는 디지털 서명 및 관련 PDF 작업에 대한 간단하고 빠른 솔루션을 찾는 개발자들에게 특히 상업 환경에서 가장 좋은 선택입니다. PDFsharp는 기본적인 PDF 작업에 더 적합하지만 디지털 서명에 대한 동일한 사용 용이성과 기능 세트를 갖추지 못하여 추가적인 커스터마이제이션이 필요한 간단한 프로젝트에 더 적합합니다.

참고해 주세요PDFsharp 및 BouncyCastle는 해당 소유자의 등록된 상표입니다. 이 사이트는 PDFsharp 또는 BouncyCastle과 관련이 없으며, 승인받거나 후원받고 있지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.

자주 묻는 질문

디지털 서명이 PDF 문서의 진위성과 무결성을 어떻게 보장하나요?

디지털 서명은 암호화 기술을 사용하여 서명 후 PDF 문서가 변경되지 않았음을 확인합니다. 서명자의 신원을 확인하고 문서의 내용이 변경되지 않도록 보장하여 보안과 법적 유효성을 제공합니다.

PDFsharp를 사용하여 디지털 서명을 추가할 때 개발자가 직면할 수 있는 문제는 무엇인가요?

PDFsharp를 사용하여 디지털 서명을 추가할 때 개발자는 일반적으로 BouncyCastle과 같은 타사 라이브러리를 통합해야 합니다. 이 요구 사항은 디지털 인증서 생성 및 PDF 서명에 대한 추가 종속성을 관리해야 하기 때문에 구현 과정을 복잡하게 만들 수 있습니다.

왜 개발자가 디지털 서명을 위해 오픈 소스보다는 상업용 PDF 라이브러리를 선택할 수 있을까요?

상업용 PDF 라이브러리는 고급 기능, 디지털 서명에 대한 내장 지원 및 사용하기 쉬운 API를 제공합니다. 이러한 특성은 특히 시간과 효율성이 중요한 상업 프로젝트에서 신속하고 신뢰할 수 있는 솔루션을 찾는 개발자에게 더 적합합니다.

HTML을 .NET 애플리케이션에서 PDF로 어떻게 변환할 수 있나요?

HTML은 IronPDF와 같은 라이브러리를 사용하여 .NET 애플리케이션에서 PDF로 변환할 수 있습니다. 이 라이브러리는 HTML 문자열이나 파일을 PDF 문서로 직접 변환하는 RenderHtmlAsPdf와 같은 메서드를 제공하며, 다양한 스타일링 및 스크립팅 옵션을 지원합니다.

상업 프로젝트에서 PDF를 처리하기 위해 IronPDF를 사용하는 이점은 무엇인가요?

IronPDF는 디지털 서명, HTML-to-PDF 변환, 양식 처리 등을 포함하여 PDF를 처리하기 위한 포괄적인 기능을 제공합니다. 강력한 지원과 사용하기 쉬운 API 덕분에 고급 기능과 빠른 배포를 우선시하는 상업 프로젝트에 이상적입니다.

.NET 라이브러리를 사용하여 PDF 디지털 서명에 타임스탬프를 추가할 수 있나요?

네, IronPDF와 같은 라이브러리를 사용하여 서명 구성에 타임스탬프 서버 URL을 지정함으로써 PDF 디지털 서명에 타임스탬프를 추가할 수 있습니다. 이 기능은 서명된 문서의 신뢰성과 법적 준수성을 높입니다.

디지털 서명 구현을 위한 PDF 라이브러리를 선택할 때 고려해야 할 사항은 무엇인가요?

디지털 서명을 위한 PDF 라이브러리를 선택할 때 사용의 용이성, 고급 기능 지원, 타사 도구와의 통합 능력, 상업용 라이브러리에서는 더 종합적인 전용 고객 지원의 가용성을 고려해야 합니다. 특히 IronPDF와 같은 상업용 라이브러리가 종종 더 포괄적입니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해