PDFにデジタル署名を追加またはデジタル署名する方法

Aspose.PDF for .NETは、SignatureFieldクラスを使用してPDFファイルにデジタル署名を行う機能をサポートしています。PKCS12証明書を使用してPDFファイルを認証することもできます。Adobe Acrobatでの署名とセキュリティの追加に似ています。

PDFドキュメントに署名を使用する場合、基本的にその内容を「そのまま」確認することになります。したがって、その後に行われた他の変更は署名を無効にし、ドキュメントが変更されたかどうかを知ることができます。一方、ドキュメントを最初に認証することで、ユーザーが認証を無効にすることなくドキュメントに加えることができる変更を指定できます。

言い換えれば、ドキュメントは依然としてその完全性を保持していると考えられ、受信者は引き続きドキュメントを信頼できます。詳細については、PDFを認証および署名するをご覧ください。一般に、ドキュメントの認証は.NET実行可能ファイルのコード署名と比較できます。

次のコードスニペットも Aspose.PDF.Drawing ライブラリで動作します。

以下のコードスニペットは、Aspose.PDF.Drawing ライブラリとも動作します。

Aspose.PDF for .NETの署名機能

PDF署名には以下のクラスとメソッドを使用できます

デジタル署名を使ってPDFに署名

public static void SignDocument()
{
    string inFile = System.IO.Path.Combine(_dataDir,"DigitallySign.pdf");
    string outFile = System.IO.Path.Combine(_dataDir,"DigitallySign_out.pdf");
    using (Document document = new Document(inFile))
    {
        using (PdfFileSignature signature = new PdfFileSignature(document))
        {
            PKCS7 pkcs = new PKCS7(@"C:\Keys\test.pfx", "Pa$$w0rd2020"); // PKCS7/PKCS7Detachedオブジェクトを使用
            signature.Sign(1, true, new System.Drawing.Rectangle(300, 100, 400, 200),pkcs);
            // 出力PDFファイルを保存
            signature.Save(outFile);
        }
    }
}

デジタル署名にタイムスタンプを追加

PDFにタイムスタンプ付きでデジタル署名をする方法

Aspose.PDF for .NETは、タイムスタンプサーバーまたはWebサービスを用いてPDFにデジタル署名することをサポートしています。

この要件を達成するために、TimestampSettings クラスがAspose.PDF名前空間に追加されました。以下のコードスニペットをご覧ください。これはタイムスタンプを取得し、PDFドキュメントに追加します:

public static void SignWithTimeStampServer()
{
    using (Document document = new Document(System.IO.Path.Combine(_dataDir,"SimpleResume.pdf")))
    {
        using (PdfFileSignature signature = new PdfFileSignature(document))
        {
            PKCS7 pkcs = new PKCS7(@"C:\Keys\test.pfx", "Start2020");
            TimestampSettings timestampSettings = new TimestampSettings("https://freetsa.org/tsr", string.Empty); // ユーザー/パスワードは省略可能
            pkcs.TimestampSettings = timestampSettings;
            System.Drawing.Rectangle rect = new System.Drawing.Rectangle(100, 100, 200, 100);
            // 3つの署名タイプのいずれかを作成
            signature.Sign(1, "Signature Reason", "Contact", "Location", true, rect, pkcs);
            // 出力PDFファイルを保存
            signature.Save(System.IO.Path.Combine(_dataDir, "DigitallySignWithTimeStamp_out.pdf"));
        }
    }
}