Skip to Content

Convertir un site HTML en PDF

But de ce document

Ce document me sert de mémo pour recenser les commandes utiles permettant de convertir des pages HTML en fichiers PDF. Mon objectif étant de convertir un site entier en fichier PDF en conservant la feuille de style d’impression du site concerné.

wget

Ces commandes permettent de connaître la liste des pages à convertir :

wget --recursive --level=2 --no-parent www.coagul.org 2> index.txt

cat index.txt | grep "^\-\-..:..:.." | cut -d " " -f3

html2ps

Cette commande permet de convertir directement une page html en ligne en fichier PostScript :

$ html2ps -o test.ps www.coagul.org      

$ ps2pdf mon_fichier.ps mon_fichier.pdf                        

Problèmes rencontrés :

  •  Codage des caractères
  •  Le fichier PostScript ne correspond pas au fichier imprimé mais au fichier réel sans la feuille de style

    wget + htmldoc

    Ces commandes permettent de télécharger une page html et la convertir en fichier pdf :

    wget www.coagul.org

    $ htmldoc --continuous -t pdf index.html > test.pdf

    Problèmes rencontrés :

  •  Le fichier PDF ne correspond pas au fichier imprimé mais au fichier réel sans la feuille de style

    Remarque 1 : Le programme «  htmldoc  » dispose également d’une interface utilisateur pour effectuer tous les réglages plus facilement.

    Remarque 2 : Il est possible également de générer un format livre au lieu du format HTML ce qui offre un bien meilleur rendu.

    Remarque 2 : htmldoc est souvent utilisé par les sites en php/asp pour générer des PDF à la volé.

    Article intéressant sur HTMLDOC :

  •  http://doc.ubuntu-fr.org/htmldoc

    kwebdesktop

    Cette commande permet de créer une image .png de la page en utilisant le rendu de Konqueror :

    $ kwebdesktop 1024 2000 test.png www.coagul.org

    Problèmes rencontrés :

  •  Il faut connaître la hauteur de la page à l’avance
  •  Le rendu est tel qu’a l’écran alors que je voudrais qu’il soit tel qu’a l’impression
  •  Format de sortie en .png et non pas PDF

    khtml2png

    Semble donner le même résultat que kwebdesktop et n’est pas disponible en standard sous Debian :

  •  http://kde-apps.org/content/show.php ?content=10016

    Utiliser Mozilla en ligne de commandes

    Cette méthode semble la meilleure, mais je n’ai pas réussi à la mettre en oeuvre :

  •  http://www.mozilla.org/unix/remote.html

    Dcop et Konqueror

    Avec Dcop, il est possible de piloter Konqueror en ligne de commande.

    Lancement de Konqueror :

    $ kfmclient openURL 'http://www.coagul.org' &

    Je n’ai pas compris la différence avec :

    $ konqueror 'http://www.coagul.org' &

    Récupération de la référence de Konqueror ouverte :

    $ HKON=`dcop | grep konqueror`

    # Recherche de la référence sur la partie ’html-widget’ de konqueror.

    $ HWDG=`dcop $HKON | grep html-widget`

    # Utilisation de la fonction print (true=affiche menu d’impression)

    Impression :

    $ dcop $HKON $HWDG print true

    Mais lors du lancement de l’impression, j’avais systématiquement ce message d’erreur :

    cupsdoprint -P ...

    No printer specified (and PRINTER variable is empty)

    Pour régler ce problème, j’ai ajouté dans le fichier « .bash_profile » la ligne suivante pour initialiser la variable PRINTER et indiquer le nom de l’imprimante PDF à utiliser :

    export PRINTER=Imprimante-PDF

    Ensuite, il faut se reconnecter de KDE pour prendre en compte la modification.

    #!/bin/bash
    konqueror &
    while [ -z "$HKON" ]
    do
     sleep 1
     HKON=`dcop | grep konqueror`
    done

    echo $HKON
    dcop $HCON
    for fichier in `cat index2.txt`
    do
     echo $fichier
     dcop $HKON "konqueror-mainwindow#1" openURL $fichier
     sleep 4
     HWDG=`dcop $HKON | grep html-widget`
     dcop $HKON $HWDG print true
     sleep 3
    done
    #dcop $HKON MainApplication-Interface quit

    Autre variante :

    #!/bin/bash

    # Lance le processus de konqueror en arrière plan
    konqueror &
    # `jobs -p` retourne le numéro du dernier processus lancé en arrîère plan

    pid=`jobs -p`
    konq="konqueror-$pid"

    # Attente que konqueror soit lancé
    sleep 1
    #dcop "konqueror-$PIDkonqueror"

    # Modife l'URL de Konqueror
    dcop $konq "konqueror-mainwindow#1" openURL [http://fr.openoffice.org/->http://fr.openoffice.org/]

    # Attends que la page HTML soit chargée
    # -> ATTENTION : Si la page n'a pas le temps de se charger entièrement, le PDF sera incomplet
    sleep 5

    interface=`dcop $konq | grep html-widget`
    dcop $konq $interface print true

    # Quitte konqueror
    dcop $konq MainApplication-Interface quit

    Problèmes posés par le script :

  •  Si Konqueror est déjà lancé, ça ne fonctionne pas
  •  Certaines pages du Wiki sont à éliminés
  •  Le nom des fichiers PDF correspond au nom de la page sans le chemin ce qui mélange tout dans le PDF final. il faut donc trier la liste des pages avant le traitement et renommer les fichier en fonction de leur date
  •  Il faut intégrer dans le script la création du PDF final, la suppression des PDF avant et après
  •  Impossible de faire une recherche de texte dans les PDF final -> pdftohtml ne donne pas un bon résultat. Je pense que le PDF créé par l’imprimante PDF n’est pas correcte au départ

    Autres liens

    Article intéressant sur le fonctionnement de Dcop :

  •  http://www.commentcamarche.net/forum/affich-1791353-piloter-konqueror-via-un-script-pour-imprimer
  •  http://www.lea-linux.org/cached/index/Dev-dcop.html
  •  http://www-128.ibm.com/developerworks/linux/library/l-dcop/ ?ca=dgr-kdeml01KDEDCOP

    Historique des modifications

    Version Date Commentaire
    0.4 21/03/07 Création par Tony GALMICHE
    0.5 29/05/08 Mise en ligne