IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Signature manuscrite tablette


Sujet :

JavaScript

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2015
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Distribution

    Informations forums :
    Inscription : Mars 2015
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Signature manuscrite tablette
    Bonjour a tous. Je requiers votre aide sur un soucis que je rencontre au boulot.
    Je vais essayer d'être clair.
    Je développe un outils permettant de créer des rapport d'interventions lors de nos déplacements extérieurs.
    Je développe en html css, avec du js en cas de besoin.
    Notre société utilise comme logiciels de developpement pour nos appli métier OPENEDGE PROGRESS (pour ceux qui connaissent).
    Mon appli tourne correctement, mais je bute sur un point.
    Je souhaite à la fin du rapport demander une signature sur ipad.
    J'y arrive (d'un sens) avec le code fourni ici: https://github.com/szimek/signature_pad
    J'ai réussi à adapter le code pour mon utilisation (sous webspeed pour ceux qui connaissent)
    Mon fonctionnement est le suivant: signature coté client sur tablette, envoi des données, puis traitement côté serveur.
    Le premier soucis est qu'avec le logiciel que l'on utilise, on ne peux envoyer que des "petites" variables. Sur tablette le js permettant designer créer des variables de
    40 - 50000 caractères en base64, ce qui me renvoi des message d'erreur côté serveur. Donc première chose, j'ai découpé ma variable en plusieurs de max 10000 caractères.
    Ensuite, côté serveur, je ne peux pas enregistrer des champs trop volumineux dans ma base, donc je me suis dit que j'allai recréer une image en PNG de la signature.
    Pour ce, je mets toutes mes variables dans un fichier .txt pour recréer le code en base64.
    Ensuite, sur ubuntu, je fais la commande base64 -d toto2.txt > toto.png, pour générer mon png à partir du txt.
    Le soucis que je rencontre est le suivant : pour des signature ne dépassant pas 10000 caractères cela fonctionne, mais au dela l'image à cette allure:
    Pièce jointe 172400
    les 10000 premiers caractères (variable1) sont correctement interprêtés et l'image est nickel, mais ensuite le reste est retranscrit "brouillé".

    Pour info : base 64 me renvoi ceci : base64: invalid input
    Code js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    window.onresize = resizeCanvas;
    resizeCanvas();
     
    signaturePad = new SignaturePad(canvas);
     
    clearButton.addEventListener("click", function (event) {
        signaturePad.clear();
    });
     
    saveButton.addEventListener("click", function (event) {
        if (signaturePad.isEmpty()) {
            alert("Veuillez signer dans la Zone Blanche");
        } else {
     
            /*La fonction windows open sert a afficher à l'ecran une variable*/
    		/*window.open(signaturePad.toDataURL());	*/
     
    		/*lenght sert à compter le nombre de caractère dans une chaine*/
    		lg = (signaturePad.toDataURL()).length;				
    		alert(lg);
     
    		$('#signature1').val(signaturePad.toDataURL().substr(0,10000));						
    	        $('#signature2').val(signaturePad.toDataURL().substr(10001,20000));
    		$('#signature3').val(signaturePad.toDataURL().substr(20001,30000));
    		$('#signature4').val(signaturePad.toDataURL().substr(30001,40000));
    		$('#signature5').val(signaturePad.toDataURL().substr(40001,50000));		
     
    		$('#lg').val(lg);	
     
    		/*$('#signature1').val(signaturePad.toDataURL());*/
    		$('#exec_prev').submit();						
        }	
    });
    J'espère avoir été clair!
    A bientôt.

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur Hospitalier
    Inscrit en
    Juillet 2004
    Messages
    993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Hospitalier
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 993
    Points : 1 768
    Points
    1 768
    Billets dans le blog
    1
    Par défaut
    Trop de "je peux pas par ce que" enregistrer une image a gros format par PHP ou apache l'autorise pas, ou est limité a cause de sa configuration ou autre donc il y a toujours d'autre moyen d'éviter ce problème comme envoyer le fichier par ftp, augmenter la taille de la limit de l'upload de fichier au niveau du server web ... passer par du NOSQL.
    Un Environnement REST API (Web mobile POST GET PUT DELETE HEAD ...) est destiné a combler le problème limitation et de ralentissement et adapté a envoyer via un format json toute la chaine que tu souhaite...
    Niveau base de donnée l'image est souvent enregistrer sous format type blob en base de donnée donc pas si limité si tu as omis de choisir le bon format d'image etc ...

    Et l'affichage en js de ton image ce fera simplement en récupérant ta chaine blob de ta db relationnelle ou pas pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var data = "data:image/png;base64,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IIAAAggggAACCCBQQIDA5Sp6LC3yV83sswXqhksigAACCCCAAAIIIIDAIEDgMh24fGBmT9FiEEAAAQQQQAABBBBAoJwAgct04PL+sAamXC1xZQQQQAABBBBAAAEETi5A4HK1AbxhZi8FbeIVM9O/cyCAAAIIIIAAAggggEAhAQKXh+FfNbNnhwxi7xC0FGqZXBYBBBBAAAEEEEAAAU+AwIXmgAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtULELhUX0UUEAEEEEAAAQQQQAABBAhcaAMIIIAAAggggAACCCBQvQCBS/VVRAERQAABBBBAAAEEEECAwIU2gAACCCCAAAIIIIAAAtUL/H+u48lGfYZ3QAAAAABJRU5ErkJggg==";
     
    console.log("devicePixelRatio: ", window.devicePixelRatio);
    console.log("data length: ", data.length);
     
    img = new Image();
    img.src = data;
      //document.getElementById('signature-pad').appendChild(img);
    document.body.appendChild(img);
    Petite piste pour prévoir dans ton implémentation un module nodejs (pour rester sur le js) mais tout a fait possible dans un autre languages côté serveur de récupérer les données via ton propre client ftp.
    https://www.npmjs.com/package/jsftp

  3. #3
    Membre averti
    Profil pro
    à la bougie alors
    Inscrit en
    Mai 2006
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : à la bougie alors

    Informations forums :
    Inscription : Mai 2006
    Messages : 224
    Points : 362
    Points
    362
    Par défaut
    edit:22/03/2015 19:46 mal lu

    substr prend la position du premier caractère et une longueur

    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...substr(0,10000);
    ...substr(10000,10000);
    ...substr(20000,10000);
    etc.

Discussions similaires

  1. [iPad] librairie pour champ signature (manuscrite) IOS
    Par jason42 dans le forum Objective-C
    Réponses: 2
    Dernier message: 20/02/2013, 18h59
  2. [WD-2010] Comment inserer une signature manuscrite, word?
    Par Georges974 dans le forum Word
    Réponses: 1
    Dernier message: 14/11/2012, 06h06
  3. PDA signature manuscrite
    Par nawara3003 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 28/02/2010, 17h04
  4. Digitaliser une signature manuscrite
    Par mbartolacci dans le forum Droit
    Réponses: 2
    Dernier message: 09/10/2008, 11h05
  5. Capter la signature manuscrite dans un formulaire
    Par ClaudeLELOUP dans le forum IHM
    Réponses: 4
    Dernier message: 14/12/2007, 22h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo