Donnez vie à vos documents numériques !
 

Personnalisation d’un bouton permettant d’importer une pièce jointe

abracadabraPDF Forums PDF – Général Personnalisation d’un bouton permettant d’importer une pièce jointe

  • Ce sujet est vide.
Affichage de 18 réponses de 51 à 68 (sur un total de 68)
  • Auteur
    Réponses
  • #63974
    Merlin
    Maître des clés

    Maintenant faut que je trouve un moyen de nommer chaque pièce jointe.

    C’est quelque chose qu’il faut faire avant d’importer la pièce jointe dans le PDF, ensuite on ne peut plus modifier son nom.

    #63975
    DavidFeder
    Participant

    Bonjour Merlin,
    Du coup ce n’est pas possible de faire ça pour un pdf dans lequel l’utilisateur final ajoute lui même les pièces jointes? :s

    #63976
    bebarth
    Maître des clés

    bonjour,
    On peut ne pas nommer directement la pièce jointe à condition de connaitre sa position dans la liste des pièces jointe.
    Donc aucun problème si il n’y en a qu’une, si c’est la première ou si c’est la dernière… Si elle se trouve n’importe où au milieu des autres ???
    @+
    :bonjour:

    #63977
    DavidFeder
    Participant

    Bonjour,

    Merci pour ta réponse.
    Je ne suis pas sûr de bien comprendre :)
    On ne sait pas nommer la pièce jointe au moment de l’ajouter, via le bouton qui exécute le script?Dans ce cas on pourrait nommer simplement genre « Annex1, Annex2, etc ».
    Sans devoir carrément indiquer le nom du fichier sur le bouton « ouvrir », ça ne pourrait pas fonctionner?

    #63978
    Merlin
    Maître des clés

    On ne sait pas nommer la pièce jointe au moment de l’ajouter, via le bouton qui exécute le script ?

    La réponse est un non négatif et définitif. Les JavaScript qui s’exécutent dans les documents PDF ou dans Acrobat ne peuvent pas accéder aux ressources du système.
    Sécurité oblige.

    S’il s’agissait de pièces jointes au format PDF on pourrait éventuellement au préalable les ouvrir et les enregistrer-sous un nouveau nom avant de les importer, mais ça resterait un gros bricolage pas très intuitif pour l’utilisateur, et limité au format PDF.

    #63979
    DavidFeder
    Participant

    Merci :) Même si c’est un non :D
    finalement j’ai décidé de simplement mettre un bouton qui va ouvrir le panneau « attachment », avec ce javascript:
    app.execMenuItem(« ShowHideFileAttachment »);

    Par contre je suis bloqué par un autre truc :s
    La limitation du nombre de pièces jointes ne fonctionne pas correctement quand j’ai plusieurs boutons/champs sur une même page.
    En gros, sur une même page, j’ai un bouton qui permet d’ajouter max 1 pièce jointe, puis un autre qui devrait permettre d’en ajouter 2. Il semble qu’il compte le total de pièces jointes sur la page, et pas par « bouton ».

    J’ai utilisé ce code:

    Code:
    var filenamesfield = this.getField(« files_field_1 »).rect;
    var nbPJ=0;
    this.syncAnnotScan();
    var annots=this.getAnnots();
    if (annots!=null) {
        for (var i=0; i        if (annots.type== »FileAttachment ») {
                annots.delay=true;
               
                annots.delay=false;
                nbPJ++;
            }
        }
    }
    if (nbPJ==1) {
        app.alert(« You can attach maximum 1 file. Please merge your documents if necessary. »);
        var attachbutton = getField(« attach_1 »);
        var attachedbutton = getField(« attached_1 »);
        attachbutton.display = display.hidden;
        attachedbutton.display = display.visible;
    } else {

    var annot = this.addAnnot({
    page: 4,
    type: « FileAttachment »,
    contents: « Double-clic to open »,
    attachIcon: « PushPin »,
    point: [-500,0],
    strokeColor: color.blue,
    });
    annot.author = annot.attachment.name;
    if (annot.attachment !== null) {
           

            var filenamesfield = this.getField(« files_field_1 »);
            if (filenamesfield.value == «  ») {
                filenamesfield.value = annot.attachment.name;
            }
            else {
                filenamesfield.value = filenamesfield.value + « n » + annot.attachment.name;
            }
            }

    }

    J’ai essayé en renommant « nbPJ » par « nbPJ1 », etc, mais ça le fait pas.
    Vous avez une idée de comment résoudre ce problème?

    #63980
    bebarth
    Maître des clés

    bonjour,
    Si on importe la pièce jointe :

    • à partir du panneau « Pièces jointes » d’Acrobat, on peut l’ouvrir via JavaScript en appelant le nom du fichier indiqué dans ce panneau.
    • via JavaScript avec la commande « importDataObject » on peut l’ouvrir via JavaScript en appelant le nom de l’objet « cName » définit lors de l’importation.
    • sur une page, en tant que commentaire (FileAttachment) on ne peut pas l’ouvrir via JavaScript.
    • [/list]@+
      :bonjour:

    #63981
    DavidFeder
    Participant

    Bonjour Berbarth,

    Super!!
    L’import via le panel ne convient pas pour ce projet.
    Dans ce cas ci, je ne veux pas spécialement utiliser de commentaire lié à une icone oldschool « moche » (je l’ai mise en dehors de la page d’ailleurs) donc utiliser l’autre méthode pourrait être la solution :)Il y a certains « désavantages » à utiliser cette méthode? (ImportDataObject)Tu pourrais partager le code pour l’import via ImportDataObject, et ensuite pour qu’un bouton ouvre la pièce jointe?
    Sur mon pdf, je devrais mettre plusieurs boutons pour que l’utilisateur puisse attacher un certain nombre de fichiers à chaque bouton.
    Je devrais pouvoir définir un nombre max de pièces jointes spécifique à chaque bouton.

    En fait au final c’est plus important que d’avoir des boutons pour ouvrir ces pièces jointes, comme je peux ouvrir le panneau pièces jointes d’un click sur un bouton, mais si les 2 sont possibles, c’est encore mieux :)

    #63982
    bebarth
    Maître des clés

    J’ai oublié un « détail » !!!
    « importDataObject » ne peut être utilisé directement depuis un bouton. Il lui faut certains privilèges :
    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_importDataObjectbc-68&rhtocid=_6_1_8_23_1_67
    Et pour ouvrir, on utilise « exportDataObject » :
    https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_exportDataObjectbc-31&rhtocid=_6_1_8_23_1_30

    Code:
    this.exportDataObject({cName: nomDeLobjet, nLaunch: 2});

    @+
    :bonjour:

    #63983
    DavidFeder
    Participant

    Bonjour,

    Merci beaucoup! Malheureusement je ne pourrai pas utiliser ImportDataObject comme certains utilisateurs risquent de ne pas avoir les droits sur leurs machines :s
    avec Annot, est-ce que vous auriez une solution pour limiter le nombre de fichiers, mais par « bouton », pas sur l’entièreté du document?

    #63984
    bebarth
    Maître des clés

    bonjour,
    Tu pourrais attribuer le nom du bouton utilisé dans une propriété de la pièce jointe (author par exemple) :

    Code:

    type: « FileAttachment »,
    author: event.target.name,

    et vérifier cette propriété lorsque tu comptes le nombre de pièces attribuées à ce bouton :

    Code:

    for (var i = 0; i     if (annots.type== »FileAttachment » && annots.author==event.target.name) {
            var j=j+1;

    @+
    :bonjour:

    #63985
    DavidFeder
    Participant

    Merci ! :) Je respire déjà mieux de savoir qu’il existe une solution :)Par contre je n’ai pas réussi… j’ai du foirer qqch dans ce code:

    Code:
    var filenamesfield = this.getField(« files_field_A »).rect;
    var nbPJ=0;
    this.syncAnnotScan();
    var annots=this.getAnnots();
    if (annots!=null) {
        for (var i=0; i        if (annots.type== »FileAttachment » && annots.author==event.target.name) {
                var j=j+1;
                annots.delay=true;
               
                annots.delay=false;
                nbPJ++;
            }
        }
    }
    if (nbPJ==2) {
        app.alert(« You can attach maximum 2 files. Please merge your documents if necessary. »);
        var attachbutton = getField(« attach_A »);
        var attachedbutton = getField(« attached_A »);
        attachbutton.display = display.hidden;
        attachedbutton.display = display.visible;
    } else {

    var annot = this.addAnnot({
    page: 2,
    type: « FileAttachment »,
    author: event.target.name,
    contents: « Double-clic to open »,
    attachIcon: « PushPin »,
    point: [-500,0],
    strokeColor: color.blue,
    });
    annot.author = annot.attachment.name;
    if (annot.attachment !== null) {
           

            var filenamesfield = this.getField(« files_field_A »);
            if (filenamesfield.value == «  ») {
                filenamesfield.value = annot.attachment.name;
            }
            else {
                filenamesfield.value = filenamesfield.value + « n » + annot.attachment.name;
            }
            }

    }

    Tu pourrais me dire ce que je dois corriger?

    #63986
    bebarth
    Maître des clés

    bonjour,
    J’imagine que si tu ajoutes ta pièce jointe en page 2, c’est que ton document comporte au mois 3 pages…
    Je te rappelle que la numérotation des pages se fait basée sur 0 (la page 0 est la première page).
    Voici ton script « remanié » où j’ai supprimé des lignes inutiles (à mon avis, mais je ne connais pas ton document entièrement).

    Code:
    var nbPJ=0;
    this.syncAnnotScan();
    var annots=this.getAnnots();
    if (annots!=null) {
        for (var i=0; i        if (annots.type== »FileAttachment » && annots.author==event.target.name) nbPJ++;
        }
    }
    if (nbPJ==2) {
        app.alert(« You can attach maximum 2 files. Please merge your documents if necessary. »);
        this.getField(« attach_A »).display=display.hidden;
        this.getField(« attached_A »).display=display.visible;
    } else {
        var annot=this.addAnnot({
            page: 2,
            type: « FileAttachment »,
            author: event.target.name,
            contents: « Double-clic to open »,
            attachIcon: « PushPin »,
            point: [-500,0],
            strokeColor: color.red,
        });
        if (this.getField(« files_field_A »).value== » ») this.getField(« files_field_A »).value=annot.attachment.name;
        else this.getField(« files_field_A »).value=this.getField(« files_field_A »).value+ »n »+annot.attachment.name;
    }

    @+
    :bonjour:

    #63987
    DavidFeder
    Participant

    Super!!Merci beaucoup :)En fait j’essayais de répondre depuis ce matin mais pour une raison étrange je dois partager ma connexion en 4g pour accéder au forum; ça timeout depuis ma connexion normale.
    Avec mon script plein de trucs inutiles (en effet:) ) je devais supprimer

    Code:
    annot.author = annot.attachment.name;

    Merci, je venais de comprendre que ça commençait par 0 la page 1 :)
    Là j’essaye de créer un bouton pour permettre à l’utilisateur de supprimer le(s) fichier de chaque bouton au cas où il fait une erreur, et lui éviter de devoir recommencer tout le formulaire.

    En fait j’ai décidé d’ajouter une description spécifique pour les fichiers de chaque bouton

    Code:
    contents: « nom de la section »

    et avec ce code sur le bouton « supprimer », ça semble marcher :)

    Code:
    var l = this.getField(« files_field_names »);
    l.value = «  »;
     

        var annotations = this.getAnnots({nPage: this.pageNum});
    for (var i = 0; i if (annotations.type == « FileAttachment » && annotations.contents== »nom de la section ») {annotations.destroy();}
    }

    que du bonheur :)

    #63988
    bebarth
    Maître des clés

    En fait j’ai décidé d’ajouter une description spécifique pour les fichiers de chaque bouton

    Vu que le nom du bouton est dans la propriété author, autant la réutiliser pour la suppression !
    Ton script fonctionne, mais supprime toutes les pièces jointes avec ce bouton. Tu pourrais créer un menu pop-up avec toutes les pièces et supprimer uniquement celle sélectionnée.
    Sinon, à quoi sert ton champ avec les noms des pièces jointes ? Tu pourrais le remplacer par un menu déroulant qui supprime le fichier lié à la sélection.
    …J’espère avoir été clair !
    @+
    :bonjour:

    #63989
    Merlin
    Maître des clés

    Moi je suis largué  :joker:

    #63990
    bebarth
    Maître des clés

    Moi je suis largué  :joker:

    Voici une version avec menu pop-up !
    @+
    :bonjour:

    #63991
    DavidFeder
    Participant

    WAAAAW!!!la grande classe :)Génial !je demandais un coup de main, tu m’as mis un coup de poing :D

Affichage de 18 réponses de 51 à 68 (sur un total de 68)
  • Vous devez être connecté pour répondre à ce sujet.