Vérifier existance objet dans un PDF via VBA
Bonjour à tous,
J'enregistre via VBA mon Excel en PDF avec ouverture après enregistrement. Je demande à l'utilisateur de signer numériquement le PDF. Ceci donne création à un objet appelé "Signature2" donc je teste l’objet pour valider que le PDF a correctement été signé.
Si c'est le cas pas de soucis l’objet existe il est validé et tout est cool. Mais dans le cas ou l'utilisateur n'a pas signé, l’objet n'existe pas et Excel me met une erreur "Objet Requis" ce qui est normal. Le soucis est que je ne sais pas comment vérifier l'existence de l'objet. J'ai bien trouvé le "exists" dans le SDK Acorbat mais je n'arrive pas à l'utiliser correctement. Quelqu'un aurait-il la solution ?
Voici mon code actuel sans la vérification de l'existence de l'objet.
Set AVDoc = CreateObject("AcroExch.AVDoc")
If AVDoc.Open(Chemin, "") Then 'Si PDF Ouvert
Set PDDoc = AVDoc.GetPDDoc
Set JSO = PDDoc.GetJSObject
Set x = JSO.getField("Signature2")
z = x.signatureValidate
If z = 1 Then
MsgBox "Signé.", vbMsgBoxSetForeground + vbExclamation, "Test OK"
Else
MsgBox "L'objet n'existe pas"
GoTo Signature
End If
End If
Re, alors après pas mal de recherche sur les forum Acrobat anglais, j'ai trouvé mon bonheur. Donc je partage si quelqu'un cherche un jour une solution. Elle n'est pas parfaite car ne réalise pas ce que je voulais au départ à savoir vérifier si un objet existe mais c'est un contournement. Étant donné que mon PDF est un PDF simple avec juste une signature, il ne contiendra qu'un seul objet au final, je passe donc pas un .numfields()
qui me permet de vérifier le nombre d'objet, si ce dernier est à zéro alors pas de signature. Je garde quand même une vérification finale de la signature au cas ou elle aurait été effacée après, ce qui aurai pour effet de garder l'objet sans qu'elle ne soit valide pour autant, voici mon code, assez content d'avoir trouvé par moi même pour une fois
L'avantage de ce code est que si la personne ferme le PDF, il sera de nouveau ouvert pour demander la signature, on évite les by-pass (Je connais trop mes collègues)
Signature:
MsgBox "Veuillez signer numériquement le rapport.", vbMsgBoxSetForeground + vbInformation, "Signature"
Set App = CreateObject("AcroExch.app")
Set AVDoc = CreateObject("AcroExch.AVDoc")
If AVDoc.Open(Chemin, "") = True Then 'Si PDF non ouvert
Set PDDoc = AVDoc.GetPDDoc
Set JSO = PDDoc.GetJSObject
If JSO.numfields() = 0 Then
GoTo Signature
Else
Set x = JSO.getField("Signature2")
z = x.signatureValidate
If z = 0 Then
MsgBox "Le rapport d'audit n'a pas été signé.", vbMsgBoxSetForeground + vbExclamation, "Fichier non signé"
GoTo Signature
Else
GoTo Fin
End If
End If
End If
Fin:
If AVDoc.Open(Chemin, "") = False Then 'Si PDF ouvert
PDDoc.Close
AVDoc.Close (True)
App.Hide
End If
'Réinitialisation des objets
Set x = Nothing
Set JSO = Nothing
Set PDDoc = Nothing
Set AVDoc = Nothing