一些插件和程序可以執行此操作;有沒有任何示例或教程如何使用.net和itextSharp做到這一點?如何在不破壞以前的簽名的情況下簽名並簽名pdf已註冊
我需要採取簽署的PDF格式,並在所有頁面上蓋印圖像,並添加另一個簽名。 打開文件時,文檔上的第一個簽名必須有效。
在此先感謝。
一些插件和程序可以執行此操作;有沒有任何示例或教程如何使用.net和itextSharp做到這一點?如何在不破壞以前的簽名的情況下簽名並簽名pdf已註冊
我需要採取簽署的PDF格式,並在所有頁面上蓋印圖像,並添加另一個簽名。 打開文件時,文檔上的第一個簽名必須有效。
在此先感謝。
當您需要文檔上的第一個簽名在打開文件時必須有效,我假定您首先談論的是打開當前的Adobe Reader版本。
在這種情況下,您首先必須意識到允許和不允許的更改取決於第一個簽名本身。請參閱this answer以瞭解Adobe從Adobe Acrobat &閱讀器第9版開始考慮的「允許和禁止的更改」信息。
因此,採取簽名的PDF和所有頁面上印記的圖像,並且還添加其他簽名並不能否定(在Adobe軟件的眼)的過程中初始簽名,簽署PDF必須
或者是未經(即初始簽名僅是批准簽名)
或爲與註釋認證,形式填充在和數字簽名,允許(即初始簽名是允許這些類型的更改的認證簽名)並且有一個空的簽名字段供您簽署。
如果該簽名的pdf已經包含多個簽名,則它們都不會通過鎖定信息添加任何其他限制。
(而且我假定PDF既不是加密的,也不包含動態XFA表單;將事情變得更加複雜化。)
如果這些要求得到滿足,你可以使用PdfStamper
你從靜態PdfStamper
方法來檢索
public static PdfStamper CreateSignature(PdfReader reader, Stream os, char pdfVersion, string tempFile, bool append)
,其中最終bool
參數值必須是true
(即你必須努力工作以追加模式不壞初始簽名)。
使用此PdfStamper
,您可以通過註釋在文檔頁面上添加圖像。的iText in Action — 2nd Edition樣品TimetableAnnotations3.java/TimetableAnnotations3.cs說明如何使用PdfStampers.
添加註釋然後添加你的簽名像往常一樣,無論是創建一個新的簽名域或使用空單。您可以在白皮書Digital Signatures for PDF documents中找到簽署過程的詳細信息;可以找到相當於該白皮書中Java樣本的C#樣本here on sourceforge。PS:我在這篇文章中總是強調在Adobe軟件的眼中。在談論認證PDF時,Adobe在這裏很接近PDF standard。對於已簽名但未經認證的PDF,Adobe適用的規則類似於爲認證文檔指定的規則。
ossum,它適用於我...謝謝... –
Public Function sign(keystore As String, level As Integer, src As String, name As String, dest As String, sig As String, pass As String)
' Try
'Dim store As System.Security.Cryptography.X509Certificates.X509Store = New System.Security.Cryptography.X509Certificates.X509Store
'store.Open(System.Security.Cryptography.X509Certificates.OpenFlags.ReadOnly)
'Dim sel As System.Security.Cryptography.X509Certificates.X509Certificate2Collection
' If sig <> "" And pass <> "" Then
Try
Dim y As Int16 = 200
' For i As Integer = 0 To sel.Count - 1
Dim pdfReader As PdfReader = New PdfReader(src)
Dim signedPdf = New FileStream(dest, FileMode.Create)
Try
Dim cert As X509Certificate2 = New X509Certificate2(sig, pass)
Dim cp As Org.BouncyCastle.X509.X509CertificateParser = New Org.BouncyCastle.X509.X509CertificateParser()
Dim chain As Org.BouncyCastle.X509.X509Certificate() = New Org.BouncyCastle.X509.X509Certificate() {cp.ReadCertificate(cert.RawData)}
Dim stamper As PdfStamper
stamper = PdfStamper.CreateSignature(pdfReader, signedPdf, "0"c, Nothing, True)
Dim signatureAppearance As PdfSignatureAppearance = stamper.SignatureAppearance
'signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage)
signatureAppearance.SetVisibleSignature(name)
signatureAppearance.CertificationLevel = level
Dim externalSignature As IExternalSignature = New X509Certificate2Signature(cert, "SHA-1")
' Dim digest As IExternalSignature = New BouncyCastleDigest
' signatureAppearance.s
'signatureAppearance.SetVisibleSignature(New Rectangle(50,50,50,
signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION
MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, Nothing, Nothing, Nothing, 0, CryptoStandard.CADES)
' MakeSignature.
' End If
' Catch ex As Exception
'MsgBox(ex.Message)
' End Try
Catch ex As Exception
MsgBox("Signature File Password is not correct for the user Id :" & error_userid)
'Exit Function
End Try
Catch ex As Exception
End Try
Return 0
End Function
標記圖像...通過註釋或在內容中?如果初始簽名禁止,則僅添加另一個簽名是個問題。 – mkl