Fonction scanner du photocopieur de la bibliothèque

La page suivante a été scannée grâce au photocopieur Xerox de la bibliothèque en mode "courrier électronique", "haute qualité impression", "reconnaissance du format du document automatique", "format PDF".
Je l'ai reçu par mail comme pièce jointe et sauvegardé sous le nom 1.pdf .



La commande 'pdfinfo 1.pdf' donne la taille du document en points pour la résolution 72 points/pouce

[19:07 at/dehon/scan] pdfinfo 1.pdf
Producer:       Xerox WorkCentre Pro 245
CreationDate:   Thu Mar  1 15:37:02 2007
Tagged:         no
Pages:          1
Encrypted:      no
Page size:      1032 x 729 pts
File size:      92719 bytes
Optimized:      no
PDF version:    1.4

Rq : Je peux créer une règle dans 'pine' pour que tous les messages reçus du photocopieur Xerox soient transferrés dans mon dossier mail local ~/mail/scan et je peux écrire un script qui extrait du fichier ~/mail/scan la pièce jointe de chaque message et sauve celle-ci dans mon répertoire ~/scan/ sous un nom incrémenté 1.pdf, 2.pdf, ..

En lançant 'gv 1.pdf', en sélectionnant dans l'onglet convenable l'option "natural size" j'obtiens visuellement les coordonnées du point inférieur gauche et du point supérieur droit d'un rectangle entourant la partie utile du document. (Il s'agit de supprimer les bords noirs.)



Je passe les coordonnées ainsi obtenues comme arguments de l'option "bb=" dans l'instruction "includegraphics" du document pdfmerge.tex ci-dessous :

\documentclass[a4paper,landscape,10pt]{article}
% Enlever landscape pour un format A4 portrait

\usepackage{graphicx}

\pagestyle{empty}
\setlength{\headheight}{0in}
\setlength{\headsep}{0in}
\setlength{\topmargin}{0cm}\addtolength{\topmargin}{-1in}
\setlength{\oddsidemargin}{0cm}\addtolength{\oddsidemargin}{-1in}

\setlength{\textwidth}{297mm}
\setlength{\textheight}{210mm}

\begin{document}
\begin{center}
\includegraphics[width=29.7cm,totalheight=20.9cm,keepaspectratio,clip,viewport=55pt 85pt 904pt 700pt]{1.pdf}

\end{center}
\end{document}

puis compile avec 'pdflatex' et obtiens le fichier pdfmerge.pdf



Rq : Une fois connues les coordonnées des deux points délimitant la zone utile du document scanné, je peux écrire un script qui prend les fichiers ?.pdf trouvés dans un fichier index et fabrique le fichier pdfmerge.pdf.

Voici les deux scripts en question (4 avr. 2008) :

#! /bin/zsh
# usage './prog1 lp10 [dir]' ou './prog1 bibl [dir]'

if (test $1"" != "bibl" -a $1"" != "lp10") then
 echo "usage 'prog1 bibl [dir]' ou 'prog1 lp10 [dir]'"
else

#nbre de messages dans le dossier mail ~/mail/scan +1
n=`cat $HOME"/mail/scan_"$1 |grep "From:" |wc -l`
if (test $n -lt 2) then
 echo "Pas de messages dans le dossier "$HOME"/mail/scan_"$1
else

dir=$2
if (test $dir"" = "") then dir="./";fi
if (test -e $dir -a ! -d $dir) then echo $dir" existe et n\'est pas un repertoire"
else

if (test ! -e $dir) then mkdir $dir;echo "repertoire "$dir" cree";fi
cd $dir

#nettoyage
if (test `ls |grep ".pdf" |wc -l` != "0") then
typeset -i i;i=1;while (test -e $i) do;i+=1;done
mkdir $i
mv *.pdf $i
if (test -e index) then mv index $i;fi
if (test -e pdfmerge.tex) then mv pdfmerge.tex $i;fi
fi
if (test -e index) then rm -f index;fi

echo "lx,ly,rx,ry,orientation,cf entete de prog2" >>index
#telechargement des pieces jointes : les messages sont dans le dossier scan_lp10 de la deuxieme collection ; les pieces jointes sont sauvegardees dans ~/scan/
for ((i=1;i<n;i+=1)) do
a=`echo $i |sed 's/./,&/g'`
b=`pwd |sed 's/./,&/g'`
#xterm -geometry 100x6 -e 'pine -c 2 -f scan_lp10 -I"i,j"$a",CR,>,>,s,^k,s,c,a,n,/"$a",.,p,d,f,CR,q"'
#echo "j"$a",CR,>,>,s,^k"$b",/"$a",.,p,d,f,CR,q"
/usr/bin/pine -c 2 -f "scan_"$1 -I"i,j"$a",CR,>,>,s,^k"$b",/"$a",.,p,d,f,CR,q" >/dev/null
echo $i".pdf" >>index
echo -n $i" "
done
echo

fi
fi
fi


#! /bin/zsh
# usage './prog2 [dir]'

#concatenation dans pdfmerge.pdf
#lx=0cm;ly=0cm;rx=28.9cm;ry=20.9cm pour un format d'origine A4 landscape
#supprimer les options clip,bb=lx ly rx ry si on veut garder le document entier
#lx=80pt #donnees issues de gv option PixelBased de l'onglet 1.000
#orientation="landscape"
#orientation="portrait"

dir=$1;if (test $dir"" = "") then dir="./";fi
if (test ! -d $dir) then echo "repertoire "$dir" inconnu"
else
a=`sed -n '1p' $dir/index`
lx=`echo $a |cut -d"," -f1`
ly=`echo $a |cut -d"," -f2`
rx=`echo $a |cut -d"," -f3`
ry=`echo $a |cut -d"," -f4`
orientation=`echo $a |cut -d"," -f5`
if (test $lx"" = "lx" -o $lx"" = "") then
echo "fichier index absent ou variable lx mal defini"
else
echo $lx,$ly,$rx,$ry,$orientation
rm -f $dir/pdfmerge.tex
if (test $orientation = "landscape") then
  width=29.6;height=20.9
  cp $HOME/scan/pdfmerge.landscape $dir/pdfmerge.tex
else
  width=20.9;height=29.6
  cp $HOME/scan/pdfmerge.portrait $dir/pdfmerge.tex
fi

foreach i in `sed '1d' $dir/index`
echo "\\\\includegraphics[width="$width"cm,totalheight="$height"cm,keepaspectratio,clip,viewport="$lx" "$ly" "$rx" "$ry"]{"$i"}\n" >>$dir/pdfmerge.tex
echo -n `echo $i |cut -d"." -f1`" "
end
echo
echo "\\\\end{center}\n\\\\end{document}\n" >>$dir/pdfmerge.tex
export dir;xterm -geometry 100x6 -e 'cd $dir;pdflatex pdfmerge'
echo "fichier "$dir"/pdfmerge.pdf genere"
fi
fi


Le deuxième script utilise le fichier pdfmerge.landscape ou  pdfmerge.portrait qui consiste en les premières lignes du fichier pdfmerge.tex créé, jusqu'à la ligne \begin{document} comprise.

Rq :
les images 1.jpg et pdfmerge.jpg ont été obtenues avec l'instruction 'convert -density 300 -resize 600x400 1.pdf 1.jpg'.
Pour les arguments de l'instruction includegraphics du module graphicx voir par exemple [B. Desgraupes, LaTeX, p428].
Règle dans pine : menu SETUP - Rules -  Filters - Add : Message is New = Yes, Filter Action = Move Folder List =  /home/at/dehon/mail/scan_bibl
Pour la syntaxe des commandes ZSH voir les pages
   http://zsh.sunsite.dk/Doc/Release/zsh_5.html#SEC18  et  http://zsh.sunsite.dk/Doc/Release/zsh_14.html#SEC63


fx dehon, 1 mars 2007