1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| sub SignPDF()
1
On Error Resume Next
Dim Acro_App As Acrobat.AcroApp
Dim Acro_PDdoc As Acrobat.AcroPDDoc
Dim oJS As Object
Dim SGH_Ppklite As Object
Dim Signature_Coord() As Variant
Dim SignField As Object
Dim ppklite_login As Boolean
Dim Getsignfield As Object
Dim OinforArray() As String
Dim Signdone As Boolean
Const strFichier = "Spécifier l'emplacement du fichier PDF à signer"
Const strFichierout = "Spécifier l'emplacement du fichier pdf signé"
Const strSignFName = "spécifier l'emplacement du certificat au format pfx"
Const pass = "mot de passe du certificat"
Signature_Coord = Array(0, 0, 0, 0) 'Emplacement de la signature, au cas d'espèce, la signature est invisible car Array(0, 0, 0, 0)
Set Acro_App = New Acrobat.AcroApp
Set Acro_PDdoc = New Acrobat.AcroPDDoc
If Acro_PDdoc.Open(strFichier) Then
Set oJS = Acro_PDdoc.GetJSObject
Set SGH_Ppklite = oJS.security.getHandler("Adobe.PPKLite", True)
Set SignField = oJS.AddField("MysignField", "signature", 0, Signature_Coord)
ppklite_login = SGH_Ppklite.login(pass, strSignFName)
If ppklite_login = False Then GoTo 2 'si le mot de passe est invalide alors la valeur renvoyée est fausse
'SGH_Ppklite.setPasswordTimeout pass, 300 'délai d'attente nécessaire pour l'intégration du mot de passe mais n'a aucun effet sur mon PC
Set Getsignfield = oJS.GetField("MysignField")
OinforArray = VBA.Split("", ",")
Signdone = Getsignfield.signatureSign(SGH_Ppklite, OinforArray, strFichierout) 'Valeur de type type booléen, doit renvoyer impérativement la valeur vrai pour insérer automatique la signature numérique
If Signdone = False Then GoTo 1 'reboucle car la valeur renvoyée est fausse
a.logout
End If
Set z = Nothing
Set a = Nothing
Set si = Nothing
Set f = Nothing
Exit Sub
2
MsgBox "Le mot de passe que vous avez saisi n'est pas valide.", vbCritical, "Mot de passe valide requis" '
Exit Sub
End Sub |
Partager