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

利用C#在PDF文檔中添加電子簽名的實(shí)現(xiàn)流程

 更新時(shí)間:2025年12月26日 08:41:48   作者:m5655bj  
電子簽名在文檔合規(guī)性與安全性保障中扮演著重要角色,基于 C# 開發(fā) PDF 電子簽名功能是企業(yè)級(jí)文檔處理場(chǎng)景的常見需求,Spire.PDF for .NET 作為國(guó)產(chǎn) PDF 處理類庫(kù),無需依賴 Adobe Acrobat 等第三方軟件,即可便捷實(shí)現(xiàn) PDF 電子簽名添加,本文為大家詳細(xì)介紹一下

引言

電子簽名在文檔合規(guī)性與安全性保障中扮演著重要角色,基于 C# 開發(fā) PDF 電子簽名功能是企業(yè)級(jí)文檔處理場(chǎng)景的常見需求。Spire.PDF for .NET 作為國(guó)產(chǎn) PDF 處理類庫(kù),無需依賴 Adobe Acrobat 等第三方軟件,即可便捷實(shí)現(xiàn) PDF 電子簽名添加。本文將介紹該類庫(kù)的使用方式、PDF 電子簽名的實(shí)現(xiàn)流程、解析關(guān)鍵代碼參數(shù)等。

一、前置準(zhǔn)備

1. 安裝 .NET 庫(kù)

通過 NuGet 包管理器快速安裝:

Install-Package Spire.PDF

2. 核心依賴說明

實(shí)現(xiàn)電子簽名需依賴 .pfx 格式的數(shù)字證書(包含私鑰):

  • 測(cè)試場(chǎng)景:可通過 OpenSSL、Windows 證書管理器生成自簽名證書;
  • 生產(chǎn)場(chǎng)景:需使用 CA 機(jī)構(gòu)頒發(fā)的合規(guī)證書(符合《電子簽名法》要求);
  • 證書加載:通過 System.Security.Cryptography.X509Certificates.X509Certificate2 類解析 .pfx 文件,是本次實(shí)現(xiàn)的核心依賴。

二、核心實(shí)現(xiàn)邏輯

PdfOrdinarySignatureMaker 是 Spire.PDF 中面向普通電子簽名的核心類,其核心流程為:
加載 PDF 文檔 → 解析 X.509 證書→ 初始化簽名器 → 執(zhí)行簽名 → 保存文檔。

以下基于該類實(shí)現(xiàn)基礎(chǔ)簽名功能,并擴(kuò)展添加可見簽名等進(jìn)階示例。

1. 基礎(chǔ)版:添加基礎(chǔ)電子簽名(默認(rèn)不可見)

適用于僅需驗(yàn)簽、無需視覺標(biāo)識(shí)的場(chǎng)景,核心代碼附帶詳細(xì)注釋:

using Spire.Pdf;
using Spire.Pdf.Interactive.DigitalSignatures;
using System;
using System.Security.Cryptography.X509Certificates;

