J'ai récupéré des fichiers PDF qui ne sont qu'une suite de pages numérisées d'un livre. Ça permet de lire le livre mais s'il faut faire une recherche dedans ou vouloir le remettre en page, c'est pas top.

Cependant avec quelques outils on peut passer du PDF au TXT assez vite. Voici les paquets à installer :

aptitude install pdftk graphicsmagick-imagemagick-compat tesseract-ocr

Ensuite les trois étapes de la conversion :

  1. On extrait la page 123 de fichier.pdf et on crée un fichier ec.pdf avec cette seule page.
    pdftk fichier.pdf cat 123 output ec.pdf
  2. On convertit ec.pdf en image PNG.
    convert -density 300 ec.pdf ec.png
  3. On lance une reconnaissance optique des caractères sur l'image ec.png et on enregistre le résultat dans 123.txt
    tesseract ec.png 123.txt

Alors évidemment si le fichier contient beaucoup de pages, il faut automatiser à d'un script bash:

#!/bin/bash

Nombre_arguments_attendus=3

if [ $# -ne $Nombre_arguments_attendus ]
then
    echo "Trois paramètres obligatoires le nom du fichier PDF,"
    echo "le numéro de la première et de la dernière page à extraire."
    exit 1
fi

echo ">>> Extraction du fichier $1,"
echo "de la page $2 à la $3."

for nbr in $(seq $2 $3)
do
    echo ">>> Extraction de la page $nbr"
    pdftk "$1" cat $nbr output ec.pdf
    echo "Conversion en image"
    convert -density 300 ec.pdf ec.png
    tesseract ec.png "$1"-$nbr
done

echo ">>> Nettoyage"
rm ec.pdf ec.png

exit 0

Ce petit script prend trois argument: le nom de fichier, les numéros de la première et de la dernière page à traiter. Il enregistre des fichiers texte en ajoutant le numéro de la page au nom du fichier PDF.

Le résultat n'est pas parfait, la reconnaissance des caractères s'est fait piéger par certaines pages contenant des images. Par contre une mise en page sur deux colonnes ne pose aucun souci.

D'autres solutions sont possibles avec les outils poppler (paquet poppler-utils).

  • La conversion directe du pdf en image avec pdftoppm.
  • L'extraction des images avec pdfimages.

Si j'ai encore besoin de ce script je verrai si ça peut l'améliorer.

Un grand merci à Vincent pour l'idée de l'article.