最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#結(jié)合Free?Spire.PDF實現(xiàn)刪除PDF中的數(shù)字簽名

 更新時間:2026年03月27日 08:25:17   作者:LAYONTHEGROUND  
這篇文章主要為大家詳細介紹了C#如何結(jié)合Free?Spire.PDF實現(xiàn)刪除PDF中的數(shù)字簽名,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下

在 .NET 開發(fā)中處理 PDF 文檔時,你大概率遇到過這個問題:拿到一份已添加數(shù)字簽名的 PDF,想要修改內(nèi)容、調(diào)整排版,卻因簽名保護無法編輯,任何操作都會觸發(fā)報錯。

其實解決方案非常簡單:PDF 數(shù)字簽名本質(zhì)是嵌入在表單中的專屬簽名字段控件,無需復(fù)雜操作,用 C# 結(jié)合免費的 Free Spire.PDF 庫,幾行代碼就能精準移除所有簽名。

實現(xiàn)原理

PDF 中的數(shù)字簽名,在底層是一個特殊類型的表單字段,對應(yīng)類為 PdfSignatureFieldWidget。

我們的核心邏輯就是:定位并刪除這個簽名字段,即可解除 PDF 的簽名保護。

  • 加載帶數(shù)字簽名的 PDF 文檔
  • 獲取文檔內(nèi)的所有表單字段集合
  • 倒序遍歷表單字段,篩選出簽名類型字段并刪除
  • 保存處理后的新 PDF 文件
  • 釋放文檔資源,避免內(nèi)存泄漏

完整代碼

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;

                // 判斷當前字段是不是數(shù)字簽名字段
                if (widget is PdfSignatureFieldWidget)
                {
                  // 移除簽名
                    widgets.FieldsWidget.RemoveAt(i);
                    Console.WriteLine($"已移除第{i}個簽名字段");
                }
            }

            // 保存結(jié)果
            pdf.SaveToFile("RemoveSignatures.pdf");
            Console.WriteLine("處理完成!");
            
            // 記得釋放資源
            pdf.Close();
        }
    }
}

關(guān)鍵點解析

1. 為什么必須倒序遍歷?

List.RemoveAt(i) 刪除元素后,列表后續(xù)元素的索引會自動前移。

  • 正序遍歷:刪除元素后會跳過下一個字段,導(dǎo)致刪不干凈;
  • 倒序遍歷:從最后一個元素往前刪,索引不會錯亂,是刪除集合元素的標準寫法。

2. 支持移除所有類型簽名

無論你要刪除的是:

  • 頁面可見的簽名圖片/印章
  • 后臺隱藏的電子驗證簽名
  • 單個/多個數(shù)字簽名
  • 該方法都能一鍵清除。

3. Free Spire.PDF 免費版限制

免費版有 PDF 頁數(shù)限制(≤10頁),完全滿足:

  • 個人測試
  • 小文件處理
  • 企業(yè)內(nèi)部工具開發(fā)

環(huán)境配置(一步到位)

打開 Visual Studio 的 NuGet 包管理器控制臺,執(zhí)行以下命令安裝依賴庫:

Install-Package FreeSpire.PDF

或直接在 NuGet 搜索框中搜索:FreeSpire.PDF 安裝。

重要注意事項

  • 務(wù)必備份原文件:代碼會生成新文件,不會覆蓋原文件,但操作重要文檔前,建議手動備份。
  • 文件路徑格式:Windows 路徑建議加 @ 轉(zhuǎn)義(@"C:\Test.pdf"),避免轉(zhuǎn)義字符報錯。
  • 法律效力提醒“”數(shù)字簽名通常具備法律效應(yīng),操作前請確認你擁有文件的修改/刪除權(quán)限,請勿違規(guī)操作。

知識擴展

1.C# 如何移除PDF文檔的數(shù)字簽名

using Spire.Pdf;
using Spire.Pdf.Widget;
namespace 移除PDF數(shù)字簽名
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument pdf = newPdfDocument();
           pdf.LoadFromFile("測試.pdf");
            PdfFormWidget widgets = pdf.Form as PdfFormWidget;
            for (int i = 0; i< widgets.FieldsWidget.List.Count; i++)
            {
               PdfFieldWidget widget =widgets.FieldsWidget.List[i] as PdfFieldWidget;
               if (widget isPdfSignatureFieldWidget)
               {
                   widgets.FieldsWidget.RemoveAt(i);
               }
            }
           pdf.SaveToFile("移除簽名.pdf");
           System.Diagnostics.Process.Start("移除簽名.pdf");
        }
    }
}

2.C# PDF添加可信時間戳數(shù)字簽名

在進行簽名前,需要準備以下資料:

1)數(shù)字證書和密碼;

2)時間戳服務(wù)器 的URL地址

using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Security;
namespace Digitally_Sign_Pdf_with_Timestamp
{
    class Program
    {
        static void Main(string[] args)
        {
            //加載PDF文檔
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("Additional.pdf");
            //獲取第一頁
            PdfPageBase page = pdf.Pages[0];
            //加載數(shù)字證書(.pfx文件)
            PdfCertificate cert = new PdfCertificate("test.pfx", "123");
            //加載一張圖片
            Spire.Pdf.Graphics.PdfImage image = Spire.Pdf.Graphics.PdfImage.FromFile("Logo.jpg");
            //添加跟圖片一樣大小的簽名到第一頁,并設(shè)置圖片為簽名圖片
            Spire.Pdf.Security.PdfSignature signature = new Spire.Pdf.Security.PdfSignature(page.Document, page, cert, "sign1");
            signature.Bounds = new RectangleF(new PointF(100, 300), new SizeF(image.Width, image.Height));
            signature.SignImageSource = image;
            signature.GraphicsMode = Spire.Pdf.Security.GraphicMode.SignImageAndSignDetail;
            signature.SignImageLayout = Spire.Pdf.Security.SignImageLayout.Stretch;
            signature.DocumentPermissions = Spire.Pdf.Security.PdfCertificationFlags.AllowFormFill | Spire.Pdf.Security.PdfCertificationFlags.AllowComments;
            //配置時間戳服務(wù)器
            string url = "http://timestamp.wosign.com/rfc3161";
            signature.ConfigureTimestamp(url);
            //保存文檔
            pdf.SaveToFile("output.pdf");
        }
    }
}

到此這篇關(guān)于C#結(jié)合Free Spire.PDF實現(xiàn)刪除PDF中的數(shù)字簽名的文章就介紹到這了,更多相關(guān)C#刪除PDF數(shù)字簽名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

达孜县| 辉南县| 方正县| 开封县| 茶陵县| 福建省| 宁城县| 湄潭县| 巴中市| 洛南县| 淄博市| 富顺县| 元阳县| 高陵县| 彩票| 肇源县| 常熟市| 镇平县| 城口县| 剑川县| 内丘县| 应城市| 九江县| 合川市| 游戏| 南丹县| 新昌县| 甘泉县| 张家川| 清苑县| 集贤县| 乌兰察布市| 方山县| 凤翔县| 麻栗坡县| 高碑店市| 西昌市| 昌邑市| 江永县| 商都县| 肇源县|