Le Site du dernier matou

Le site qui fait miaou!

Aucun commentaire

Lors d'un précédent article je parlais de Mutt, un client de messagerie. Pour pouvoir l'utiliser, il me manquait une fonctionnalité pouvoir consulter tous mes anciens courriers lorsque je suis sans connexion.

Si Mutt n'a pas cette fonctionnalité, on peut l'obtenir de manière presque transparente grâce à Offlineimap. Ce logiciel s'occupe de synchroniser votre ou vos boites mails distantes dans un répertoire de votre ordinateur et Mutt lira vos courriers sur ce répertoire plutôt que sur la boite distante.

Pour l'installation :

aptitude install offlineimap

Ensuite il faut le configurer en éditant le fichier ".offlineimaprc" dans votre répertoire personnel :

[general]
accounts = Perso, Pro
[Account Perso]
localrepository = PersoLocal
remoterepository = PersoDistant
status_backend = sqlite
[Repository PersoDistant]
type = IMAP
remotehost = adressePerso.net
remoteuser = IdentifiantPerso
remotepass = MotDePassePerso
ssl = yes
sslcacertfile = /etc/ssl/certs/ca-certificates.crt
[Repository PersoLocal]
type = Maildir
localfolders = ~/Maildir/Perso
restoreatime = no
[Account Pro]
localrepository = ProLocal
remoterepository = ProDistant
status_backend = sqlite
[Repository ProDistant]
type = IMAP
remotehost = adressePro.net
remoteuser = IdentifiantPro
remotepass = MotDePassePro
ssl = yes
sslcacertfile = /etc/ssl/certs/ca-certificates.crt
[Repository ProLocal]
type = Maildir
localfolders = ~/Maildir/Pro
restoreatime = no

Comme vous l'aurez compris, offlineimap va synchroniser mes boites distantes personnelle et professionnelle dans le répertoire Maildir. Si vous lancez la commande "offlineimap", la synchronisation débute, la première fois pourra être très longue suivant le nombre de courriers à récupérer.

Pour automatiser la procédure on écrit un petit script (que j'ai appelé sync.sh pour ne pas être original) :

#!/bin/bash
imapactive=$(ps -ef | grep offlineimap | grep -v grep | wc -l)
# Tuer offlineimap s'il est actif (car il a planté)
case $imapactive in
        '1')
                killall offlineimap && sleep 5
                ;;
esac
/usr/bin/offlineimap -u quiet

Et on ajoute une règle à la con cron :

crontab -e

Ajouter la ligne suivante :

*/10 * * * * ~/sync.sh

Ainsi la synchronisation aura lieu toutes les dix minutes. Il ne reste plus qu'à configurer Mutt pour qu'il lise les courriers dans le répertoire Maildir, pour cela retirer la configuration imap de ".muttrc" pour la remplacer par:

# Mutt doit utiliser le fomat Maildir
set mbox_type=Maildir
# On configure les répertoires communs
set spoolfile="~/Maildir/Perso/INBOX"
set folder="~/Maildir"
folder-hook Perso set record="+Perso/Sent"
folder-hook Pro set record="+Pro/Sent"
folder-hook Perso set postponed="+Perso/Drafts"
folder-hook Pro set postponed="+Pro/Drafts"
set tmpdir    = ~/tmp
# On initialise les boites en balayant les répertoires de ~/Maildir:
mailboxes `find ~/Maildir/ -type d -name cur -printf '%h '`

Et voilà, vos mails sont relevés toutes les dix minutes et sauvegardés en local, Mutt aura toujours accès à vos mails avec au pire un décalage de dix minutes.

Aucun commentaire

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.