Pourquoi faire simple quand on peut faire compliqué ?
La complexité du shell n'est qu'une apparence. Penses-tu que j'ai déja manipulé les fichiers pdf, leur extraction ? En fait, j'avoue, je n'ai jamais eu besoin de faire ça.
Quand j'ai eu besoin de le faire (en lisant ce thread), j'ai su comment faire en utilisant mes connaissances de base pour résoudre un problème à priori compliqué.
Tu peux avoir l'impression que cela ira plus vite en utilisant un logiciel tout prêt et dédié à cette tache. Mais combien de temps auras-tu passé à sa découverte et sa maitrise ? Et que feras-tu quand il ne fonctionnera plus ? (arrêt de la maintenance par l'auteur, changement de formats ...).
Pour toutes ces raisons, je pense qu'il est plus intéressant d'acquérir des connaissances de bases, exploitables dans des cas plus généraux et pas forcément semblables. Ces connaissances te resteront toute ta vie, si tu prends garde à apprendre des choses générales.
L'astuce est d'apprendre à combiner des logiciels "généraux" (ici, la suite xpdf, et ImageMagick pour la composition des images).
Au début, c'est difficile, mais au final tu gagnes du temps. J'ai écrit le script en 20 mn, et il a tourné (pendant que je faisais autre chose) pendant 40mn.
Assez parlé, voilà le script:
Code : Tout sélectionner
#!/bin/bash
#pour en apprendre plus, visitez www.finiderire.com
if [ x"$1" == x"" ]; then
echo $0 pdf_a_extraire; exit 1
fi
nb_pages=$(pdfinfo "$1" | awk '$1 ~ /[Pp]ages/ { print $2 }')
if [ "$nb_pages" == "" ]; then
echo "$1" "n'est pas un pdf valide."; exit 2
fi
dest="${1/[Pp][Dd][Ff]/jpg}"
for ((p=1; p<=nb_pages; p++)); do
pz=$(printf %03d $p)
echo "traitement de la page :" $pz
pdftoppm -f "$p" -l "$p" "$1" _"$p"
montage _"$p"* -tile 1x -mode concatenate "$pz"-"$dest"
rm _"$p"*
done
Quelques remarques: pdfimages et son extraction en jpeg ne fonctionne pas. Les extrémités verticales de l'image reprennent le début et la fin de chaque image. Je me suis donc contenté d'extraire en ppm, qui respecte le format original de l'image.
Chaque page est recomposée avec les différents fichiers ppm extraits pour une page donnée. Cela représente une itération dans la boucle "for" (une par page). Les fichiers ppm composants une page sont donc "recollés" par "montage" qui les assemble verticalement. Comme on ne connait pas d'avance le nombre de "bandes" bitmaps pour créer une page, on est obligé de procéder ainsi.
Le nombre total de page à traiter est connu grace à "pdfinfo".
Le nom final est composé de cette façon:
[numéro de page]-[préfixe du pdf original].jpg
Ex, pour "CasusBelli_numero002.Pdf" :
001-CasusBelli_numero002.jpg
002-CasusBelli_numero002.jpg
003-CasusBelli_numero002.jpg
etc...
J'ai testé ce script sur les 20 premiers Casus Belli.
Sur mon portable (plus de toute première jeunesse), le script a tourné environ 40mn pour faire l'encodage de tous les numéros.
J'en ai regardé plusieurs au hasard, il ne semble pas y avoir de problèmes d'encodage.
Pour finir, je remercie les personnes qui s'occupent des scans. Voilà une activité coûteuse en temps et difficile à optimiser (sans massacrer son magazine en l'effeuillant pour le placer dans un bac de photocopieuse/scanner).