0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#でPDFのデジタル署名を削除する

0
Posted at

.NET開発でPDFを処理する際、署名済みのPDFに対して内容の編集やレイアウトの調整を行おうとすると、デジタル署名によってファイルが完全にロックされ、操作を行うたびにエラーが発生してしまうことがあります。実は悩む必要はありません。PDFのデジタル署名は、本質的にフォームに埋め込まれた専用コントロールであり、C#の数行のコードで的確に削除することができます。本日は、無料ライブラリFree Spire.PDFを使用してこの処理を実装する方法をご紹介します。

実装の基本ロジック

PDF内のデジタル署名は特殊なフォームフィールドであり、その型はPdfSignatureFieldWidgetです。実行する処理は非常にシンプルです。

  1. 署名付きPDFドキュメントを読み込む
  2. すべてのフォームフィールドを走査する
  3. 署名タイプのフィールドを検索し、直接削除する
  4. 新規ファイルとして保存する

完全なコード

using Spire.Pdf;
using Spire.Pdf.Widget;

namespace RemoveSignature
{
    class Program
    {
        static void Main(string[] args)
        {
            // 処理対象のPDFファイルを読み込む
            PdfDocument pdf = new PdfDocument("C:\\Users\\Administrator\\Desktop\\Signature.pdf");

            // ドキュメント内のフォームフィールドコレクションを取得
            PdfFormWidget widgets = pdf.Form as PdfFormWidget;

            // 逆順で走査(削除時のインデックスズレを防止)
            for (int i = widgets.FieldsWidget.List.Count - 1; i >= 0; i--)
            {
                PdfFieldWidget widget = widgets.FieldsWidget.List[i] as PdfFieldWidget;

                // 現在のフィールドがデジタル署名フィールドか判定
                if (widget is PdfSignatureFieldWidget)
                {
                  // 署名を削除
                    widgets.FieldsWidget.RemoveAt(i);
                    Console.WriteLine($"{i}番目の署名フィールドを削除しました");
                }
            }

            // 処理結果を保存
            pdf.SaveToFile("RemoveSignatures.pdf");
            Console.WriteLine("処理が完了しました!");
            
            // リソースを解放
            pdf.Close();
        }
    }
}

重要なポイント

1. なぜ逆順で走査するのか?
List.RemoveAt(i)で要素を削除すると、リスト内の後続のインデックスが前に詰められます。正順で削除すると要素の取りこぼしが発生しやすくなりますが、逆順で処理すると安全に操作できます。

2. 表示・非表示の署名を問わず削除可能
ページ上に表示される署名画像、バックエンドに隠された検証用署名のいずれも、この方法で削除できます。

3. 無料版の制限について
無料版にはPDFのページ数制限がありますが、小規模ファイル、テスト用途、社内ツールでの使用には十分に対応可能です。

実際の効果

  • 処理前:Adobe の左側パネルを開くと、署名情報と署名日時が表示されます。
    SignedPDF.png

  • 処理後:署名が消去され、文書の編集が可能になり、まるで一度も署名されていなかった状態に戻ります。

RemoveSignature.png

注意事項

  • 元ファイルのバックアップ:本コードは新規ファイルとして保存するため、元ファイルを上書きすることはなく安全ですが、事前にバックアップを取得することを推奨します。
  • 依存ライブラリ:Free Spire.PDFを使用する場合は、NuGetでFreeSpire.PDFを検索して直接インストールしてください。

PDF署名削除の核心は一言でまとめられます。デジタル署名はPDFフォーム内の専用コントロールであり、コントロールを削除すること=署名を削除することです。

※追記:署名が法的効力を持つ場合、操作前に権限を確認することを推奨します。不要な署名を削除しないよう、自己責任で操作してください 😄

関連記事:C#を使用したPDFへの電子署名の追加方法

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?