// Imposition-07-Auto.js // --------------------------------------------------------------------------- // Suite d'imposition professionnelle - Folder-Level Script pour Adobe Acrobat Pro // Module 7 : Automatisation (sequences de commandes / presets) // // Depend de Imposition-00-Core.js (doit etre charge avant) ainsi que des // modules 2 a 6 pour le rejeu d'actions (chacun expose une fonction // "executerAvecParams(doc, params)" sans dialogue, appelee ici). // // Les presets sont stockes dans l'objet global persistant // global.impositionSettings (survit aux fermetures d'Acrobat grace a // global.setPersistent). La "derniere action" n'est gardee qu'en memoire // pour la session courante. // --------------------------------------------------------------------------- if (typeof CDImp === "undefined") { throw new Error("Imposition-07-Auto.js : CDImp.Core doit etre charge avant ce fichier."); } CDImp.Auto = CDImp.Auto || {}; // Initialise l'espace de stockage persistant des presets. CDImp.Util.avecPrivileges(function () { if (typeof global.impositionSettings === "undefined") { global.impositionSettings = {}; } global.setPersistent("impositionSettings", true); }); // Memoire de la derniere action executee (module + parametres), pour le // bouton "Repeter la derniere action". Reinitialisee a chaque session. CDImp.Auto.derniereAction = null; // Table de correspondance "cle d'action" -> fonction de rejeu sans dialogue. // Chaque entree appelle la variante "executerAvecParams" du module concerne. CDImp.Auto._dispatch = { "Livret.imposer": function (doc, params) { return CDImp.Livret.executerAvecParams(doc, params); }, "Livret.delivretiser": function (doc) { return CDImp.Livret.delivretiser(doc); }, "NUp.executer": function (doc, params) { return CDImp.NUp.executerAvecParams(doc, params); }, "Decoupe.executer": function (doc, params) { return CDImp.Decoupe.executerAvecParams(doc, params); }, "Marges.executer": function (doc, params) { return CDImp.Marges.executerAvecParams(doc, params); }, "Reperes.executer": function (doc, params) { return CDImp.Reperes.executerAvecParams(doc, params); } }; /** * Appelee par chaque module a l'issue d'une execution reussie, pour * permettre "Repeter la derniere action" et la sauvegarde en preset. * * @param {String} cle une des cles de CDImp.Auto._dispatch * @param {Object} params parametres necessaires au rejeu */ CDImp.Auto.enregistrerDerniereAction = function (cle, params) { if (!CDImp.Auto._dispatch[cle]) { return; // cle inconnue : on ignore silencieusement (pas bloquant) } CDImp.Auto.derniereAction = { cle: cle, params: params || {} }; }; /** * Rejoue la derniere action enregistree sur le document fourni (typiquement * un nouveau document different de celui d'origine), sans repasser par les * boites de dialogue. */ CDImp.Auto.repeterDerniereAction = function (doc) { if (!CDImp.Auto.derniereAction) { CDImp.Util.erreur("Aucune action a repeter : lancez d'abord un module d'imposition."); return; } try { doc = CDImp.Util.getDocActif(doc); var fn = CDImp.Auto._dispatch[CDImp.Auto.derniereAction.cle]; var destDoc = fn(doc, CDImp.Auto.derniereAction.params); CDImp.Util.info("Derniere action (" + CDImp.Auto.derniereAction.cle + ") rejouee avec succes."); return destDoc; } catch (e) { CDImp.Util.erreur("Erreur lors de la repetition de l'action : " + e.toString()); } }; /** * Enregistre la derniere action sous un nom de preset persistant. */ CDImp.Auto.sauvegarderPreset = function (nomPreset) { if (!CDImp.Auto.derniereAction) { CDImp.Util.erreur("Aucune action a enregistrer : lancez d'abord un module d'imposition."); return; } CDImp.Util.avecPrivileges(function () { global.impositionSettings[nomPreset] = CDImp.Auto.derniereAction; }); CDImp.Util.info("Preset \"" + nomPreset + "\" enregistre."); }; /** * Retourne la liste des noms de presets enregistres. */ CDImp.Auto.listerPresets = function () { var noms = []; for (var nom in global.impositionSettings) { if (global.impositionSettings.hasOwnProperty(nom)) { noms.push(nom); } } return noms; }; /** * Charge un preset et l'execute directement sur le document fourni. */ CDImp.Auto.chargerEtExecuterPreset = function (doc, nomPreset) { var action = global.impositionSettings[nomPreset]; if (!action) { CDImp.Util.erreur("Preset introuvable : " + nomPreset); return; } try { doc = CDImp.Util.getDocActif(doc); var fn = CDImp.Auto._dispatch[action.cle]; var destDoc = fn(doc, action.params); CDImp.Util.info("Preset \"" + nomPreset + "\" execute avec succes."); return destDoc; } catch (e) { CDImp.Util.erreur("Erreur lors de l'execution du preset : " + e.toString()); } }; /** * Supprime un preset enregistre. */ CDImp.Auto.supprimerPreset = function (nomPreset) { CDImp.Util.avecPrivileges(function () { delete global.impositionSettings[nomPreset]; }); }; // ----------------------------------------------------------------------- // Point d'entree du module // ----------------------------------------------------------------------- CDImp.Auto.lancer = function (doc) { try { doc = CDImp.Util.getDocActif(doc); } catch (e) { CDImp.Util.erreur(e.toString()); return; } var presets = CDImp.Auto.listerPresets(); var options = [ { cName: "Repeter la derniere action sur ce document", cReturn: "repeter" }, { cName: "Enregistrer la configuration actuelle comme preset", cReturn: "sauvegarder" } ]; if (presets.length > 0) { options.push({ cName: "Charger et executer un preset...", cReturn: "charger" }); options.push({ cName: "Supprimer un preset...", cReturn: "supprimer" }); } var choix = app.popUpMenu.apply(app, options); if (!choix) { return; } switch (choix) { case "repeter": CDImp.Auto.repeterDerniereAction(doc); break; case "sauvegarder": { var nom = app.response({ cQuestion: "Nom du preset :", cTitle: "Enregistrer la configuration", cDefault: "MonPreset" }); if (nom === null || nom === "") { return; } CDImp.Auto.sauvegarderPreset(nom); break; } case "charger": { var presetsOptions = presets.map(function (n) { return { cName: n, cReturn: n }; }); var nomChoisi = app.popUpMenu.apply(app, presetsOptions); if (!nomChoisi) { return; } CDImp.Auto.chargerEtExecuterPreset(doc, nomChoisi); break; } case "supprimer": { var presetsOptionsSupp = presets.map(function (n) { return { cName: n, cReturn: n }; }); var nomASupprimer = app.popUpMenu.apply(app, presetsOptionsSupp); if (!nomASupprimer) { return; } CDImp.Auto.supprimerPreset(nomASupprimer); CDImp.Util.info("Preset \"" + nomASupprimer + "\" supprime."); break; } } };