C#實(shí)現(xiàn)PDF簽名時(shí)添加時(shí)間戳的2種方法(附VB.NET代碼)
在PDF添加簽名時(shí),支持添加可信時(shí)間戳來保證文檔的法律效應(yīng)。本文,將通過C#程序代碼介紹如何添加可信時(shí)間戳,可通過2種方法來實(shí)現(xiàn)。文中附上VB.NET代碼,有需可供參考。
一、程序運(yùn)行環(huán)境
- 編譯環(huán)境:Visual Studio/.NetFramework 4.8
- 所需測試文件:PDF、.pfx數(shù)字證書及秘鑰、PDF類庫(spire.pdf.dll 7.5.7)
- 可信時(shí)間戳服務(wù)器:URL地址
注:VS程序中,在“解決方案資源管理器中”先引用spire.pdf.dll文件,如下圖,
這里可以通過Nuget下載該文件。或者在手動(dòng)下載引用,dll文件在下載后的文件包BIN文件夾下,如本次測試使用的是.NET4.0下面的dll,即spire.pdf_7.5.7\BIN\NET4.0\Spire.Pdf.dll,如圖:
二、程序代碼
添加簽名時(shí),這里可分別通過兩個(gè)類來實(shí)現(xiàn),即PdfSignature 和 PdfOrdinarySignatureMaker類。下面分別以兩個(gè)代碼示例展示如何簽名并添加時(shí)間戳。
1. 通過PdfSignature類來簽名,添加時(shí)間戳
C#
using Spire.Pdf; using Spire.Pdf.Security; using System.Drawing; namespace TimeStamp { class Program { static void Main(string[] args) { //加載PDF文檔 PdfDocument pdf = new PdfDocument(); pdf.LoadFromFile("sample.pdf"); //獲取第2頁 PdfPageBase page = pdf.Pages[1]; //加載數(shù)字證書(.pfx文件及秘鑰) PdfCertificate cert = new PdfCertificate("test.pfx", "123456"); //加載簽名圖片 Spire.Pdf.Graphics.PdfImage image = Spire.Pdf.Graphics.PdfImage.FromFile("sign.png"); //添加與圖片大小相同的簽名到第2頁指定坐標(biāo)位置 PdfSignature signature = new PdfSignature(page.Document, page, cert, "sign1");//添加數(shù)字簽名 signature.Bounds = new RectangleF(new PointF(400,700), new SizeF(image.Width, image.Height));//設(shè)置簽名的頁面坐標(biāo)位置、大小與圖片相同 signature.SignImageSource = image; signature.GraphicsMode = Spire.Pdf.Security.GraphicMode.SignImageAndSignDetail;//設(shè)置簽名為圖片模式 signature.SignImageLayout = Spire.Pdf.Security.SignImageLayout.Stretch; signature.DocumentPermissions = Spire.Pdf.Security.PdfCertificationFlags.AllowFormFill | Spire.Pdf.Security.PdfCertificationFlags.AllowComments;//文檔權(quán)限 //配置時(shí)間戳服務(wù)器,添加時(shí)間戳 string url = "Your TimeStamp Server URL"; signature.ConfigureTimestamp(url); //signature.ConfigureTimestamp(url, "Author", "123654");//添加時(shí)間戳?xí)r設(shè)置用戶名和密碼 //保存文檔 pdf.SaveToFile("TimeStamp1.pdf",FileFormat.PDF); System.Diagnostics.Process.Start("TimeStamp1.pdf"); } } }
VB.NET
Imports Spire.Pdf Imports Spire.Pdf.Security Imports System.Drawing Namespace TimeStamp Class Program Private Shared Sub Main(args As String()) '加載PDF文檔 Dim pdf As New PdfDocument() pdf.LoadFromFile("sample.pdf") '獲取第2頁 Dim page As PdfPageBase = pdf.Pages(1) '加載數(shù)字證書(.pfx文件及秘鑰) Dim cert As New PdfCertificate("test.pfx", "123456") '加載簽名圖片 Dim image As Spire.Pdf.Graphics.PdfImage = Spire.Pdf.Graphics.PdfImage.FromFile("sign.png") '添加與圖片大小相同的簽名到第2頁指定坐標(biāo)位置 Dim signature As New PdfSignature(page.Document, page, cert, "sign1") '添加數(shù)字簽名 signature.Bounds = New RectangleF(New PointF(400, 700), New SizeF(image.Width, image.Height)) '設(shè)置簽名的頁面坐標(biāo)位置、大小與圖片相同 signature.SignImageSource = image signature.GraphicsMode = Spire.Pdf.Security.GraphicMode.SignImageAndSignDetail '設(shè)置簽名為圖片模式 signature.SignImageLayout = Spire.Pdf.Security.SignImageLayout.Stretch signature.DocumentPermissions = Spire.Pdf.Security.PdfCertificationFlags.AllowFormFill Or Spire.Pdf.Security.PdfCertificationFlags.AllowComments'文檔權(quán)限 '配置時(shí)間戳服務(wù)器,添加時(shí)間戳 Dim url As String = "Your TimeStamp Server URL" signature.ConfigureTimestamp(url) 'signature.ConfigureTimestamp(url, "Author", "123654");//添加時(shí)間戳?xí)r設(shè)置用戶名和密碼 '保存文檔 pdf.SaveToFile("TimeStamp1.pdf", FileFormat.PDF) System.Diagnostics.Process.Start("TimeStamp1.pdf") End Sub End Class End Namespace
簽名時(shí)間戳添加結(jié)果:
2. 通過PdfOrdinarySignatureMaker類來簽名,添加時(shí)間戳
C#
using Spire.Pdf; using Spire.Pdf.Graphics; using Spire.Pdf.Interactive.DigitalSignatures; using System.Drawing; using System.Security.Cryptography.X509Certificates; namespace TimeStamp2 { class Program { static void Main(string[] args) { //加載PDF文檔 PdfDocument doc = new PdfDocument(); doc.LoadFromFile("sample.pdf"); //加載pfx數(shù)字證書及秘鑰 X509Certificate2 x509 = new X509Certificate2("test.pfx", "123456"); //實(shí)例化PdfPKCS7Formatter類的對象 PdfPKCS7Formatter formatter = new PdfPKCS7Formatter(x509, false); formatter.TimestampService = new TSAHttpService("Your TimeStamp Server URL");//配置時(shí)間戳服務(wù)器 //添加簽名 PdfOrdinarySignatureMaker signatureMaker = new PdfOrdinarySignatureMaker(doc, formatter); IPdfSignatureAppearance signatureAppearance = new PdfCustomSignatureAppearance(); signatureMaker.MakeSignature("sign", doc.Pages[1], 400, 650, 150, 80, signatureAppearance); //保存簽名后的PDF文檔 doc.SaveToFile("TimeStamp2.pdf", FileFormat.PDF); System.Diagnostics.Process.Start("TimeStamp2.pdf"); } public class PdfCustomSignatureAppearance : IPdfSignatureAppearance { public void Generate(PdfCanvas canvas) { PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 12), true); canvas.DrawString("SIGNED! A CLASS.\n By Tom Smith", font, PdfBrushes.Red, new PointF(0, 0)); } } } }
VB.NET
Imports Spire.Pdf Imports Spire.Pdf.Graphics Imports Spire.Pdf.Interactive.DigitalSignatures Imports System.Drawing Imports System.Security.Cryptography.X509Certificates Namespace TimeStamp2 Class Program Private Shared Sub Main(args As String()) '加載PDF文檔 Dim doc As New PdfDocument() doc.LoadFromFile("sample.pdf") '加載pfx數(shù)字證書及秘鑰 Dim x509 As New X509Certificate2("test.pfx", "123456") '實(shí)例化PdfPKCS7Formatter類的對象 Dim formatter As New PdfPKCS7Formatter(x509, False) formatter.TimestampService = New TSAHttpService("Your TimeStamp Server URL") '配置時(shí)間戳服務(wù)器 '添加簽名 Dim signatureMaker As New PdfOrdinarySignatureMaker(doc, formatter) Dim signatureAppearance As IPdfSignatureAppearance = New PdfCustomSignatureAppearance() signatureMaker.MakeSignature("sign", doc.Pages(1), 400, 650, 150, 80, _ signatureAppearance) '保存簽名后的PDF文檔 doc.SaveToFile("TimeStamp2.pdf", FileFormat.PDF) System.Diagnostics.Process.Start("TimeStamp2.pdf") End Sub Public Class PdfCustomSignatureAppearance Implements IPdfSignatureAppearance Public Sub Generate(canvas As PdfCanvas) Dim font As New PdfTrueTypeFont(New Font("Arial", 12), True) canvas.DrawString("SIGNED! A CLASS." & vbLf & " By Tom Smith", font, PdfBrushes.Red, New PointF(0, 0)) End Sub End Class End Class End Namespace
簽名時(shí)間戳添加結(jié)果:
到此這篇關(guān)于C#實(shí)現(xiàn)PDF簽名時(shí)添加時(shí)間戳的2種方法(附VB.NET代碼)的文章就介紹到這了,更多相關(guān)C# PDF簽名添加時(shí)間戳 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#中使用jieba.NET、WordCloudSharp制作詞云圖的步驟
之前一篇文章介紹的是使用Python的jieba、wordcloud的庫生成詞云圖,本文則介紹在C#中如何使用jieba.NET、WordCloudSharp庫生成詞云圖,感興趣的朋友一起看看吧2021-07-07C#實(shí)現(xiàn)順序表(線性表)完整實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)順序表(線性表)的方法,結(jié)合完整實(shí)例形式分析了順序表的原理及C#相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-06-06C#使用ICSharpCode.SharpZipLib.dll進(jìn)行文件的壓縮與解壓功能
這篇文章主要介紹了C#使用ICSharpCode.SharpZipLib.dll進(jìn)行文件的壓縮與解壓功能,需要的朋友可以參考下2017-12-12基于WPF實(shí)現(xiàn)經(jīng)典紙牌游戲
這篇文章主要為大家詳細(xì)介紹了如何溧陽WPF實(shí)現(xiàn)經(jīng)典紙牌游戲,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)WPF有一定的幫助,需要的可以參考一下2023-02-02C#程序中session值的保存方法以及轉(zhuǎn)為字符串的方法總結(jié)
這篇文章主要介紹了C#程序中session值的保存方法以及轉(zhuǎn)為字符串的方法總結(jié),經(jīng)常被用于ASP.NET網(wǎng)絡(luò)編程項(xiàng)目中,需要的朋友可以參考下2016-04-04C# NullReferenceException解決案例講解
這篇文章主要介紹了C# NullReferenceException解決案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08