ACut a écrit :
Ci-dessous un script JS pour te dépanner.
Il est compatible Indesign CS et CS2, Mac ou Win.
Code :
- /***************************************************/
- /* DupliTickets.js */
- /* tourne sous CS & CS2 */
- /***************************************************/
- // !! Toujours sauvegarder votre document AVANT de lancer !!
- //----------------------------------------------------------
- // GLOBALS
- //----------------------------------------------------------
- var NUM_PER_PAGE = 4;
- var NUM_FORMAT = "000";
- var PATTERN = "<([1-9])>"; // les modeles de numeros sont de la forme <n>
- //----------------------------------------------------------
- // OUTILS
- //----------------------------------------------------------
- /*int*/ function getPageNb()
- //----------------------------------------------------------
- {
- saisie = prompt("Nombre de tickets à générer", NUM_PER_PAGE);
- if (saisie)
- {
- nTickets = parseInt(saisie);
- if ( nTickets<=0 ) return(null);
- }
- return(Math.ceil(nTickets / NUM_PER_PAGE));
- }
- /*str*/ function formatNumero(/*str*/ digit, /*int*/ offset)
- //----------------------------------------------------------
- {
- var num = '' + (offset + (digit-0));
- var numStr = NUM_FORMAT.substr(num.length) + num;
- return(numStr);
- }
- //----------------------------------------------------------
- // METHODES PRINCIPALES
- //----------------------------------------------------------
- /*void*/ Paragraph.prototype.tryReplaceTicketNum = function(/*int*/ pgNum)
- //----------------------------------------------------------
- {
- var offset = (pgNum-1) * NUM_PER_PAGE;
- RE = new RegExp(PATTERN, "gi" );
- pText = this.contents;
- if ( (results = RE.exec(pText)) != null )
- {
- ticketNum = formatNumero(results[1], offset);
- range = [results.index, results.index + results[0].length - 1];
- this.characters.itemByRange(range[0],range[1]).contents = ticketNum;
- }
- }
- /*void*/ Page.prototype.setTicketNums = function(/*int*/ pgNum)
- //----------------------------------------------------------
- {
- var pgItems = this.allPageItems;
- for (var i=pgItems.length-1 ; i>=0 ; i--)
- if ( pgItems[i] instanceof TextFrame )
- for (var j=pgItems[i].paragraphs.length-1 ; j>= 0 ; j--)
- pgItems[i].paragraphs[j].tryReplaceTicketNum(pgNum);
- }
- //----------------------------------------------------------
- // PROGRAMME
- //----------------------------------------------------------
- if ( app.documents.length > 0 )
- {
- var PAGE1 = app.activeDocument.pages.firstItem();
- var NPAGES = getPageNb();
- if (NPAGES)
- {
- for (p=2 ; p<=NPAGES ; p++)
- {
- pg_p = PAGE1.duplicate(LocationOptions.atEnd);
- pg_p.setTicketNums(p);
- }
- PAGE1.setTicketNums(1);
- }
- }
- else
- alert("Aucun document ouvert!" );
|
MODE D'EMPLOI
1) Fais un copier-coller du code dans un fichier nommé par exemple DupliTickets.js
(tu peux aussi mettre le suffixe jsx pour CS2)
2) Place le fichier dans le dossier %InDesign%/Presets/Scripts
(le script sera alors accessible depuis la palette Scripts d'InDesign)
3) Utilisation:
- ta page modèle doit être la première page du document;
- remplace les numéros indiqués dans la page-modèle par les marqueurs suivants:
<1>, <2>, <3>, <4>
(Le programme recherche le motif <n>, où n est entre 1 et 9: le script permet donc de gérer si besoin jusqu'à 9 tickets par page, cf. la variable NUM_PER_PAGE)
- ATTENTION: sauvegarde ton document modèle avant de lancer le script, car son action n'est pas réversible
- il est possible de moduler les paramètres suivants:
NUM_PER_PAGE indique le nombre de tickets par page (=4 par défaut)
NUM_FORMAT indique le nombre de chiffres à utiliser pour former un numéro (="000" par défaut)
- une fois lancé, le script te demande le nombre total de tickets à générer. En fait, il en déduit le nombre de pages correspondant et remplit entièrement toutes les pages générées. Par exemple, si tu veux 13 tickets, il va en fait construire 4 pages, d'où 16 tickets.
- la complexité des blocs et/ou groupes constitutifs d'un ticket est sans incidence, du moment que le script trouve ses marqueurs <n>. Rien ne t'empêche d'ailleurs de construire un modèle de ticket où la numérotation apparaît à plusieurs endroits, il suffit de répéter <n> partout où c'est utile.
Voilà. J'espère que ça te fera gagner du temps.
|