namespace PdfDigitalSignature
{
    class BasicSignatureDemo
    {
        static void Main(string[] args)
        {
            try
            {
                // 1. 加載待簽名的 PDF 文檔
                using (PdfDocument pdfDoc = new PdfDocument())
                {
                    pdfDoc.LoadFromFile("Input.pdf"); // 替換為實(shí)際文件路徑

                    // 2. 加載數(shù)字證書(指定密鑰存儲(chǔ)策略,適配服務(wù)器/客戶端環(huán)境)
                    string certPath = "certificate.pfx"; // 替換為證書實(shí)際路徑
                    string certPassword = "abc123"; // 替換為證書密碼
                    X509Certificate2 cert = new X509Certificate2(
                        certPath,
                        certPassword,
                        // 關(guān)鍵標(biāo)志:適配服務(wù)器環(huán)境+避免密鑰持久化,提升安全性
                        X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet
                    );

                    // 3. 初始化簽名器并執(zhí)行簽名
                    PdfOrdinarySignatureMaker signMaker = new PdfOrdinarySignatureMaker(pdfDoc, cert);
                    // 簽名名稱:用于后續(xù)識(shí)別/驗(yàn)證簽名,建議唯一
                    signMaker.MakeSignature("Basic_Signature_001");

                    // 4. 保存簽名后的文檔
                    pdfDoc.SaveToFile("Signed_Basic.pdf");
                    Console.WriteLine("不可見簽名添加成功!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"簽名失?。簕ex.Message}");
                // 進(jìn)階:記錄異常詳情(如堆棧)便于排查
                Console.WriteLine($"異常詳情:{ex.StackTrace}");
            }
        }
    }
}

2. 進(jìn)階版:添加可見簽名

在基礎(chǔ)簽名上擴(kuò)展視覺標(biāo)識(shí)(含簽名圖片、文本信息),適用于需要直觀展示簽名的場(chǎng)景:

using Spire.Pdf;
using Spire.Pdf.Interactive.DigitalSignatures;
using System;
using System.Drawing;
using System.Security.Cryptography.X509Certificates;

namespace PdfDigitalSignature
{
    class AdvancedSignatureDemo
    {
        static void Main(string[] args)
        {
            try
            {
                // 1. 加載 PDF 文檔(using 自動(dòng)釋放資源)
                using (PdfDocument pdfDoc = new PdfDocument())
                {
                    pdfDoc.LoadFromFile("Input.pdf");

                    // 2. 加載數(shù)字證書
                    string certPath = "certificate.pfx";
                    string certPassword = "abc123";
                    X509Certificate2 cert = new X509Certificate2(
                        certPath,
                        certPassword,
                        X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet
                    );

                    // 3. 初始化簽名器
                    PdfOrdinarySignatureMaker signMaker = new PdfOrdinarySignatureMaker(pdfDoc, cert);
                    PdfSignature signature = signMaker.Signature;

                    // 4. 配置簽名元信息(將顯示在簽名外觀中)
                    signature.Name = "XX科技有限公司";       // 簽名者名稱
                    signature.ContactInfo = "010-12345678"; // 聯(lián)系信息
                    signature.Location = "中國(guó)·北京";        // 簽名地點(diǎn)
                    signature.Reason = "確認(rèn)文檔內(nèi)容合規(guī)有效";// 簽名原因

                    // 5. 配置簽名可視化外觀
                    PdfSignatureAppearance appearance = new PdfSignatureAppearance(signature);
                    // 自定義標(biāo)簽文本
                    appearance.NameLabel = "簽名主體:";
                    appearance.ContactInfoLabel = "聯(lián)系電話:";
                    appearance.LocationLabel = "簽署地點(diǎn):";
                    appearance.ReasonLabel = "簽署原因:";
                    // 添加簽名圖片(支持 PNG/JPG 等格式)
                    PdfImage signImage = PdfImage.FromFile("signature.png"); // 替換為簽名圖片路徑
                    appearance.SignatureImage = signImage;
                    // 布局模式:圖片 + 文本(可選:SignImageOnly/僅圖片;SignDetailOnly/僅文本)
                    appearance.GraphicMode = GraphicMode.SignImageAndSignDetail;

                    // 6. 綁定外觀并添加到指定位置
                    signMaker.SignatureAppearance = appearance;
                    // 獲取目標(biāo)頁(yè)面(示例:最后一頁(yè))
                    PdfPageBase targetPage = pdfDoc.Pages[pdfDoc.Pages.Count - 1];
                    // MakeSignature 參數(shù)說明:簽名名稱、目標(biāo)頁(yè)面、X坐標(biāo)、Y坐標(biāo)、寬度、高度、外觀
                    signMaker.MakeSignature("Advanced_Signature_001", targetPage, 
                        54.0f, 330.0f, 280.0f, 90.0f, appearance);

                    // 7. 保存文檔
                    pdfDoc.SaveToFile("Signed_Advanced.pdf");
                    Console.WriteLine("可視化簽名添加成功!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"簽名失?。簕ex.Message}");
                Console.WriteLine($"異常詳情:{ex.StackTrace}");
            }
        }
    }
}

三、關(guān)鍵參數(shù)與類說明

  • PdfOrdinarySignatureMaker:核心簽名器類,關(guān)聯(lián)PDF文檔與 X.509 證書,執(zhí)行簽名操作。
  • X509Certificate2:加載 .pfx 格式數(shù)字證書,解析私鑰與公鑰。
  • X509KeyStorageFlags:密鑰存儲(chǔ)標(biāo)志,控制證書加載的存儲(chǔ)區(qū)與密鑰生命周期
    • MachineKeySet 適配服務(wù)器環(huán)境
    • EphemeralKeySet 提升安全性
  • PdfSignatureAppearance:配置可見簽名的外觀,包括簽名框位置、文本信息等。
  • GraphicMode:可見簽名布局樣式 (參數(shù): SignImageOnly (僅圖片), SignDetailOnly (僅文本), SignImageAndSignDetail (圖片+文本))
  • MakeSignature:執(zhí)行簽名方法。

四、注意事項(xiàng)

