2010-02-18 Une bannière en ligne de commande

Vous organisez une activité publique et vous disposez par exemple d'un local dans l'école de vos enfants, mais vous craignez que le public s'égare dans ses couloirs longs et lugubres. Il vous faut donc punaiser sur les murs de grandes inscriptions indiquant le chemin à suivre.

Il existe pour ça un programme très utile intitulé Poster [1] qui permet d'agrandir à volonté un fichier postscript de manière à ce qu'il s'inscrive sur une série de feuilles A4, ou autres. Il imprime également des repères permettant de superposer légèrement les feuilles de manières à les assembler sans qu'il n'y ait de vides ou de problèmes de continuité. Sa page de manuel comprend une section inhabituelle où il n'est pas question d'options ou de variables, mais bien de l'usage de la colle et des ciseaux.

Pour les paresseux, il y a moyen de réaliser le tout sans même passer par un logiciel graphique du type Inkscape ou Draw.

  $ echo "Install-Party Linux 16/02/2010 ->" > fichier.txt

On convertit ce fichier en PostScript via enscript [2], en utilisant l'option -B qui évite que le fichier engendré comprenne un header, et éventuellement en spécifiant une police:

  $ enscript -B -f Courier-BoldOblique15 -o fichier.ps fichier.txt

Le fichier obtenu, bien qu'il ne comprenne qu'une ligne de texte, occupe cependant toute la surface d'une page A4. On va le convertir en .eps de manière à rogner tout l'espace blanc superflu qui entoure le texte. On utilise pour ça ps2epsi qui fait partie du paquet ghostscript. Il calcule automatiquement la taille de la «boîte» la plus réduite entourant la partie à imprimer:

    $ ps2epsi  fichier.ps fichier.eps

On peut vérifier le résultat avec gv:

http://www.k1ka.be/pics/banniere1.jpeg

Il reste à se servir de Poster pour répartir le tout sur plusieurs feuilles. On peut spécifier le mode d'agrandissement de plusieurs manières mais dans ce cas-ci le plus simple est de spécifier uniquement un facteur d'agrandissement, en tâtonnant jusqu'à ce que le texte soit agrandi au maximum tout en tenant sur une seule rangée de feuilles A4. Poster se charge de choisir au mieux le nombre de pages nécessaires et leur orientation.

Dans ce cas-ci, je suis arrivé à un facteur de 22:

  $ poster -s22 fichier.eps > output.ps

ce qui donne 9 pages prêtes à être assemblées.

http://www.k1ka.be/pics/banniere2.jpeg

En augmentant le facteur d'agrandissement, les pages passent en mode portrait.

Pour connaître les polices reconnues par Enscript, exécuter un

  $ grep FontName /usr/share/enscript/afm/*
  /usr/share/enscript/afm/agd.afm:FontName AvantGarde-Demi
  /usr/share/enscript/afm/agdo.afm:FontName AvantGarde-DemiOblique
  /usr/share/enscript/afm/agw.afm:FontName AvantGarde-Book
  /usr/share/enscript/afm/agwo.afm:FontName AvantGarde-BookOblique
  /usr/share/enscript/afm/bkd.afm:FontName Bookman-Demi
  /usr/share/enscript/afm/bkdi.afm:FontName Bookman-DemiItalic
  /usr/share/enscript/afm/bkl.afm:FontName Bookman-Light
  /usr/share/enscript/afm/bkli.afm:FontName Bookman-LightItalic
  /usr/share/enscript/afm/cob.afm:FontName Courier-Bold
  /usr/share/enscript/afm/cobo.afm:FontName Courier-BoldOblique
  /usr/share/enscript/afm/com.afm:FontName Courier
  /usr/share/enscript/afm/coo.afm:FontName Courier-Oblique
  /usr/share/enscript/afm/hv.afm:FontName Helvetica
  /usr/share/enscript/afm/hvb.afm:FontName Helvetica-Bold
  /usr/share/enscript/afm/hvbo.afm:FontName Helvetica-BoldOblique
  /usr/share/enscript/afm/hvc.afm:FontName Helvetica-Condensed
  /usr/share/enscript/afm/hvcb.afm:FontName Helvetica-Condensed-Bold
  /usr/share/enscript/afm/hvcbo.afm:FontName Helvetica-Condensed-BoldObl
  /usr/share/enscript/afm/hvcdo.afm:FontName Helvetica-Condensed-Oblique
  /usr/share/enscript/afm/hvn.afm:FontName Helvetica-Narrow
  /usr/share/enscript/afm/hvnb.afm:FontName Helvetica-Narrow-Bold
  /usr/share/enscript/afm/hvnbo.afm:FontName Helvetica-Narrow-BoldOblique
  /usr/share/enscript/afm/hvno.afm:FontName Helvetica-Narrow-Oblique
  /usr/share/enscript/afm/hvo.afm:FontName Helvetica-Oblique
  /usr/share/enscript/afm/matrix.afm:FontName Matrix
  /usr/share/enscript/afm/ncb.afm:FontName NewCenturySchlbk-Bold
  /usr/share/enscript/afm/ncbi.afm:FontName NewCenturySchlbk-BoldItalic
  /usr/share/enscript/afm/nci.afm:FontName NewCenturySchlbk-Italic
  /usr/share/enscript/afm/ncr.afm:FontName NewCenturySchlbk-Roman
  /usr/share/enscript/afm/pob.afm:FontName Palatino-Bold
  /usr/share/enscript/afm/pobi.afm:FontName Palatino-BoldItalic
  /usr/share/enscript/afm/poi.afm:FontName Palatino-Italic
  /usr/share/enscript/afm/por.afm:FontName Palatino-Roman
  /usr/share/enscript/afm/sy.afm:FontName Symbol
  /usr/share/enscript/afm/tib.afm:FontName Times-Bold
  /usr/share/enscript/afm/tibi.afm:FontName Times-BoldItalic
  /usr/share/enscript/afm/tii.afm:FontName Times-Italic
  /usr/share/enscript/afm/tir.afm:FontName Times-Roman
  /usr/share/enscript/afm/zcmi.afm:FontName ZapfChancery-MediumItalic
  /usr/share/enscript/afm/zd.afm:FontName ZapfDingbats

Avec l'option -f de Enscript, il faut ajouter à ce nom une taille de police au choix. La ZapfChancery-MediumItalic ne manque pas de cachet:

http://www.k1ka.be/pics/banniere3.jpeg

Dès qu'on utilise des caractères accentués, il faut prendre garde à l'encodage de l'environnement. Enscript ne supporte pas l' utf-8 [3], il faudra donc convertir le fichier initial pour s'assurer qu'il est en latin-1.

  $ recode utf8..latin1 fichier.txt

La page de manuel de Poster précise également que la totalité de la page initiale est incorporée à chaque page du fichier final. Pour chaque page, c'est seulement un zoom et un décalage qui sont spécifiés, de manière à ce que seule une portion de la page initiale s'imprime. Ça n'a guère d'importance avec un court texte comme dans cet exemple, mais il faut faire attention à la taille du fichier final lorsqu'on inclut une image. Le poid du fichier croît de manière à peu près proportionnelle avec le nombre de pages.

À l'époque où les imprimantes débitaient des feuilles assemblées en zig-zag et munies de perforations, il existait des utilitaires sous Dos intitulés Banner ou autres qui permettaient ce genre de chose... Par pure nostalgie, je ne désespère d'un jour en retrouver parmi des abandonwares...