Menu

Convertir un fichier pdf en HTML : pdf2htmlEX

Un outil vieux mais efficace, l'installer, l'utiliser avec docker
Comment convertir un fichier pdf en html efficacement. Je suis tombé sur ce souci en voulant convertir mon propre CV d'un format PDF en HTML sans déformer le fichier.
Pour ce faire je suis tombé sur cet outil pdf2htmlEX, cependant il n'est plus mis à jour depuis 2015 et à un problème de dépendance lorsque l'on veut le compiler.
Il utilise notamment le paquet poppler-utils et donc la librairie poppler.

Il convient de noter que poppler-utils fourni une commande pour convertir des PDF pdftohtml, pdftotext, ..., cependant le résultat est... très peu satisfaisant.

On va donc utiliser docker puisqu'une personne ( bwits ) c'est donnée la peine de créer une image contenant notre outil.

1 - Installer docker

Plusieurs possibilités, utiliser snap ou bien le gestionnaire de paquets directement.
J'ai eu un souci en voulant utiliser docker par snap snap install docker
Donc j'ai installé directement en utilisant le gestionnaire de paquets apt install docker.io, c'est bien mieux puisque les personnes qui maintiennent ces paquets s'assurent qu'ils sont prêts à l'emploi.

Ensuite pour éviter d'avoir à appeler la commande docker avec l'utilisateur root, il faut créer un groupe docker et s'ajouter à ce groupe.
Le service docker devrait donner les droits d'accès au socket pour le groupe en démarrant.
En claire, la commande docker communique avec un démon (programme qui tourne en arrière plan), l'accès en est par défaut restreint à l'utilisateur root.
Pour éviter donc d'appeler la commande docker avec sudo :

sudo groupadd docker
sudo usermod -aG docker $USER


Il faudra surement se déconnecter et redémarrer le service docker, ou redémarrer la machine pour que celà prenne effet.

Vérifiez le résultat en utilisant cette commande :

docker run hello-world

2 - Installer l'image docker pdf2htmlEX

sudo docker pull bwits/pdf2htmlex

Et maintenant pour convertir un fichier pdf :

docker run -ti --rm -v `pwd`:/pdf bwits/pdf2htmlex pdf2htmlEX [args] monfichier.pdf

Explications :

docker run : lance un container
-ti : c'est le diminutif de -it is short for --interactive + --tty
--interactive : Keep STDIN open even if not attached, permet donc de continuer à envoyer des commandes vers le conteneur
--tty : Allocate a pseudo-TTY, fourni donc le retour des commandes vers le terminal, ou plutôt la sortie standard

En résumé -ti est nécessaire pour les images docker qui fournissent une ligne de commande plutôt qu'un service (ou démon).

-v : alias de --volume list
--volume list : Bind mount a volume, donc permet de monter un dossier dans le conteneur

Ici `pwd` donne le chemin vers le dossier courant, les : servent de délimiteur et /pdf est le dossier du conteneur vers lequel monter le résultat de `pwd`

Voilà si vous ne voulez pas vous prendre la tête, utilisez un alias dans .zshrc (ou .bashrc) :
alias pdf2htmlEX="docker run -ti --rm -v $(pwd):/pdf bwits/pdf2htmlex pdf2htmlEX"

Cela permet donc de convertir mon fichier de cette manière :

pdf2htmlEX --zoom=2 monfichier.pdf

Notez ici --zoom ,  permet d'agrandir le résultat. Plusieurs autres paramètres sont possibles
pdf2htmlEX --help

sources :
https://www.wild-inter.net/posts/pdf2htmlEX-on-docker
https://github.com/coolwanglu/pdf2htmlEX
https://gitlab.freedesktop.org/poppler/poppler
https://doc.ubuntu-fr.org/poppler-utils
Sunday March 22, 2020