abracadabraPDF › Forums › PDF – Général › Importer une ou des pièces jointes à la suite du document PDF
- Ce sujet est vide.
-
CréateurSujet
-
19 août 2021 à 09:28 #46648ALFBMembre
Bonjour à tousNouveau sur le forum j’ai cherché (peut être mal) sur l’historique des messages mais je n’ai pas encore trouvé la solution.
Je souhaite créer un bouton me permettant d’importer une ou des pièces jointes , à la suite de mon doc PDF.Si je clique sur ce bouton alors en important ma PJ j’aurais une page de plus.Merci pour votre aide -
CréateurSujet
-
AuteurRéponses
-
19 août 2021 à 16:48 #69546bebarthMaître des clés
bonjour,
Il faudrait voir ce que tu veux faire exactement, mais je ne sais pas si c’est une excellente idée.
Pourquoi ne pas créer des pages modèles et les ajouter selon le besoin ?
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_spawnPageFromTemplatebc-105&rhtocid=_6_1_8_23_1_104
@+
:bonjour:20 août 2021 à 07:10 #69547ALFBMembrebonjour,
Il faudrait voir ce que tu veux faire exactement, mais je ne sais pas si c’est une excellente idée.
Pourquoi ne pas créer des pages modèles et les ajouter selon le besoin ?
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_spawnPageFromTemplatebc-105&rhtocid=_6_1_8_23_1_104
@+
:bonjour:Merci , grace à ce super forum j’ai effectivement trouvé comment ajouté une page grace à la page modèle, avec ce code:
this.getTemplate(“page1”).spawn({nPage:this.numPages, bRename:true, bOverlay: false});
Et dans la page modèle j’ai mis ce coode:event.target.buttonImportIcon();mais si j’importe un document de plusieurs page alors il n’y a que la première page qui s’ajoute. Les autres ne s’ajoute pas.
Le but final étant de pouvoir ajouter un ou des documents de 1 à n page à la suite de ma première page.Je continue mes recherches ou alors une ame charitable20 août 2021 à 07:29 #69548bebarthMaître des clésbonjour,
Regarde les différents paramètres de la méthode insertPage :
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/html2015/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_insertPagesbc-73&rhtocid=_6_1_8_23_1_72
@+
:bonjour:20 août 2021 à 08:09 #69549MerlinMaître des clésBonjour
La génération (spawn) de modèles (templates) ne peut se faire que page par page.
S’il y en a plusieurs à générer en même temps l’astuce c’est de commencer par la dernière.
:Smiley03:20 août 2021 à 09:09 #69550ALFBMembreLes utilisateurs du formulaires doivent pouvoir attacher des pièces jointes à la suite de la première page, qui elle ne bouge pas.
Ce qui va varier d’un utilisateur à l’autre c’est le nombre de pages à ajouter au document (de 1 à X pages).
Est-ce que this.insertPages en est capable ? –> En lisant la doc j’ai l’impression qu’il faut spécifié l’adresse du document. OU est-ce possible de combiner this.insetPages avec l’ouverture d’un explorateur pour aller chercher le document que l’on souhaite.
Idem pour spawn template: Je sèche un peu sur le fait de commencer par la fin. comment s’y prendre ?
Mais je cherche encore20 août 2021 à 12:36 #69551ALFBMembreVoici le formulaire en PJ.
L’idée c’est en cliquant sur le bouton PJ dans la marge à droite, l’utilisateur puisse ajouter un document à la suite de la première page.21 août 2021 à 09:30 #69552MerlinMaître des clésLes utilisateurs du formulaires doivent pouvoir attacher des pièces jointes à la suite de la première page, qui elle ne bouge pas.
Ce n’est pas possible avec Acrobat Reader.
Dans ton formulaire tu as astucieusement créé des pages modèles qui permettent d’importer des images (pages PDF) dans des boutons-champs image mais tu vas te heurter à plusieurs limites :
– l’utilisateur devra importer son document page par page, sans se tromper dans l’ordre…
– si le document de l’utilisateur contient 10 pages et pèse 2 Mo cela reviendra à importer : 10 X 2 Mo = 20 Mo dans le formulaire.
– il est impossible de récupérer ou d’exporter les documents placés en tant qu’image dans un bouton-champ image !Je crois qu’il va falloir changer ton fusil d’épaule et proposer à l’utilisateur d’utiliser l’outil de commentaires “Pièce jointe” qui est justement fait pour ça.
Ça ajoute le document importé dans le panneau des pièces jointes et non pas à la suite des pages du formulaire, mais c’est tellement plus user-friendly.Tuto complet et exemple ici : https://www.abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/importer-programmatiquement-une-piece-jointe-dans-un-pdf/
Voir aussi ce sujet qui complète le tuto : https://abracadabrapdf.net/forum/index.php?topic=347623 août 2021 à 09:49 #69553ALFBMembreMerci,
j’ai finalement opté pour 2 boutons: 1 pour ajouter une photo et l’autre pour attacher des poèces jointes.Je me suis basé sur les tuto que tu m’a suggéré.
Je me heurte maintenant à deux pb:1: si j’ai plusieurs PJ, elles se chevauchent2: J’ai un bouton PJ par intervenant (voir dans la marge à droite): Lorsque la personne 1 clique sur PJ1, cela fonctionne la PJ est mise en dessous du bouton PJ1 mais lorsque la personne 2 clique sur PJ2, cela ramene aussi les PJ de la personne 1.Comment faire pour chaque PJ reste bien en place en dessous de “son” bouton ?Je mets le fichier en PJ25 août 2021 à 10:07 #69554MerlinMaître des clésToutes les réponses à tes questions se trouvent dans le (long) sujet dont j’ai posté l’URL ci-dessus, avec des exemples à télécharger :geek:
https://abracadabrapdf.net/forum/index.php/topic,3476.html25 août 2021 à 12:38 #69555ALFBMembreOK merci mais il me reste un mystère, non trouvé dans le sujet:Si j’ai deux boutons d’importation de PJ à deux endroits différents sur mon formulaire. Je n’arrive pas à importer les PJ à proximité de chaque bouton. Les boutons appellent toutes les pj du doc, meme celles qui déjà ont été mises avant.Peut-on paramétrer, sur 2 boutons différents, l’import de PJ à 2 ou plusieurs endroits différents du formulaire ?
26 août 2021 à 08:37 #69556MerlinMaître des clésLes boutons appellent toutes les pj du doc, meme celles qui déjà ont été mises avant
Je ne comprend pas cette phrase. :Euuuh:
Peut-on paramétrer, sur 2 boutons différents, l’import de PJ à 2 ou plusieurs endroits différents du formulaire ?
Oui, en utilisant un script différent dans chaque bouton, la différence étant les coordonnées de placement des PJ.
C’est à dire la ligne : point: [400,500],26 août 2021 à 08:54 #69557ALFBMembreJe ne comprend pas cette phrase. :Euuuh:
Oui, en utilisant un script différent dans chaque bouton, la différence étant les coordonnées de placement des PJ.
C’est à dire la ligne : point: [400,500],L’exemple que je mets en pièce jointe est tres parlant. Tu peux tester en important une PJ avec le bouton PJ1 (dans la marge à droite) et ensuite avec le bouton PJ2. Tu verras que la pièce jointe 1 sera déplacée vers la PJ2 et ainsi de suite à chaque fois que l’on change de bouton PJ.
26 août 2021 à 12:38 #69558MerlinMaître des clésSupprime cette ligne dans les scripts des boutons, c’est elle qui déplace les icônes des PJ déjà importées :
Code:annots.point =[aRect[0]-1*(j), aRect[1]-15];26 août 2021 à 14:30 #69559ALFBMembreSupprime cette ligne dans les scripts des boutons, c’est elle qui déplace les icônes des PJ déjà importées :
Code:annots.point =[aRect[0]-1*(j), aRect[1]-15];En la supprimant, la PJ ne s’importe plus. :mur: Par quoi je dois remplacer ce bout de code pour que les PJ se mettent à l’endroit voulu et quelles ne se déplacent pas.
Oui je sais je suis mauvais, j’y arrive en tatillonant et en testant :Smiley08:27 août 2021 à 07:50 #69560MerlinMaître des clésMoi je trouve que ça fonctionne plutôt bien, j’en ai même profité pour modifier la première ligne du script de façon à avoir exactement le même script dans chaque bouton.
Exemple ci-joint.
:Smiley03:27 août 2021 à 08:45 #69561ALFBMembreMoi je trouve que ça fonctionne plutôt bien, j’en ai même profité pour modifier la première ligne du script de façon à avoir exactement le même script dans chaque bouton.
Exemple ci-joint.
:Smiley03:C’est parfait,Me reste plus qu’à trouver comment mettre les PJ les unes en dessous des autres dans la marge. Ca doit être dans les parametre aRectMerci
27 août 2021 à 14:14 #69562MerlinMaître des clésIl y a deux approches, soit les placer en fonction de leur ordre d’arrivée (donné par la variable j), soit les placer sous le bouton cliqué (ce qui est déjà le cas) en modifiant le décalage par rapport aux coordonnées du bouton.
27 août 2021 à 14:32 #69563ALFBMembreIl y a deux approches, soit les placer en fonction de leur ordre d’arrivée (donné par la variable j), soit les placer sous le bouton cliqué (ce qui est déjà le cas) en modifiant le décalage par rapport aux coordonnées du bouton.
Oui je vais les placer sous le bouton cliquer. J’ai réussi à les positionner comme je voulais (les unes en dessous des autres).Par contre, ci-j’ai 2 PJ sous le premier bouton, la PJ au second bouton se positionne en troisième place et non en dessous du bouton (je ne dois pas être tres clair)
Code:var aRect = event.target.rect;
this.syncAnnotScan();
annots = this.getAnnots();
var j=0;
for (var i = 0; i < annots.length; i++) {
if (annots.type==”FileAttachment”) {
var j=j+1;
// annots.point =[aRect[0]-1*(j), aRect[1]-15];
}
}
if (j>4) {
{app.alert({cMsg:”Vous ne pouvez importer plus de 5 pièces jointes.”, nIcon:2});}
} else {
var annot = this.addAnnot({
page: this.pageNum,
type: “FileAttachment”,
contents: “Double-clic pour ouvrir la piu00E8ce jointe”,
attachIcon: “Paperclip”,
point: [aRect[0]-(0*(j+1)), aRect[3]-(18*(j))],
strokeColor: color.blue,
});
annot.contents = annot.attachment.name;
}Il faudrait que je crée une variable qui compte le nombre de PJ (exemple nbpj) et soustraire j-nbpj en lieu et place de j dans le code point:…
27 août 2021 à 16:44 #69564bebarthMaître des clésbonjour,
Il faudrait que je crée une variable qui compte le nombre de PJ (exemple nbpj) et soustraire j-nbpj en lieu et place de j dans le code point:…
Il me semble que c’est ce j’avais fait dans l’exemple que j’avais partagé dans l’autre sujet initial !
@+
:bonjour: -
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.