RemoveSignatureFields.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
// 
using System.IO;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Pdf.AcroForms;

namespace DsPdfWeb.Demos
{
    // このサンプルは、PDF から署名フィールドを見つけて削除する方法を示します。
    // このサンプルのコードは、RemoveSignatures のコードとほぼ同じです。これにより、
    // すべての署名フィールドも検索されますが、署名だけが削除され、フィールドは残ります。
    // このサンプルで使用されている PDF は、TimeSheet によって作成されました。
    public class RemoveSignatureFields
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            using (var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "TimeSheet.pdf")))
            {
                doc.Load(fs);

                // フィールドは他のフィールドの子になる可能性があるため、
                // 再帰メソッドを使用してツリー全体を反復処理します。
                removeSignatureFields(doc.AcroForm.Fields);

                // PDF ドキュメントを保存します。
                doc.Save(stream);
                return doc.Pages.Count;

                void removeSignatureFields(FieldCollection fields)
                {
                    for (int i = fields.Count - 1; i >= 0; --i)
                    {
                        removeSignatureFields(fields[i].Children);
                        // メモ:フィールド自体を削除せずに署名を削除する場合は、
                        // 以下のようにします:
                        // ((SignatureField)fields[i]).Value = null;
                        if (fields[i] is SignatureField)
                            fields.RemoveAt(i);
                    }
                }
            }
        }
    }
}