Imprimer un grand document sur des feuilles A4

Découper un fichier EPS en petits morceaux
mardi 30 janvier 2007
par  David Cobac
popularité : 1%

M’intéressant à la généalogie, j’ai conçu un arbre dont la dimension dépasse largement celle d’un A4.
Le driver de mon imprimante ne le faisant pas, j’ai alors cherché sur Internet le moyen de découper mon document et là ... pas beaucoup de solutions, voire pas du tout !

Pas n’importe quel document

Il ne s’agit pas d’un document quelconque : il s’agit d’un fichier de type EPS ; je dis de type EPS car en fait il s’agit d’un fichier créé par metapost.

Quelles différences avec un autre type de document allez-vous me dire ?
Hé bien c’est simple :

  • c’est « lisible » puisque c’est un fichier de type texte ;
  • il est parfaitement « encadré » : c’est-à-dire que dans les premières lignes du document (celles décrivant le type de document, les lignes non interprétées) se trouve une ligne très particulière : la « Bounding Box ». C’est cette dernière chose qui est particulièrement intéressante.

La Bounding Box

Voilà ci-dessous par exemple les premières lignes de mon fichier :

%!PS
%%BoundingBox: -2700 -36 2749 908
%%Creator: MetaPost
%%CreationDate: 2007.01.05:1058
%%Pages: 1
%*Font: futr8r 13.1985 9.96265 28:c600007fedbb607ffffee0000000000000000000400000
01c
%*Font: futb8r 13.1985 9.96265 41:f779b6
%*Font: fourier-ms 10.03638 9.96265 b1:800008
%*Font: futr8r 10.03638 9.96265 28:c4ffc17fbfbb007fdfff6000000000000000000040000
020d0001
%*Font: futb8r 10.55885 9.96265 41:f9befbc0000000000000000000000000008
%%EndProlog

La ligne qui m’intéresse est évidemment :
%%BoundingBox: -2700 -36 2749 908

Il s’agit de deux paires de coordonnées :

  • -2700 -36 est le premier point de coordonnées (-2700,-36) ;
  • 2749 908 est le deuxième point de coordonnées (2749,908).
    En clair, le premier point est le point supérieur gauche du document et le deuxième, le point inférieur droit.

Bref, je connais les dimensions de mon document...si je connais l’unité utilisée.
Hé bien l’unité est le « point postscript », si on ne sait pas, un petit tour sur google : 1 point PostScript = 0,352777778 millimètres
Ainsi, une rapide conversion me dit que mon document fait une largeur de 192.23 cm (soit 1m 92 !) et une hauteur de 33.30 cm.

Une réduction et un découpage

Ainsi, ce document fait un peu plus en hauteur qu’une page A4 en orientation portrait (pas de chance). On va donc le réduire un peu, en enlevant de notre page A4 1cm en bas et en haut, il nous reste 27.7 cm, ce qui nous fait une réduction d’environ 17%. Le coefficient multiplicateur à appliquer est donc 0.83
Notre largeur sera alors d’environ 159.9 cm, presque 1m 60.
Là encore, en enlevant 1 cm de chaque côté de notre page A4, il nous faudra 9 pages.

Le principe

Nous allons faire un document LaTeX constitué de 9 pages, chacune d’elles contenant le bon bout de notre fichier EPS. Pour cela nous utiliserons le package graphicx donnant accès à la commande « \includegraphics ». Cette commande peut afficher, grâce à l’option bb, une partie d’une image EPS en indiquant la zone à afficher par le principe de la « Bounding Box ».

Je dois donc former 9 « Bounding Box » consécutives, les voilà :

bb=-2700 -36 -2095 908

bb=-2095 -36 -1490 908

bb=-1490 -36 -885 908

bb=-885 -36 -280 908

bb=-280 -36 325 908

bb=325 -36 930 908

bb=930 -36 1535 908

bb=1535 -36 2140 908

bb=2140 -36 2745 908

On remarque que la division par 9 ne tombe pas juste, il faut donc réajuster de 4 points postscript notre largeur, la dernière sera donc réajustée à :
bb=2140 -36 2749 908

Le fichier LaTeX

Il n’y a donc plus qu’à constituer notre fichier LaTeX :

