Forum abracadabraPDF.net

Thèmes de discussion du forum abracadabraPDF.net => PDF - Général => Discussion démarrée par: célé le 16 mai 2018 : 22:55

Titre: Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: célé le 16 mai 2018 : 22:55
Bonjour,
J'utilise le tuto https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/importer-programmatiquement-une-piece-jointe-dans-un-pdf/ (https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/importer-programmatiquement-une-piece-jointe-dans-un-pdf/) pour faire un bouton permettant d'importer une pièce jointe dans un formulaire pdf. Je souhaiterais le personnaliser en faisant apparaître, au survol de l'épingle, non pas l'auteur mais le nom du fichier joint. Est-ce possible et comment ?
Merci pour votre aide !
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 17 mai 2018 : 00:38
Bonjour.


Il faut ajouter cette ligne après le script qui est donné dans le chapitre 2 :

annot.author = annot.attachment.name;

 :Smiley15:
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: célé le 17 mai 2018 : 01:42
Extra !!  :bravo:
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: célé le 17 mai 2018 : 21:58
Bonjour,
Pour continuer à personnaliser ce bouton d'import de PJ, je souhaiterais pouvoir facilement définir la position de l'épingle:
- pour l'instant je tâtonne pas à pas mais c'est laborieux, je suppose qu'il existe une méthode plus simple pour obtenir la position en px d'un point donné dans la page...
- autre idée: pourrait-on définir que l'épingle s'affiche systématiquement à gauche du bouton par exemple ?
Merci !
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: célé le 17 mai 2018 : 22:26
Re-bonjour,
Je précise ma question précédente car la 2e solution (définir la position de l'épingle par rapport au bouton) serait plus adaptée à ma situation : car je crée le pdf avec Foxit Phantom, et quand je l'ouvre dans Acrobat DC pour tester le remplissage du formulaire par un utilisateur, je vois que la position des épingles n'est pas la même que celle que j'avais calibrée dans Foxit... :(
Merci si vous avez une explication à cela et une solution à me proposer !
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 18 mai 2018 : 11:22
bonjour,
Voici un exemple pour faire apparaitre l'épingle (ou autre) à la gauche du bouton.
Attention, le point à indiquer pour la position de l'icône est le supérieur gauche, et la taille de l'icône ne varie pas en fonction de l'affichage.
Il faudra certainement ajuster la position Y en fonction de la hauteur du bouton.
@+
 :bonjour:
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 19 mai 2018 : 10:47
Bonjour.


Il existe une autre méthode : ouvrir le panneau des pièces jointes (à l'ouverture du document ou via JavaScript) et placer les icônes en dehors de la page pour que l'utilisateur ne les voit pas.


L'avantage du panneau c'est qu'il n'y a pas besoin de réinventer la roue avec JavaScript, l'utilisateur a tout sous les yeux.


 :Smiley15:
Titre: Re : Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 19 mai 2018 : 10:50
quand je l'ouvre dans Acrobat DC pour tester le remplissage du formulaire par un utilisateur, je vois que la position des épingles n'est pas la même que celle que j'avais calibrée dans Foxit
Avec Acrobat le point zéro/zéro se trouve en bas à gauche de la page, Foxit compte peut être différemment.
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: célé le 19 mai 2018 : 10:54
Un grand merci Bebarth ! Je n'ai pas encore eu le temps de le tester dans mon formulaire mais c'est tout à fait la fonction que je cherchais ! @+
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 20 mai 2018 : 18:54
bonjour,Une petite variante pour choisir l'icône et sa couleur.@+ :bonjour:
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 20 mai 2018 : 23:56
Pour peaufiner il ne reste plus qu'à ajouter un compteur :

- soit pour empêcher l'importation de plus d'une seule pièce jointe,

- soit pour calculer le décalage spacial nécessaire pour que les icônes ne se chevauchent pas quand on importe plusieurs pièces jointes.
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: célé le 22 mai 2018 : 00:04
Hé hé, on ne les arrête jamais ^^
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 22 mai 2018 : 10:55
  :Smiley03:
Titre: Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 22 mai 2018 : 13:16
bonjour,
Voilà, j'ai un peu peaufiné le sujet avec un maximum de 5 pièces jointes !
On pourrait encore l'améliorer et vérifier que les icônes ne soient pas hors pages...
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 22 mai 2018 : 14:01
La boucle est bouclée, j'ai intégré un lien vers ce sujet au tuto mentionné dans la question : https://www.abracadabrapdf.net/?p=4295 (https://www.abracadabrapdf.net/?p=4295(Voir)
(Voir 4.)
La communauté vous remercie.

 :bonjour: 
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: PhDCus le 04 juin 2018 : 11:53
Bonjour à tous,

merci pour cette contribution, c'est très pratique.
Savez-vous s'il est possible de diminuer la taille de l'icône "pièce jointe" insérée ?

Merci pour votre retour.
Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 04 juin 2018 : 12:04
Savez-vous s'il est possible de diminuer la taille de l'icône "pièce jointe" insérée ?
Non car la taille de l'icône est indépendante du zoom de l'affichage.C'est pour ça qu'il peut être astucieux de placer les icônes en dehors de la page et d'utiliser (afficher/masquer) un bouton contenant une (petite) icône pour que l'utilisateur visualise la PJ.

Ça évite aussi de devoir calculer le placement exact de l'icône, puisque si on fait apparaitre un bouton il est forcément déjà pré-positionné.
 :Smiley15:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: PhDCus le 04 juin 2018 : 12:16
je viens de trouver un bout de code sur Internet que j'ai modifié :

var r = annots.rect;
r[2] = r[2]-5;
r[3] = r[3]-5;
annots.setProps({rect: r})

Je l'ai intégré (comme j'ai pu, à l'ancienne...), la taille diminue, mais seulement après avoir recliquer sur le bouton...
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 04 juin 2018 : 14:31
bonjour,
C'est tout à fait exact. Les coordonnées r[0], r[1], r[2], r[3] pour l'icône sont semblables à celles indiquées pour le champ.
Pour avoir la largeur de l'icône il faut donc faire r[2]-r[0] et pour avoir la hauteur r[1]-r[3] (le 0 est en bas à gauche).
De tête, je ne connais pas exactement la largeur des icônes (il me semble qu'elle n'est pas identique pour tous), il faut donc faire attention de ne pas trop réduire !

Si l'on veut placer l'icône à une position exacte par rapport au champ, j'avais écris un petit script dont je joint l'action pour connaitre exactement les coordonnées d'un champ.
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: PhDCus le 05 juin 2018 : 07:31
Merci pour le script !

Vous avez une idée pour que la réduction de l'icône se fasse sans recliquer sur le bouton ?
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 05 juin 2018 : 12:08
bonjour,
Il faut mettre tes lignes en fin de script, sauf qu'avant il faut "re-scanner" les annotations.
Sauf qu'avec r[2]=r[2]-5 et r[3]=r[3]-5, l'icône est diminué à chaque fois qu'on en rajoute un autre...
Il faudrait donc lui donner directement sa taille avec r[2]=r[0]+largeur et r[3]=r[1]+hauteur (ici c'est bien un plus, car...)
Les coordonnées r[0], r[1], r[2], r[3] pour l'icône sont semblables à celles indiquées pour le champ.
...ça c'est faut ! Les coordonnées des l'icônes sont définis par le point inférieur gauche et le point supérieur droit (les champs sont définis par le point supérieur gauche et le point inférieur droit... il doit bien y avoir une explication mais je ne la connais pas).

J'ai vérifié les tailles des icônes et elles ne sont effectivement pas identiques :
Tombone = 7 x 17 pts
Punaise =  20 x 16 pts
Graphique = 20 x 20 pts
Etiquette = 20 x 16 pts
Attention donc de redéfinir les tailles proportionnellement par exemple r[2]=r[0]+10 et r[3]=r[1]+8 pour une punaise de moitié de taille originale.
Ci-joint le dernier fichier avec affichage dans la console des dimensions.
Dans ce fichier il faudra évidemment retirer les barres obliques et indiquer la largeur et la hauteur souhaitées.
//r[2] = r[0]+largeurSouhaitee;
//r[3] = r[1]+hauteurSouhaitee;

@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: PhDCus le 05 juin 2018 : 13:46
Impeccable, merci !

le temps que je vois le message, j'ai trouvé cette solution.
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 05 juin 2018 : 14:24
Ça marche, mais... ça manque d'homomorphisme !
Attention donc de redéfinir les tailles proportionnellement par exemple r[2]=r[0]+10 et r[3]=r[1]+8 pour une punaise de moitié de taille originale.
A mon avis, tu devrais écrire :
//...pour un icône à l'échelle 1/2
r[2] = r[0]+(r[2]-r[0])/2;
r[3] = r[1]+(r[3]-r[1])/2;
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: PhDCus le 05 juin 2018 : 16:21
Ca marche nickel, merci pour ton aide !
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: daninet le 12 septembre 2019 : 17:03
È possibile utilizzare JavaScript per importare i dati dell'allegato?
Con Acrobat Reader DC ?
grazie
 :bonjour:
https://abracadabrapdf.net/forum/index.php/topic,3758.0.html (https://abracadabrapdf.net/forum/index.php/topic,3758.0.html)
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 12 septembre 2019 : 17:41
La réponse est dans ce message : https://abracadabrapdf.net/forum/index.php?topic=3758.msg23272#msg23272
 :Smiley15:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: daninet le 12 septembre 2019 : 18:49

J'ai demandé cela, parce que cela ne fonctionne pas ... c'est-à-dire que cela fonctionne avec la pièce jointe (1 - les pièces jointes jointes au document que le public via les panneaux Pièces jointes,)


Ne fonctionne pas avec la pièce jointe (2 pièces jointes attachées à une page (et une seule) que nous gérons avec l'outil de commentaire "Ajouter une nouvelle pièce jointe" et cela apparaît également dans le panneau Pièces jointes)


 :doute: :oh: :Euuuh:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 12 septembre 2019 : 19:19
Exemple ci-joint.
 :Smiley03:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: daninet le 13 septembre 2019 : 08:21
Merci. Grazie

Je ne me suis pas bien expliqué: je voulais prendre les données de la pièce jointe 1
Je joins le fichier 2
J'ai besoin des données de pièce jointe pour les cases ci-dessous.
Est-ce possible avec Reader DC ?
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 13 septembre 2019 : 10:07
bonjour,
Dans mon exemple, j'importe les données de la pièce jointe sans la nommer avec :
var p = this.getDataObject(this.dataObjects[0].name);0 est l'indice de position de la pièce jointe, soit la première.
Si tu veux importer la deuxième pièce jointe en indiquant sa position, il faut écrire :
var p = this.getDataObject(this.dataObjects[1].name);Sinon, tu peux aussi indiquer le nom de la pièce jointe sans tenir compte de sa position avec :
var p = this.getDataObject("FDF");@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: daninet le 13 septembre 2019 : 10:32
Merci beaucoup pour votre intérêt, dès que j'essaierai, je vous le ferai savoir. Gazie  :bonjour:

Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 13 septembre 2019 : 10:37
Merci. Grazie

Merci de poster les messages en "texte seul" (text only) sans les balises de formatage qui ne fonctionnent pas bien.
Voici ce que ça donne (en image) : c'est illisible.
 :Smiley01:

Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: daninet le 13 septembre 2019 : 12:48
No, se allego il file Test.txt ..
non ho letto il file allegato in seguito ...
Nell'esempio, il file vuoto senza allegato.
 :doute: :doute:




Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 13 septembre 2019 : 18:25
bonjour,
Dans le format PDF il y a deux types de pièces jointes :
1- les pièces jointes attachées au document que l'on ne gère que via le panneau Pièces jointes,
2- les pièces jointes attachées à une page (et une seule) que l'on gère avec l'outil de commentaire "Ajouter une nouvelle pièce jointe" et qui apparaissent aussi dans le panneau Pièces jointes.
D'après les premiers essais que je viens de faire, il me semble que getDataObject ne fonctionne qu'avec les pièces jointes attachées au document... mais il faudrait que j'approfondisse le sujet.
Si on lance le teste :
console.show();
console.clear();
var d = this.dataObjects;
for (var i = 0; i < d.length; i++) console.println("Data Object[" + i + "]=" + d[i].name);
La console indique qu'il n'y a pas de pièce jointe si elle est attachée à la page.

Merlin, as-tu des infos ? Je n'ai rien vu comme indication dans l'api reference !
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 13 septembre 2019 : 18:44
...et s'il y a les 2 types de pièces jointes, la console n'indique que celle attachée au document !
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 14 septembre 2019 : 10:49
Je n'ai pas d'info particulière mais je suppose que pour les PJ attachées à la page il faut chercher parmi les "objets" commentaires, pas parmi les "dataobjects"…
Je vérifierai ça après le weekend (que je souhaite bon à tous).
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 16 septembre 2019 : 08:04
bonjour,
Voici une version qui fonctionne avec une pièce jointe attachée à la page.
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: daninet le 16 septembre 2019 : 08:27
Fantastique, mille, merci. Vraiment très compétent.
 :bravo: :bonjour: :bonjour: :priere:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 16 septembre 2019 : 09:01
 :bravo:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Mary31 le 22 juin 2020 : 16:58
Bonjour,
A priori ce sujet devrait correspondre à ma demande....

Je souhaiterais envoyer un formulaire à des utilisateurs. Dans ce formulaire, il y a des champs à renseigner mais aussi des documents à importer en tant que pièce jointe.
Je vous donne un exemple en pj.
J'ai commencé à créer le bouton, le libellé et l'icône pour guider l'utilisateur.

Ensuite si je comprends bien je dois me référer au tuto :
Importer programmatiquement une pièce jointe dans un PDFet c'est là où je n'arrive pas à concrétiser mon action, la formule java script n'apporte pas grand chose...
pouvez-vous m'aider...
Titre: Re : Re : personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Mary31 le 22 juin 2020 : 18:33
bonjour,Une petite variante pour choisir l'icône et sa couleur.@+ :bonjour:

J'ai aussi ouvert le pdf de bebarth (https://abracadabrapdf.net/forum/index.php?action=profile;u=4076) qui m'a l'air top mais quand je clique sur le champ "importer" j'ai l'image correspond au trombone mais il n'y pas d'autre fenêtre de type "parcourir" pour permettre à l'utilisateur d'aller chercher le doc à insérer...

Je ne suis pas un pro... désolée mais je me dis qu'il n'y pas de raison de ne pas y arriver si la solution existe :priere: HELP ! :Ooops:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 22 juin 2020 : 19:38
Si tu vois le trombone c'est que tu as déjà importé la pièce jointe.
Il faut double-cliquer sur le trombone ou bien ouvrir le panneau "Pièces jointes" pour accéder à la pièce jointe.
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Mary31 le 24 juin 2020 : 16:46
Merci Merlin, j'ai changé de version du logiciel et effectivement J'Y ARRIVE  :joker:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 24 juin 2020 : 20:03
 :extra:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Mary31 le 26 juin 2020 : 11:30
Bonjour,

Mon formulaire a bien avancé. J'ai deux questions :

- 1 sur un bouton d'importation de pj, j'ai indiqué le script suivant :

var annot = this.addAnnot({
page: this.pageNum,
type: "FileAttachment",
author: "PJ 1 OK !",
contents: "Double-clic pour ouvrir ou supprimer pour effacer",
attachIcon: "Paperclip",
point: [500,310],
strokeColor: color.blue,
});
var annot = this.addAnnot({
page: this.pageNum,
type: "FileAttachment",
author: "PJ 2 OK !",
contents: "Double-clic pour ouvrir ou supprimer pour effacer",
attachIcon: "Paperclip",
point: [510,310],
strokeColor: color.blue,
});
var annot = this.addAnnot({
page: this.pageNum,
type: "FileAttachment",
author: "PJ 3 OK !",
contents: "Double-clic pour ouvrir ou supprimer pour effacer",
attachIcon: "Paperclip",
point: [520,310],
strokeColor: color.blue,
});

Je compte le dupliquer en 5 fois, afin que le trombone soit à chaque fois décalé sur le formulaire.
En phase test, cela fonctionne sauf que la fenêtre parcourir reste ouverte et ne se ferme pas automatiquement. Du coup l'utilisateur va penser qu'il n'a pas correctement insérer la pj.
J'imagine qu'il y a quelque chose à ajouter dans le code pour que la fenêtre se referme mais je ne suis pas développeur....

Pourriez-vous me dire ???

2- Je voulais savoir si en termes de signature vous auriez quelque chose de moins lourd que le bouton signature que propose acrobat reader
Mais je vais d'abord recherche des sujets sur le forum

Bonne journée !  :soleil:




Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 26 juin 2020 : 12:52
Citer
Je compte le dupliquer en 5 fois
5 x 5 = 25...
Halte au feu  :geek:

Il faut utiliser toujours le même script en utilisant deux variables :
- une variable qui devrait être stockée dans un champ, celle qui compte le nombre de fois où une PJ a été importée. On la stocke dans un champ (masqué) parce-qu'elle doit être persistante (le document peut être fermé et rouvert sur un autre poste).
- une variable volatile qui ajoute un décalage en fonction du nombre de PJ déjà importée.

Exemple :

if (this.getField("compteur").value == 0) {var d = 0;}
else if (this.getField("compteur").value == 1) {var d = 5;}
else if (this.getField("compteur").value == 2) {var d = 10;}
else if (this.getField("compteur").value == 3) {var d = 15;}
else if (this.getField("compteur").value == 4) {var d = 20;}
else if (this.getField("compteur").value == 5) {var d = 25;}
 
if (d > 20) {app.alert("Il y a déjà 5 pièces jointes importées")}
else {
var annot = this.addAnnot({
page: this.pageNum,
type: "FileAttachment",
author: "PJ 1 OK !",
contents: "Double-clic pour ouvrir ou supprimer pour effacer",
attachIcon: "Paperclip",
point: [500 + d, 310 + d],
strokeColor: color.blue,
});
this.getField("compteur").value = this.getField("compteur").value + 1;
}
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 26 juin 2020 : 13:02
Citer
quelque chose de moins lourd que le bouton signature que propose Acrobat Reader
Peux tu préciser de quel bouton tu parles et en quoi il est "lourd" ?
 :Euuuh:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 26 juin 2020 : 19:29
bonjour,
On peut aussi compter le nombre de pièces jointes déjà en place.
var nbPJ=0;
this.syncAnnotScan();
var annots=this.getAnnots();
if (annots!=null) {
    for (var i=0; i<annots.length; i++) {
        if (annots[i].type=="FileAttachment" && annots[i].attachIcon=="Paperclip" && annots[i].author.substr(0,2)=="PJ") {
            annots[i].delay=true;
            annots[i].setProps({
                author: "PJ "+(nbPJ+1)+" OK !",
                point: [500+(nbPJ*5), 310+(nbPJ*5)]
            });
            annots[i].delay=false;
            nbPJ++;
        }
    }
}
if (nbPJ==5) {
    app.alert("Il y a déjà 5 pièces jointes importées");
} else {
    var annot = this.addAnnot({
        page: this.pageNum,
        type: "FileAttachment",
        author: "PJ "+(nbPJ+1)+" OK !",
        contents: "Double-clic pour ouvrir ou supprimer pour effacer",
        attachIcon: "Paperclip",
        point: [500+(nbPJ*5), 310+(nbPJ*5)],
        strokeColor: color.blue,
    });
}
Et il faut penser à les repositionner si une ou plusieurs ont été supprimées.
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 10 septembre 2020 : 12:15
Bonjour,

Tout d'abord, merci beaucoup pour vos contributions; une mine d'or pour mon projet :)
J'ai pu utiliser vos codes pour ce que je voulais faire; un bouton pour attacher jusqu'à 5 pièces jointes et indiquer leurs noms dans un champ de texte).
Je voudrais toutefois permettre d'ouvrir ces pièces jointes sans devoir passer par le volet pièces jointes.
Pour celà, les icones type Paperclip fonctionnent bien, et je vois comment les positionner, mais c'est gênant avec le zoom.

Serait-il possible, selon vous, de faire apparaître un bouton (ou plusieurs si plusieurs pièces jointes) sur lequel cliquer pour ouvrir le pièce jointe? Ceci au lieu de l'icone type Paperclip.

Voici mon bout de code actuel:
var filenamesfield = this.getField("dlp_files_field").rect;
var nbPJ=0;
this.syncAnnotScan();
var annots=this.getAnnots();
if (annots!=null) {
    for (var i=0; i<annots.length; i++) {
        if (annots[i].type=="FileAttachment") {
            annots[i].delay=true;
           
            annots[i].delay=false;
            nbPJ++;
        }
    }
}
if (nbPJ==5) {
    app.alert("You can attach maximum 5 files. Please merge your documents if necessary.");
    var attachbutton = getField("Attach_DLP");
    attachbutton.display = display.hidden;
} else {

var annot = this.addAnnot({
page: this.pageNum,
type: "FileAttachment",
contents: "Double-clic to open",
attachIcon: "PushPin",
point: [filenamesfield[0]-15, filenamesfield[1]-(10*(nbPJ))],
strokeColor: color.blue,
});
annot.author = annot.attachment.name;
if (annot.attachment !== null) {
       

        var filenamesfield = this.getField("dlp_files_field");
        if (filenamesfield.value == "") {
            filenamesfield.value = annot.attachment.name;
        }
        else {
            filenamesfield.value = filenamesfield.value + "\n" + annot.attachment.name;
        }
        }

}
Pour afficher le bouton, je suppose que je pourrais insérer qqch du genre :bouton_fichier_1.display = display.visible;   

Mais le script à exécuter quand on clique sur ce bouton... une autre histoire... loin de mes compétences :s
Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 10 septembre 2020 : 14:09
bonjour,
Mais le script à exécuter quand on clique sur ce bouton... une autre histoire... loin de mes compétences :s
Mais non ! On s'en fait toute une histoire pour pas grand chose...
this.exportDataObject({cName: "nomPJaOuvrir", nLaunch: 2});Je suis sûr que tu l'aurais trouvé tout seul !
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 10 septembre 2020 : 16:00
Bonjour Bebarth,

Génial! Merci beaucoup :)
Maintenant faut que je trouve un moyen de nommer chaque pièce jointe.
D'après mes recherches, un truc du genre:
(annots.name);Tu pourrais m'expliquer comment faire ça, et où le mettre?J'ai essayé en suivant la logique avec "SetProps", sans pour l'instant y mettre de (nbPJ+1), pour commencer par "simple", qu'au moins j'y arrive avec une seule pièce jointe, comme dans le code ci-dessous:
var filenamesfield = this.getField("dlp_files_field").rect;
var nbPJ=0;
this.syncAnnotScan();
var annots=this.getAnnots();
if (annots!=null) {
    for (var i=0; i<annots.length; i++) {
        if (annots[i].type=="FileAttachment") {
            annots[i].delay=true;
            annots[i].setProps({
                name: "Attached_Document",
               
            });
           
            annots[i].delay=false;
            nbPJ++;
        }
    }
}
if (nbPJ==5) {
    app.alert("You can attach maximum 5 files. Please merge your documents if necessary.");
    var attachbutton = getField("Attach_DLP");
    attachbutton.display = display.hidden;
} else {

var annot = this.addAnnot({
page: this.pageNum,
type: "FileAttachment",
contents: "Double-clic to open",
attachIcon: "PushPin",
point: [filenamesfield[0]-15, filenamesfield[1]-(10*(nbPJ))],
strokeColor: color.blue,
});
annot.author = annot.attachment.name;
if (annot.attachment !== null) {
       

        var filenamesfield = this.getField("dlp_files_field");
        if (filenamesfield.value == "") {
            filenamesfield.value = annot.attachment.name;
        }
        else {
            filenamesfield.value = filenamesfield.value + "\n" + annot.attachment.name;
        }
        }

}
J'espérais que ça donne le nom "Attached_Document" à la pièce jointe (je ne sais pas comment vérifier).
J'ai aussi essayé en mettant name: "Attached_Document" dans this.addAnnot({Après, sur le bouton "ouvrir", j'ai mis ce script: this.exportDataObject({cName: "Attached_Document", nLaunch: 2});Mais ça ne fonctionne pas :s
Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 11 septembre 2020 : 09:46
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.
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 13 septembre 2020 : 10:56
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
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 13 septembre 2020 : 12:20
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:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 14 septembre 2020 : 08:31
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?
Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 14 septembre 2020 : 15:02
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.
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 06 octobre 2020 : 15:34
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:
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<annots.length; i++) {
        if (annots[i].type=="FileAttachment") {
            annots[i].delay=true;
           
            annots[i].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?
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 06 octobre 2020 : 17:16
bonjour,
Si on importe la pièce jointe :
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 06 octobre 2020 : 17:45
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 :)

Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 06 octobre 2020 : 21:03
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
this.exportDataObject({cName: nomDeLobjet, nLaunch: 2});@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 07 octobre 2020 : 10:20
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?
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 07 octobre 2020 : 14:18
bonjour,
Tu pourrais attribuer le nom du bouton utilisé dans une propriété de la pièce jointe (author par exemple) :
...
type: "FileAttachment",
author: event.target.name,
...
et vérifier cette propriété lorsque tu comptes le nombre de pièces attribuées à ce bouton :
...
for (var i = 0; i < annots.length; i++) {
    if (annots[i].type=="FileAttachment" && annots[i].author==event.target.name) {
        var j=j+1;
...
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 07 octobre 2020 : 14:58
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:
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<annots.length; i++) {
        if (annots[i].type=="FileAttachment" && annots[i].author==event.target.name) {
            var j=j+1;
            annots[i].delay=true;
           
            annots[i].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?
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 08 octobre 2020 : 08:34
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).
var nbPJ=0;
this.syncAnnotScan();
var annots=this.getAnnots();
if (annots!=null) {
    for (var i=0; i<annots.length; i++) {
        if (annots[i].type=="FileAttachment" && annots[i].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:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 08 octobre 2020 : 08:57
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
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
contents: "nom de la section"et avec ce code sur le bouton "supprimer", ça semble marcher :)
var l = this.getField("files_field_names");
l.value = "";
   

     var annotations = this.getAnnots({nPage: this.pageNum});
for (var i = 0; i < annotations.length; i++) {
if (annotations[i].type == "FileAttachment" && annotations[i].contents=="nom de la section") {annotations[i].destroy();}
}
que du bonheur :)
Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 08 octobre 2020 : 14:17
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:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: Merlin le 08 octobre 2020 : 14:27
Moi je suis largué   :joker:
Titre: Re : Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: bebarth le 08 octobre 2020 : 14:53
Moi je suis largué   :joker:
Voici une version avec menu pop-up !
@+
 :bonjour:
Titre: Re : Personnalisation d'un bouton permettant d'importer une pièce jointe
Posté par: DavidFeder le 08 octobre 2020 : 19:20
WAAAAW!!!la grande classe :)Génial !je demandais un coup de main, tu m'as mis un coup de poing :D