Passer au contenu

Convertir un fichier pdf en HTML : pdf2htmlEX

Un outil ancien mais efficace : l'installer et 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 a 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 fournit 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 ) s'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 clair, la commande docker communique avec un démon (programme qui tourne en arrière-plan), dont l'accès 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 sûrement se déconnecter et redémarrer le service docker, ou redémarrer la machine pour que cela 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 : diminutif de -it, short for --interactive + --tty
--interactive : Keep STDIN open even if not attached, permet de continuer à envoyer des commandes vers le conteneur
--tty : Allocate a pseudo-TTY, fournit le retour des commandes vers la sortie standard du terminal

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, permet de monter un dossier dans le conteneur

Ici $(pwd) donne le chemin vers le dossier courant, les deux-points : servent de délimiteur et /pdf est le dossier du conteneur vers lequel monter le résultat.

Pour se simplifier la vie, utilisez un alias dans votre .zshrc (ou .bashrc) :
alias pdf2htmlEX="docker run -ti --rm -v $(pwd):/pdf bwits/pdf2htmlex pdf2htmlEX"

Cela permet de convertir un fichier très simplement :

pdf2htmlEX --zoom=2 monfichier.pdf

L'option --zoom permet d'agrandir la résolution du rendu. De nombreux paramètres sont disponibles avec :
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
juniko
3 min