abracadabraPDF › Forums › PDF – Général › Création d’un script d’enregistrement automatique
- Ce sujet est vide.
-
CréateurSujet
-
15 septembre 2016 à 08:00 #45492
Breizh29
MembreBonjour,
Tout d’abord un grand merci pour la richesse de votre forum. C’est une véritable mine d’informations !Je me suis lancé dans la réalisation d’un formulaire me permettant de remplacer un classique questionnaire de satisfaction papier par un questionnaire en ligne bien plus rapide à renseigner, j’espère ainsi augmenter le nombre de réponses.
J’ai pu réaliser finalement très rapidement ce formulaire en parcourant ce forum, bien que mes connaissances initiales étaient nulles notamment en termes de javascript. (J’utilise Acrobat DC pro)Malheureusement, il me reste à finaliser une dernière action … et là je bloque. Il s’agit de générer un enregistrement automatique du document en fin de questionnaire.
En regardant dans les fichiers exemples et discussions sur le forum, j’ai bien compris qu’il faut créer un script d’application avec un .js à placer dans le répertoire javascript mais j’aimerai que cet enregistrement soit transparent pour l’usager, une fois le questionnaire rempli , l’enregistrement soit automatique avec un nom associant date et éventuellement heure afin que le nom soit unique et que le dépouillement des formulaires soit facilité.
Pouvez-vous me confirmer que cette fonction est bien réalisable ? Je travaille sous environnement Windows.
Merci de votre aide. Cordialement
JLC -
CréateurSujet
-
AuteurRéponses
-
15 septembre 2016 à 08:13 #61315
Merlin
Maître des clésBonjour et bienvenue.
Oui c’est faisable mais tout dépend des conditions d’utilisation du formulaire : s’il est en service sur un seul ordinateur ou bien s’il est diffusé largement.
Dans le 1er cas on a accès au dossier des scripts d’applications, dans le 2e cas non.
15 septembre 2016 à 08:18 #61316Breizh29
MembreBonjour,
Merci de votre réponse rapide. Il s’agit bien d’une utilisation sur un seul ordinateur.A creuser donc ! je continue mes essais
15 septembre 2016 à 12:27 #61317Merlin
Maître des clésOn en a déjà parlé je ne sais plus où ni quand dans le forum, mais ici il y a un tuto de Thom P. qui est complet, clair, net et précis :
https://acrobatusers.com/tutorials/how-save-pdf-acrobat-javascript:bravo:
15 septembre 2016 à 13:38 #61318Breizh29
MembreSuper, un grand merci pour ce tutoriel !
:bravo:
Cordialement
16 septembre 2016 à 17:27 #61319bebarth
Maître des clésbonjour,
C’est effectivement très intéressant, et j’en profite pour revenir sur un post :
http://abracadabrapdf.net/forum/index.php/topic,3037.msg17388.html#msg17388Si on adapte le script “Saving to a different file name, folder, and format” comme ceci :
var nmFichier = this.documentFileName;
// Split Path into an array so it is easy to work with
var aMyPath = this.path.split(“/”);
// Remove old file name
aMyPath.pop();
// Add new file name
aMyPath.push(nmFichier);
// Put path back together and save
this.saveAs(aMyPath.join(“/”));…ça équivaut à faire un “Enregistrer” (j’ai testé) et là, plus besoin de fichier temporaire… :extra:
@+
:bonjour:16 septembre 2016 à 19:26 #61320Breizh29
MembreBonsoir,
J’ai bien envie d’essayer votre proposition mais je n’arrive pas à utiliser votre script.
Ai-je loupé quelque chose ?
1- j’ai définit la fonction “mySaveAs = app.trustedFunction(” dans un fichier .js
2- j’ai utilisé votre script dans un champ de formulaire “souris relâchée”mais je n’ai rien obtenu … :Euuuh:
16 septembre 2016 à 20:40 #61321bebarth
Maître des clésbonsoir,
J’utilise ce script avec une action (Outils -> Assistant Action). Il ne fonctionne pas avec un champ de formulaire.
Je ne suis pas un spécialiste en permissions et privilège, Merlin sera certainement plus à même à t’expliquer !
A mon avis il doit falloir déclarer une “trusted function”…
http://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2Fapp_methods.htm%23TOC_execMenuItembc-12&rhtocid=_6_1_8_6_1_11
http://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/index.html#t=Acro12_MasterBook%2FJS_API_AcroJS%2Fapp_methods.htm%23TOC_trustedFunctionbc-36&rhtocid=_6_1_8_6_1_35
Je suivrai le post car ça m’intéresse aussi.
@+
:bonjour:16 septembre 2016 à 21:04 #61322Merlin
Maître des clésJe ne suis pas un spécialiste en permissions et privilège, Merlin sera certainement plus à même à t’expliquer !
Tout est là : http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/
:Smiley15:17 septembre 2016 à 11:34 #61323bebarth
Maître des clésMerci Merlin,
J’avais déjà lu ton article et je pense que j’ai à peu près tout compris :geek:.
Quand je parle de “specialiste” je pense surtout à “beginPriv” qui d’après ce que je comprend augmente le privilège, et au “trsted functions”…
si tu as article là dessus !!!
Merci
:bonjour:18 septembre 2016 à 07:33 #61324Breizh29
MembreBonjour,
Je n’arrive décidément pas à finaliser mon fichier questionnaire. Malgré la lecture des différents tutoriels et les tentatives multiples je ne comprends pas comment définir la fonction EnregistrementDoc d’où un message d’erreur au moment de la sauvegarde. :Euuuh:
Je suis presque arrivé au bout de mon projet de questionnaire en ligne mais là je bloque depuis plusieurs jours sur cette fonction de sauvegarde. Malgré différentes tentatives avec de multiples essais de routine javascript piochées sur les nombreux documents proposés sur le forum, je n’y arrive pas. Je crois que j’ai atteint mes limites d’apprenti javascripteur :doute:Cordialement
18 septembre 2016 à 08:13 #61325Merlin
Maître des clésBonjour.
Tu devrais lire attentivement le dernier paragraphe de cette page, il est possible que ton dossier d’enregistrement ne soit pas en “safe path”…
=> https://acrobatusers.com/tutorials/file-paths-acrobat-javascript18 septembre 2016 à 09:23 #61326Merlin
Maître des clésERA Vierge.pdf
9 questions… sans un seul point d’interrogation !
Et une faute d’orthographe sur la couverture. :tutut:Je suis choqué. :Smiley03:
18 septembre 2016 à 10:17 #61327Breizh29
MembreEffectivement !
C’est peut-être la raison principale du peu de réponse au formulaire papier !!
Je me trompe peut-être de combat ! :Smiley02:
Merci pour le lien sur le “safe path”, je vais relire cela au calme avec un café et un dictionnaire anglais-français, histoire d’essayer de tout comprendre…
18 septembre 2016 à 10:39 #61328Merlin
Maître des clésMerci pour le lien sur le “safe path”, je vais relire cela au calme avec un café et un dictionnaire anglais-français, histoire d’essayer de tout comprendre…
En gros il vaut mieux se restreindre au dossier Documents du compte utilisateur. Après ça se complique…
18 septembre 2016 à 12:10 #61329Merlin
Maître des clésSinon j’ai ça qui fonctionne bien.
(Merci Alex).Code:/*********************************************************/
/* version detection, requires Acrobat 8 or later version */
if (app.formsVersion >= 8)
{
creationTrustDoc=app.trustedFunction(function()
{
documentInitial=this;
// console.println(“Debut FNC Trusted *************************************”);
// console.println(“Usage du plugin pour la cru00E9ation de “+global.NomDuFichier);
// console.println(“1-cpath initial complet:”+documentInitial.path);
NomDoc=documentInitial.documentFileName;
// console.println(“2-Nom du document MASTER:”+NomDoc);
chemin=documentInitial.path.substring(0,documentInitial.path.length-NomDoc.length);
cpath=chemin+global.NomDuFichier+”.pdf”;
// console.println(“3-cpath final complet:”+cpath);
app.beginPriv();
//Extraction eventuelle…
// console.println(“4-Fin extraction ***************************************”);
//Ouverture document
OpenDoc = app.openDoc({
cPath:documentInitial.path,
bUseConv: true
});
// console.println(“5-Fin ouverture ***************************************”);
//Enregistrement
OpenDoc.saveAs({
cPath:cpath,
bPromptToOverwrite:true
});
app.endPriv();
// console.println(“6-Fin enregistrement ************************************”);
})
console.println(“Plugin enregistrement actif.”);
}18 septembre 2016 à 16:08 #61330Breizh29
MembreMerci Merlin, je vais essayer mais comment dois-je faire appel à cette routine ?
Si j’ai bien suivi, il s’agit là du code à placer dans le dossier .js de l’application. Depuis mon formulaire comment dois-je la solliciter ?
Cdt
18 septembre 2016 à 16:20 #61331Merlin
Maître des clésSi j’ai bien suivi, il s’agit là du code à placer dans le dossier .js de l’application.
C’est bien ça.
Et en action souris enfoncée du bouton enregistrer j’ai :Code:console.clear();
documentInitial=this;
global.NomDuFichier=documentInitial.getField(“numero_fact”).value+” “+documentInitial.getField(“client”).value;
//console.println(“Nom du fichier a enregistrer:”+global.NomDuFichier)
//Process de création
try
{
creationTrustDoc();
}
catch(e)
{
app.alert(“Plug In “creationTrustDoc()” manquant !”,1)
}
//La ligne :
global.NomDuFichier=documentInitial.getField(“numero_fact”).value+” “+documentInitial.getField(“client”).value;
récupère les valeurs dans deux champs pour constituer le nouveau nom de fichier.18 septembre 2016 à 20:55 #61332Breizh29
MembreCa marche !!!
C’est impeccable !! :extra:
Merci beaucoup, il ne me reste plus qu’à corriger la faute d’orthographe et à rajouter les points d’interrogation !!!
Un grand merci à mes deux contributeurs Merlin et Bebarth pour cette aide rapide et efficace, je suis bluffé :bravo:
Bien cordialement
12 janvier 2017 à 11:36 #61333passifacile
ParticipantBonjour, Merlin.
Intéressé par la fonction d’enregistrement automatique d’un fichier, je tombe sur ce post et, me référant au commentaire de Breizh29 (“Si j’ai bien suivi, il s’agit là du code à placer dans le dossier .js de l’application.”), je n’ai pas compris :
1) s’il faut créer un fichier “trustedFunction.js”, ou enregistrer le code sous un autre nom ?
2) Ou, alors, insérer ce code dans un fichier existant ?
3) Et où se trouve le dossier .js sous mac ? :Ooops:12 janvier 2017 à 12:04 #61334bebarth
Maître des clésbonjour,
Pour atteindre le dossier JavaScripts d’Acrobat sur Mac, tu fais un clique droit sur l’application, puis “Afficher le contenu du paquet” -> Contents -> Resources -> JavaScripts.
Dans ce dossier, tu places ton fichier .js
Il faut faire cette manipulation avec Acrobat fermé évidemment afin d’exécuter le script au lancement d’Acrobat.
@+
:bonjour:12 janvier 2017 à 17:05 #61335Merlin
Maître des clésEt à quoi sert-il que Merlin se décarcasse ?
Voir :
– http://abracadabrapdf.net/utilitaires/utilitaires-pdf/show_me_the_path/
&
– http://abracadabrapdf.net/ressources-et-tutos/js-et-formulaires-ressources/les-differents-niveaux-dutilisation-des-scripts-javascript/:Smiley15:
12 janvier 2017 à 20:41 #61336passifacile
Participantshow_me_the_path : Si je suis les instructions, lorsque je presse “enter” après avoir sélectionné tout le script, j’ai uniquement un retour de chariot à la place du script, dans la console… :Smiley02:
Qu’est-ce que je fais de faux (j’utilise en ce moment un Mac) ?
12 janvier 2017 à 21:41 #61337bebarth
Maître des clésbonsoir,
La touche “Entrée” n’est pas la touche “Retour”…
Si tu n’as pas de clavier avec pavé numérique, il faut appuyer simultanément les touches “commande” (cmd) et “Retour” !
@+
:bonjour:13 janvier 2017 à 08:12 #61338passifacile
Participant:extra:
Merci, Merlin et Bebarth.Bonne journée.
13 janvier 2017 à 12:06 #61339Merlin
Maître des clésSi tu n’as pas de clavier avec pavé numérique, il faut appuyer simultanément les touches “commande” (cmd) et “Retour” !
Oui et non, parce-qu’en fait c’est dépendant de la version d’Acrobat. :mur:
Avec Acrobat 9 ça ne fonctionne pas, c’est Entrée ou rien.
Dans les versions suivantes (X, XI et DC) c’est soit la touche majuscule, soit la touche cmd, soit la touche fn.
(À tester, je ne me souviens pas quelle touche correspond à quelle version)13 janvier 2017 à 21:01 #61340passifacile
ParticipantBonsoir.
A toutes fins utiles :
Avec Reader DC (Mac), la touche “Enter” du pavé numérique déclenche bien le script (super, le script, par ailleurs :bravo:).
Idem pour la combinaison “cmd” + “Enter” du clavier.
Cordialement
22 janvier 2017 à 15:00 #61341passifacile
ParticipantBonjour,
J’ai installé tout bien comme il faut, ça marche parfaitement, MAIS, comment est-ce que je peux sauvegarder le fichier ouvert et issu de la sauvegarde (qui n’est donc pas le document initial tant qu’il n’est pas fermé et ré-ouvert) pour le sauvegarder à nouveau après quelques modifications ?
Et comment faut-il modifier le script du dossier.JS afin d’insérer “en dur” un chemin de sauvegarde différent de celui du document initial ?
Et est-il possible de modifier le script (surtout comment :Euuuh:) pour qu’un bouton propose à l’utilisateur de charger un fichier depuis l’emplacement fixe ?
PS : j’ai l’impression d’être en pleine crise d’adolescence. Je comprends les mots (des scripts), mais je ne saisi pas le sens des phrases (du code) pour reformuler à ma convenance… :Smiley08:
C’est pourquoi je pose beaucoup de questions…
22 janvier 2017 à 15:27 #61342Merlin
Maître des clésAvec Reader DC (Mac), la touche “Enter” du pavé numérique déclenche bien le script (super, le script, par ailleurs :bravo:).
Idem pour la combinaison “cmd” + “Enter” du clavier.Oui, c’est mieux avec les deux.
C’est certainement parce-que suite à ces changements inopinés et inattendus les noms d’oiseaux ont volé bas pendant les prereleases (versions beta) suivantes. :geek:22 janvier 2017 à 15:34 #61343Merlin
Maître des clésEt est-il possible de modifier le script (surtout comment :Euuuh:) pour qu’un bouton propose à l’utilisateur de charger un fichier depuis l’emplacement fixe ?
Code:app.execMenuItem(“Open”);22 janvier 2017 à 15:35 #61344Merlin
Maître des cléscomment est-ce que je peux sauvegarder le fichier ouvert et issu de la sauvegarde (qui n’est donc pas le document initial tant qu’il n’est pas fermé et ré-ouvert) pour le sauvegarder à nouveau après quelques modifications ?
Vous pouvez répéter la question ??? :Euuuh:
:Smiley03:22 janvier 2017 à 18:37 #61345passifacile
Participant:Smiley08:
1) Ouverture d’un fichier (depuis une page Intranet)
Afin de limiter (au mieux) les erreurs de sauvegardes et d’avoir des fichiers qui fleurissent de partout, le script de sauvegarde permet de canaliser les enregistrements dans un répertoire bien précis (pour autant que je sache définir un chemin particulier dans le script du dossierJS) :Smiley01:.
Par conséquent, depuis mon fichier, je voudrais qu’un bouton affiche aux utilisateurs l’emplacement précis en question lorsqu’ils souhaitent ouvrir un fichier sauvegardé précédemment (et aucun autre répertoire : je vais cacher le menu et les outils à l’ouverture du fichier). Je suis conscient qu’il s’agit d’une sécurité toute relative, facile à contourner… mais ça devrait à aider à la discipline générale !2) Le script d’enregistrement intègre la notion de “document initial”. La sauvegarde réalisée ferme le fichier source et affiche le document sauvegardé. Si je souhaite continuer à utiliser ce fichier dans la foulée et à le sauvegarder régulièrement, le script n’a plus d’effet car ce fichier sauvegardé n’a pas la qualité de fichier d’origine. Seule sa fermeture et sa réouverture lui permettent d’endosser la valeur de “fichier initial” et autorisent de le re-sauvegarder une nouvelle fois.
:geek: Plus je pédale moins vite, moins j’avance plus fort…
23 janvier 2017 à 11:14 #61346Merlin
Maître des clés1. Il faudrait que tu cherches “device-independent path” dans ce document : https://wwwimages2.adobe.com/content/dam/Adobe/en/devnet/acrobat/downloads/Acrobat_DC_SDK_Documentation.zip
Parce-que c’est un peu long à expliquer, il y a 3 types de chemins d’accès : Mac, Windows et “device-independent path”… Et il faut d’abord choisir son camp.
2. Je ne comprend pas cette histoire de document initial ni pourquoi ça empêche quoi… :Euuuh:
23 janvier 2017 à 11:33 #61347bebarth
Maître des clésbonjour,
1. …Parce-que c’est un peu long à expliquer….
Ça marche pas “this.path” ??? Tu pourrais peut-être essayer et voir si ça marche et si tu arrives à en faire quelque chose !
console.show();
console.clear();
var Chemin = this.path;
var Repertoire = Chemin.substring(0,Chemin.length-(this.documentFileName.length));
console.println(“Chemin du fichier : “+Chemin);
console.println(“Chemin du répertoire : “+ Repertoire);2. Je ne comprend pas cette histoire de document initial ni pourquoi ça empêche quoi… :Euuuh:
pas compris non plus !
@+
:bonjour:23 janvier 2017 à 11:39 #61348passifacile
ParticipantJe vais regarder, merci.
Pour comprendre mon histoire de document initial, il faut :
Ouvrir le fichier que j’ai posté précédemment
Le sauvegarder avec le bouton
Modifier la référence du document ouvert
Refaire une sauvegarde…
et là, ça ne sauve plus rien :Smiley02:23 janvier 2017 à 12:00 #61349bebarth
Maître des clés…et si tu peux poster aussi ton ficher .js !
@+
:bonjour:23 janvier 2017 à 12:56 #61350passifacile
Participantvoici. (.txt à enlever, évidemment :Smiley03:)
je joins également le script à placer en action “bouton”.
26 janvier 2017 à 18:38 #61351bebarth
Maître des clésbonjour et désolé pour cette réponse tardive.
Que devrait-il se passer si l’on modifie le champ ref ? on enregistre ce fichier ou un nouveau ???
@+
:bonjour:27 janvier 2017 à 18:48 #61352bebarth
Maître des clésbonjour,
Pas de réponse ??
On avait déjà parlé d’un problème similaire dans un précédent post :bonjour,
C’est effectivement très intéressant, et j’en profite pour revenir sur un post :
http://abracadabrapdf.net/forum/index.php/topic,3037.msg17388.html#msg17388Si on adapte le script “Saving to a different file name, folder, and format” comme ceci :
var nmFichier = this.documentFileName;
// Split Path into an array so it is easy to work with
var aMyPath = this.path.split(“/”);
// Remove old file name
aMyPath.pop();
// Add new file name
aMyPath.push(nmFichier);
// Put path back together and save
this.saveAs(aMyPath.join(“/”));…ça équivaut à faire un “Enregistrer” (j’ai testé) et là, plus besoin de fichier temporaire… :extra:
@+
:bonjour:Dans l’exemple joint il y a un bouton “Enregistrer” …qui enregistre et un bouton “Enregistrer sous” qui enregistre avec les nouvelles valeurs des champs “ref” et “Horodatage”. J’espère que tu sauras l’adapter pour ton fichier.
@+
:bonjour:27 janvier 2017 à 22:15 #61353Merlin
Maître des clésJe viens de voir de voir un documentaire à la télé : Initials B.B., avec (le beau) Serge G. et la belle Brigitte B.
Notre BB à nous est peut être moins glamour (on ne voit pas bien, l’avatar est trop petit), mais il connait le JavaScript !
Contrairement à Brigitte qui elle n’y connait toujours rien, la pauvre.Même s’il est possible qu’elle soit plus calée que lui en ce qui concerne les BB phoques…
:geek:6 février 2017 à 09:25 #61354passifacile
ParticipantOups…
Bonjour Bebarth.
Mon attention a été détournée par Serge, Brigitte et Merlin. Du coup, je n’ai pas été attentif à tes messages qui ont suivi le post de ton fichier d’exemple (qui me convient, soit dit en passant, parfaitement).
La sauvegarde d’un fichier nouveau à chaque enregistrement me suffisait : ta solution du choix “sauvegarde unique” ou “sauvegarde itérative” offre de nouvelles perspectives très intéressantes.Pour répondre à ta question, mon idée de départ était, pour des questions de traçabilité, de créer, à chaque sauvegarde, un nouveau fichier (raison pour laquelle j’ai inséré un horodatage pour éviter les “écrasements”, auquel j’ai ajouté entre-temps un nombre aléatoire pour éviter les collisions avec des sauvegardes faites dans la même minute).
Merci et désolé pour ma réaction super-tardive :Ooops:
14 mars 2017 à 14:03 #61355passifacile
ParticipantBonjour,
Maintenant que je maîtrise les sauvegardes automatiques, je voudrais pouvoir le faire en incluant un mot de passe (que je demanderai aux utilisateurs à chaque sauvegarde).
Mes recherches sur le sujet sont restées vaines… mais j’espère être un piètre chercheur :Smiley03: et apprendre qu’il y a une solution :Smiley08: …Cordialement.
14 mars 2017 à 15:58 #61356bebarth
Maître des clésbonjour,
Si je comprends bien, c’est tout à fait possible !
Regarde ce lien si il peut t’aider :
http://abracadabrapdf.net/forum/index.php/topic,2860.msg16116.html#msg16116
@+
:bonjour:14 mars 2017 à 21:51 #61357bebarth
Maître des clésbonsoir,
J’ai repris l’exemple précédent.
Le mot de passe (bebarth — un peu mégalo le mec !) se trouve en script d’ouverture de page et en unicode.
Ne pas oublier le plugin.
@+
:bonjour:15 mars 2017 à 10:03 #61358passifacile
ParticipantBonjour, Bebarth, et merci.
J’avais pensé à une solution de ce type (du coup, avec ta réponse, j’ai tout ce qu’il me faut :extra: ), mais je cherchais une solution (qui fonctionne avec le Reader) pour protéger le fichier par mot de passe (au moment du saveAs) avec les options que l’on trouve dans les “Propriétés/Sécurité”.
Je vais avancer avec la solution que tu as proposée car je doute que l’autre existe.
Bonne journée.
16 février 2018 à 15:30 #61359romain05
ParticipantBonjour à tous,
Est-ce qu’il serait possible que cet enregistrement se fasse de façon auto et qu’on puisse le définir toutes les X minutes ?
Car sur tablette dès que l’on clic sur “retour” au niveau du document ça enregistre automatiquement, sinon ça ne fait rien. ( Aujourd’hui l’application a planté et on a perdu 30 min de travail ) :mur:
Merci17 février 2018 à 10:03 #61360Merlin
Maître des clésAvec les tablettes Windows on peut paramétrer l’enregistrement automatique dans les Préférences d’Acrobat (Reader, Pro ou standard).
Pour Android et iOS je ne crois pas que cette option existe (à vérifier).
17 février 2018 à 10:54 #61361romain05
ParticipantD’accord, du coup il va falloir que je trouve un autre moyen.
Est-ce qu’il est possible de générer un enregistrement auto au passage ou au remplissage d’un champ ?
De cette façon, je pourrais en disséminer plusieurs dans le document pour que l’utilisateur n’ai pas à penser à régulièrement enregistrer son document.17 février 2018 à 11:18 #61362Merlin
Maître des clésJe ne sais plus si c’est précisé ci-dessus, mais l’enregistrement automatique requiert un script d’application, ce qui n’est possible que sur MacOS ou Windows.
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.