Files
copydev-imposing-tool/acrobat-plugin/src/Imposition-07-Auto.js
Jules de76c1776c Ajoute le plugin Acrobat Pro d'imposition (acrobat-plugin/)
Suite d'imposition professionnelle en Folder-Level Scripts JS (7 modules +
verification de licence Vision), avec un plugin natif hybride optionnel
(WinINet + Registre) pour deplacer la verification de licence en code
compile. Installeur install.bat sur le meme modele que celui du projet
desktop (git portable, detection automatique des dossiers Acrobat).
2026-06-21 22:16:24 +02:00

190 lines
7.1 KiB
JavaScript
Executable File

// 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;
}
}
};