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
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
Donc j'ai installé directement en utilisant le gestionnaire de paquets
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 :
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 :
2 - Installer l'image docker pdf2htmlEX
Et maintenant pour convertir un fichier pdf :
Explications :
docker run : lance un container
-ti : c'est le diminutif de
--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 : Bind mount a volume, donc permet de monter un dossier dans le conteneur
Ici
Voilà si vous ne voulez pas vous prendre la tête, utilisez un alias dans .zshrc (ou .bashrc) :
Cela permet donc de convertir mon fichier de cette manière :
Notez ici
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
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 possiblespdf2htmlEX --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
dimanche 22 mars 2020