\documentclass{article}
\usepackage[a4paper,text={19cm,27.7cm},dvips]{geometry}
\usepackage[dvips]{graphicx}
\usepackage{pstricks}
\pagestyle{empty}
\begin{document}
\includegraphics[bb=-2700 -36 -2095 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=-2095 -36 -1490 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=-1490 -36 -885 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=-885 -36 -280 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=-280 -36 325 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=325 -36 930 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=930 -36 1535 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=1535 -36 2140 908,clip,scale=.83]%%
{monfichier.eps}
\newpage
\includegraphics[bb=2140 -36 2749 908,clip,scale=.83]%%
{monfichier.eps}
\end{document}

Cerise sur le gâteau

C’est bien mais pour découper c’est pas terriblement efficace sans pointillés (ou plutôt traits-tillés (!)), alors on fait une commande de pointillés :

\newcommand{\separation}{%%
\begin{pspicture}(0,0)%%
\psline[linestyle=dashed,linewidth=.05mm](0pt,-1.5cm)(0pt,28.5cm)%%
\end{pspicture}}

Et notre code LaTeX devient :

\documentclass{article}
\usepackage[a4paper,text={19cm,27.7cm},dvips]{geometry}
\usepackage[dvips]{graphicx}
\usepackage{pstricks}
\pagestyle{empty}
\newcommand{\separation}{%%
\begin{pspicture}(0,0)%%
\psline[linestyle=dashed,linewidth=.05mm](0pt,-1.5cm)(0pt,28.5cm)%%
\end{pspicture}}
\begin{document}
\includegraphics[bb=-2700 -36 -2095 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=-2095 -36 -1490 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=-1490 -36 -885 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=-885 -36 -280 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=-280 -36 325 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=325 -36 930 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=930 -36 1535 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=1535 -36 2140 908,clip,scale=.83]%%
{monfichier.eps}\separation
\newpage
\separation%%
\includegraphics[bb=2140 -36 2749 908,clip,scale=.83]%%
{monfichier.eps}\separation
\end{document}

Il n’y a plus qu’à compiler notre monfichier.tex :

$ latex monfichier

puis de produire un fichier PostScript :

$ dvips monfichier.dvi -o

Et nous obtenons notre joli monfichier.ps

Le gâteau est un peu pourri

Génial direz-vous...mais non, en fait pas terriblement efficace, en effet le fichier que je viens de produire, ici à la maison :-) , pèse finalement environ 2,4 Mo alors que mon image de départ pèse à peine 251 Ko ! Hé bien oui, c’est bien loin d’être un découpage, l’image est tout simplement copié 9 fois dans le fichier produit finalement.

Automatiser

Lire avec une expression régulière la ligne de la « Bounding Box » est une évidence, faire une petite conversion d’unités et une petite division aussi.
Donc le processus décrit dans cette page peut relativement facilement être scripté ; par contre, son intérêt est limité par la taille des fichiers obtenus : si mon arbre augmente en hauteur, j’aurais au moins 2 pages A4 en hauteur et au total 18 feuilles d’où un fichier d’environ 5 Mo... le jeu n’en vaut assurément pas la chandelle !


Certains parleront de la commande poster. Chez moi, elle n’a tout simplement pas fonctionné malgré des heures d’efforts et des passages par pstops.
C’est bien dommage car dans l’absolu, c’est une commande qui simplifie largement les choses !
Si vous avez une solution qui est plus efficace notamment au niveau de la taille finale, n’hésitez pas à me contacter : elle m’intéresse vivement !


Commentaires

Logo de Eric M.
mercredi 19 septembre 2007 à 06h56 - par  Eric M.

Effectivement, en lisant ton article, je me demande comment Poster n’a pas pu faire ce que tu souhaitais. Je fais aussi de la généalogie (avec GRAMPS) et pour convertir un grand graphique produit en Postscript A4 vers un format A0 je fais :

~$ poster -v -mA4 -pA0 rel_graph2.ps>rel_graph2_A0.ps

(où rel_graph2.ps est le fichier de départ et rel_graph2_A0 le fichier produit sur plusieurs pages).

De plus le document sort avec les traits de coupe... d’où un résultat parfait pour l’assemblage.

Annonces

Annuaire LibreNord

Retrouvez l’annuaire de logiciels libres créé par l’association Club Linux Nord-Pas de Calais sur le site suivant http://www.librenord.org