PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → PDFSIGNE Structure pdf
PDFSIGNE Structure pdf
Débuté par remy.bisson, 14 jan. 2021 10:30 - 10 réponses
Posté le 14 janvier 2021 - 10:30
Bonjour,

Je souhaiterais utiliser la fonction PDFSigne pour signer des fichiers pdf. Je rencontre de sérieux problèmes avec cette fonction. Après signature du fichier, sa structure n'est plus correcte.
Je souhaitais qu'un fichier soit signé sur le poste local, puis soit envoyé pour signature pas des intervenants extérieurs sur YouSign. Le problème est que YouSign rejette le fichier pour structure incorrecte.
J'ai donc fait le test (https://www.pdf-online.com), le site me renvoie différents éléments qui confirme que la structure du fichier n'est plus correcte après signature. (Pour info, j'ai fait le test avant signature, pas de soucis).

Est-ce que d'autres personnes utilisent cette fonction, par exemple pour signer des factures à destination de chorus?

(J'envoie une requête au support pour signaler le problème)
Posté le 25 février 2021 - 15:23
Bonjour,

J'ai développé un programme d'intégration Yousign très pratique en WEBSERVICE Rest.

Que souhaitez vous ?

Cordialement,
Posté le 17 mars 2021 - 11:36
Ludovic a écrit :
Bonjour,

J'ai développé un programme d'intégration Yousign très pratique en WEBSERVICE Rest.

Que souhaitez vous ?

Cordialement,


Bonjour Ludovic,

Est-ce que ce programme d'intégration peut être partagé avec la communauté ?

Merci d'avance,
Christian
Membre enregistré
72 messages
Posté le 17 mars 2021 - 16:29
Vous pouvez signer un pdf avec un certificat installé sur la machine, c'est tout aussi simple (certificat autosigné ou certificat acheté à l'extérieur). C'est très simple et cela ne nécessite pas de service extérieur.

Voilà un bout de code qui insère une image signature dans la page 1 du PDG (pas encore trouvé un code qui améliore sa définition).

-----------------

NomFichierPDF est une chaîne

NomFichierPDF = fSélecteur(SysRep(srMesDocuments), "", "Sélectionnez un fichief pdf", "Fichier pdf (*.pdf)" + TAB + "*.pdf", "*.pdf")
SI NomFichierPDF~="" ALORS RETOUR
SI PAS OuiNon("Signer ce fichier pdf ?") ALORS RETOUR

CertificatNom, CertificatNumSerie sont des chaînes

// Lecture de paramètres : le nom et le n° de série du certificat installé sur la machine.
gf_PARAMPLUS("L","SSL_CERTIFICAT","",CertificatNom)
gf_PARAMPLUS("L","SSL_CERTIFICAT_NUMSERIE","",CertificatNumSerie)

SI CertificatNom~="" ou CertificatNumSerie~="" ALORS RETOUR

UnCertificat est un Certificat
tabCertificat est un tableau de Certificats
largeur,hauteur est un entier
police est une Police
MonImage est une Image

tabCertificat = CertificatListe()

POUR TOUT UnCertificat DE tabCertificat
// Le numéro de série est unique pour tous les certificats émis par une autorité de certification donnée.
SI UnCertificat..NuméroSérie = CertificatNumSerie ALORS
SI UnCertificat..ValidePourSignature = Faux ALORS
ToastAffiche(ChaîneConstruit("Le certificat sélectionné %1 ne permet de pas de générer une signature. Il ne possède probablement pas de clé privée, ou il lui manque une des caractéristiques requises pour effectuer une signature.",UnCertificat..Nom))
SINON
// On vérifie la validité du certificat
bufSignature est une Buffer
bufSignature = CertificatSigneFichier(NomFichierPDF, UnCertificat)
SELON CertificatVérifieFichierSignatureBuffer(NomFichierPDF, bufSignature)
CAS certificatOk // Le certificat est valide
// On applique la signature
MaSignature est une pdfSignature
MaSignature..Certificat = UnCertificat
GénérerImage()

MaSignature..X = 15
MaSignature..Y = 280
MaSignature..Hauteur = 10
MaSignature..Largeur = 25
MaSignature..Libellé = ""
MaSignature..Image = MonImage
SI PDFSigne(NomFichierPDF,MaSignature) ALORS
SI OuiNon("Le fichier a bien été signé. L'ouvrir ?") ALORS
LanceAppliAssociée(NomFichierPDF)
FIN
SINON
Erreur(ErreurInfo)
FIN

CAS certificatInvalide : ToastAffiche(ChaîneConstruit("Le certificat %1 est invalide.",UnCertificat..Nom))
CAS certificatExpiré : ToastAffiche(ChaîneConstruit("Le certificat %1 est expiré",UnCertificat..Nom))
CAS certificatNonFiable : ToastAffiche("La signature est valide mais la racine de confiance du certificat est ""non fiable"".")
AUTRE CAS : ToastAffiche("Un problème a été détecté pour ce certificat."+RC+ErreurInfo())
FIN
FIN
FIN
FIN



PROCÉDURE INTERNE GénérerImage()

img,txt est un Champ

// Définition de la police de caractère
police=PoliceCrée("Arial",6,iNormal,Noir)

// Création d'un champ texte permettant de déterminer la largeur et hauteur du texte
txt<-ChampCrée(MaFenêtre..Nom+"."+DonneGUID(),typLibellé,0,0,100,100,Faux)
txt..Valeur = "MA SOCIETE"+RC+"FRA+" "+"75017"+" "+"PARIS"+RC+"FR760456046948"
txt..Police = police

// Détermination des largeurs et hauteur
largeur = Arrondi(TexteLargeur(txt,txt..Valeur) +6,0)
hauteur = Arrondi(TexteHauteur(txt,txt..Valeur) +6,0)

// Création d'un champ image où on va dessiner le texte
img<-ChampCrée(MaFenêtre..Nom+"."+DonneGUID(),typImage,0,0,100,100,Faux)
img..ImageMode = imgNormal

// Préparation de l'image
img..Largeur = largeur
img..Hauteur = hauteur
img..CouleurFond = iBlanc

// Initialise le dessin dans un champ Image
dDébutDessin(img)
//dRedimensionne(img,largeur,hauteur)
dPolice(police)

// Dessin d'un texte dans l'image :
dTexte(3,3,"MA SOCIETE") // Raison sociale de ma société
dTexte(3,12,"FRA+" "+"75017"+" "+"PARIS") // CP/Ville
dTexte(3,21,"FR760456046948") // SIRET

MonImage=img

// Suppression des champs temporaires
ChampSupprime(txt)
ChampSupprime(img)
FIN

--
Gestan, le couteau Suisse de la gestion d'entreprise.
https://www.gestan.fr
Posté le 17 mars 2021 - 18:15
Bonjour ICS01,

Je te remercie pour ta réponse, mais mon besoin est différent.
En effet, il faut que j'envoie un PDF à un client pour qu'il le signe électroniquement. C'est pour cela que je suis intéressé par yousign.
Posté le 17 mars 2021 - 18:18
Bonjour ICS01,

Comment en obtenir un certificat gratuitement ?

Merci par avance

Rastam
Membre enregistré
72 messages
Posté le 17 mars 2021 - 22:03
@Christian : OK, effectivement il faut alors une autre solution

@Rastam : un tuto ici http://wiki.gestan.fr/doku.php…

--
Gestan, le couteau Suisse de la gestion d'entreprise.
https://www.gestan.fr
Membre enregistré
9 messages
Posté le 18 mars 2021 - 09:17
Bonjour,

J'ai des documents qui doivent être signés en interne et par des clients (double signature).
Mon idée était donc d'avoir un certificat local (j'ai choisi certeurope pour mes tests, j'ai aussi testé avec un certificat auto-signé). Une fois le document signé, il est transféré sur un portail (développé en interne) pour être mis à disposition du client. Le portail utlise yousign pour la signature du client.

Mon problème est que yousign refuse le pdf car sa structure n'est pas conforme.
Je me suis aperçu que c'est la fonction pdfsigne qui rend le pdf non conforme. Il est possible de tester la structure d'un fichier pdf avec https://www.pdf-online.com/

J'ai envoyé une requête au support PcSoft le 19 janvier.

--
Rémy BISSON
Gestélia INFORMATIQUE
Membre enregistré
3 748 messages
Posté le 18 mars 2021 - 09:38
Rémy,
Puisque tu utilises déjà yousign pour la signature du client,
Pourquoi ne pas l'utiliser déjà pour la première signature ?
Membre enregistré
9 messages
Posté le 18 mars 2021 - 10:18
Pour des raisons financières (nous avons beaucoup de documents à signer), signer avec un certificat local est beaucoup moins cher quand on a du volume.
Aussi et surtout par simplicité pour l'utilisateur. Il génère son document (des contrats par exemple), le document est automatiquement signé au moment de la génération sans manipulation à faire pour l'utilisateur. Quand on passe par yousign, il faut pour chaque document une validation avec un code envoyé sur téléphone...

--
Rémy BISSON
Gestélia INFORMATIQUE
Membre enregistré
3 748 messages
Posté le 18 mars 2021 - 13:05
Pour info Norbert a mis un tutoriel pour factur x sur le dépôt
Il utilise la signature du pdf
Regarde on ne sait jamais
https://depot.pcsoft.fr/publish.awp…