samedi 14 mai 2011

Polygonia est de retour

Après de très longs mois d'absence, Polygonia.fr reprend du service. En cette période de recherche d'emploi, de nombreux employeurs m'ont demandé un book.

Il est aujourd'hui à jour, sauf la rubrique Print qui va demander un peu plus de travail peut-être pour présenter mes réalisations.

Alors attention, le www ne fonctionne pas (j'y travaille) mais pas de problème sur http://polygonia.fr.

Dans mes projets aussi une petite revue du Webdesign de ce blog, parce que maintenant je sais intégrer (pas comme à l'époque à laquelle je l'ai ouvert) et qu'il a besoin d'être personnalisé.

J'avoue qu'il n'est pas trop prévu de changer la charte noir/orange de Polygonia, car retoucher le graphisme sur le Flash du portfolio risque d'être assez laborieux. En effet je n'ai pas fait de Flash depuis ... ...
Une adaptation de ce blog à cette charte noir/orange avec un petit coup de jeune sera parfaite !

mercredi 15 avril 2009

Index personnalisé sous InDesign grâce à JavaScript

Vous voulez générer un index très personnalisé sous InDesign ? A partir de contenu XML par exemple ? Voici une solution.

Je comptais poster quelque part sur la toile (tant qu'à faire, chez moi) un petit morceau de script que j'ai écrit. C'est assez technique (du moins ça paraît) ce qui est inhabituel sur ce blog, mais ce script est hyper utile et tout bête à utiliser, il est principalement destiné aux graphistes s'intéressant au XML et/ou au JavaScript sous InDesign et au développeurs qui souhaitent utiliser la puissance d'InDesign pour générer de beaux livres.

Attention, il ne s'agit pas de générer un index complet avec le tri alphabétique etc. Mais simplement d'insérer les numéros de pages très simplement où l'on veut et vers ce que l'on veut. Pour ma part, la partie tri alphabétique et écriture brute des noms et informations dans l'index sera effectuée en PHP. Je me suis uniquement soucié de la pagination.

Je suis partis du script écrit par ACut, disponible ici. Je l'en remercie d'ailleurs car son script m'évite bien des prises de tête ! Je n'ai vraiment rien trouvé d'autre répondant d'aussi près à ce que je cherchais.
Et je vous préviens, je ne suis pas une brute en JS, loin de là donc le code que j'ai ajouté à celui de ACut n'est sûrement pas dénué de défauts. Aussi je vous invite à me faire part de vos suggestions sur ce petit bout de code sans prétention.

Objectif


Depuis une structure XML générée en PHP grâce à une base de donnée existante, pouvoir créer un index paginé type index d'annuaire avec des renseignements personnalisés.
Il s'agit de l'annuaire d'un diocèse et dans notre cas, nous présentons les noms et prénoms des responsables et autres membres d'équipes à travers un certain nombre de pages où les personnes sont réparties dans différents secteurs géographiques. En gros, cela ressemble à ça. Et toutes ces pages de paroisses présentes donc tous les membres du diocèse.
L'annuaire comporte ensuite des pages (et des pages) d'indexes, où les personnes sont triées par catégories ET où des informations supplémentaires apparaissent tels que l'adresse, lieu de naissance, etc.

InDesign ne remplit pas ce rôle ?


En effet, InDesign permet de créer des indexes MAIS :
- ce sont des indexes de mots seulement, on ne peut pas donner d'autres informations pour chaque élément,
- L'outil d'index est fait pour générer un index depuis l'interface d'InDesign, et non depuis un contenu XML importé.
- Et finalement, les mots doivent êtres indexés manuellement (vous imaginez le boulot pour un annuaire)

Alors, il existe bien des scripts (très puissants) comme le Index brutal de Marc Autret, mais celui-ci ne nous permettra pas d'insérer nos informations complémentaires sur les personnes. Et c'est un peu compliqué pour nous de devoir générer une liste de mots à indexer à chaque fois.

Le script de ACut


Et bien le script de cette personne est très bon, je l'ai testé, il fonctionne bien MAIS :
- il n'insère pas plusieurs numéros de pages successifs faisant référence à plusieurs signets de même nom (d'ailleurs, est-ce possible ça, plusieurs signets de même nom normalement ?)
- on ne peut générer les signets en XML, ils doivent être appliqués manuellement !

Mon code


Voici donc ce que je propose :
Oublier la manipulation de signets et rechercher directement dans le texte les chaînes de caractères puis retourner la liste des numéros de pages, tout simplement.
Il suffit alors, pour insérer les numéro de pages de Paul DUPOND, d'écrire <<Paul DUPOND>> à l'endroit où ils doivent apparaître. Et c'est tout !

Il faut tout de même que "Paul DUPOND" soit toujours écrit ainsi, on est insensible à la casse à priori, mais on ne peut pas mettre "DUPOND Paul".
Mais cela dit, on peut tout de même succéder les deux balises ainsi <<Paul DUPOND>>, <<DUPOND Paul>> afin de récupérer tous les numéros de pages des deux formes !

En PHP, il ne me reste donc qu'à générer mes pages en brut, et insérer les petites balises spéciales ! L'utilisateur lancera la routine quand il sera prêt à lancer l'impression de son document (pas avant, les numéros de pages ne sont pas dynamique, pas plus que dans la solution de ACut).

Vous me direz "mais si deux personnes ont le même nom?" et Bien je dirais que le problème n'est plus seulement technique, mais informationnel, il faudra bien les différencier dans tous les cas, ces deux personnes. On peut suggérer d'utiliser un numéro en indice par exemple (Paul DUPOND1 et Paul DUPOND2), car cela reste un cas particulier, le script s'y retrouvera et le lecteur également.

Assez parlé, voici le code (à télécharger), à insérer au format js dans le répertoire Scripts (pour CS3, [C]:/Document And Settings/[utilisateur]/Application Data/Adobe/InDesign/Version 5.0/Scripts/Scripts Panel)