  1. 證書安全:.pfx 證書包含私鑰,需加密存儲(chǔ),避免硬編碼密碼,建議通過配置文件/密鑰管理服務(wù)管理;
  2. 權(quán)限適配:服務(wù)器環(huán)境下加載證書需賦予應(yīng)用程序足夠的密鑰訪問權(quán)限,避免 CryptographicException ;
  3. 兼容性測(cè)試:簽名后的 PDF 需在 Adobe Acrobat、WPS、瀏覽器等主流閱讀器中驗(yàn)證顯示與簽名有效性;

五、總結(jié)

基于 Spire.PDF for .NET 的 C# 實(shí)現(xiàn)方案,以 “輕量化、低門檻、易集成” 為核心優(yōu)勢(shì),僅需數(shù)十行代碼即可完成 PDF 電子簽名的基礎(chǔ)與進(jìn)階功能。該方案適配 .NET Framework/.NET Core/.NET 5+ 全框架,能快速落地到企業(yè)級(jí)文檔處理系統(tǒng)中。如需更高的安全性與合規(guī)性,可結(jié)合 CA 證書、時(shí)間戳服務(wù)進(jìn)一步擴(kuò)展。

以上就是利用C#在PDF文檔中添加電子簽名的實(shí)現(xiàn)流程的詳細(xì)內(nèi)容,更多關(guān)于C# PDF文檔添加電子簽名的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#連接數(shù)據(jù)庫(kù)的幾種方法

    C#連接數(shù)據(jù)庫(kù)的幾種方法

    這篇文章介紹了C#連接數(shù)據(jù)庫(kù)的幾種方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C# 獲取進(jìn)程退出代碼的實(shí)現(xiàn)示例

    C# 獲取進(jìn)程退出代碼的實(shí)現(xiàn)示例

    這篇文章主要介紹了C# 獲取進(jìn)程退出代碼的實(shí)現(xiàn)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • C#給圖片添加水印完整實(shí)例

    C#給圖片添加水印完整實(shí)例

    這篇文章主要介紹了C#給圖片添加水印的方法,以完整實(shí)例形式分析了C#實(shí)現(xiàn)文字及圖像水印、縮略圖、圖片剪切等相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • C#獲取文件名禁止使用的字符方式

    C#獲取文件名禁止使用的字符方式

    這篇文章主要介紹了C#獲取文件名禁止使用的字符方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Unity實(shí)現(xiàn)微信聊天框界面

    Unity實(shí)現(xiàn)微信聊天框界面

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)微信聊天框界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C#超市收銀系統(tǒng)設(shè)計(jì)

    C#超市收銀系統(tǒng)設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C#超市收銀系統(tǒng)設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#使用Socket實(shí)現(xiàn)局域網(wǎng)聊天

    C#使用Socket實(shí)現(xiàn)局域網(wǎng)聊天

    這篇文章主要為大家詳細(xì)介紹了C#使用Socket實(shí)現(xiàn)局域網(wǎng)聊天的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C# 通過反射獲取類型的字段值及給字段賦值的操作

    C# 通過反射獲取類型的字段值及給字段賦值的操作

    這篇文章主要介紹了C# 通過反射獲取類型的字段值及給字段賦值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#發(fā)送和接收HTTP請(qǐng)求類HttpWebRequest的用法

    C#發(fā)送和接收HTTP請(qǐng)求類HttpWebRequest的用法

    這篇文章主要給大家介紹了關(guān)于C#發(fā)送和接收HTTP請(qǐng)求類HttpWebRequest用法的相關(guān)資料,C#中的HttpWebRequest是一個(gè)用于發(fā)送HTTP請(qǐng)求的類,它可以用于向Web服務(wù)器發(fā)送GET、POST、PUT、DELETE等請(qǐng)求,需要的朋友可以參考下
    2024-06-06
  • C#實(shí)現(xiàn)代碼在PowerPoint演示文稿中添加超鏈接

    C#實(shí)現(xiàn)代碼在PowerPoint演示文稿中添加超鏈接

    超鏈接是一種可點(diǎn)擊的元素,通常嵌入在文本或圖片中,本文將演示如何使用 Spire.Presentation for .NET 在 PowerPoint 中以編程方式添加超鏈接,有需要的小伙伴可以了解下
    2026-03-03

最新評(píng)論

政和县| 汨罗市| 阿拉善右旗| 江城| 前郭尔| 晴隆县| 宁武县| 灯塔市| 崇阳县| 昭觉县| 合水县| 新宾| 石家庄市| 山东省| 高淳县| 德令哈市| 吉首市| 淮安市| 吕梁市| 凤翔县| 宁强县| 双桥区| 含山县| 皮山县| 石楼县| 连城县| 胶南市| 独山县| 子长县| 泉州市| 洛阳市| 廉江市| 福贡县| 巴彦淖尔市| 泰兴市| 资兴市| 莱西市| 公主岭市| 镇江市| 河间市| 拉孜县|