<h2>But de ce document</h2>
<p class="spip">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é.</p>

<h2>wget</h2>
<p class="spip">Ces commandes permettent de connaître la liste des pages à convertir :</p>

<p class="spip"><code class='spip_code' dir='ltr'>wget --recursive --level=2 --no-parent www.coagul.org 2> index.txt</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>cat index.txt | grep "^\-\-..:..:.." | cut -d " " -f3</code></p>

<h2>html2ps</h2>
<p class="spip">Cette commande permet de convertir directement une page html en ligne en fichier PostScript :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ html2ps -o test.ps www.coagul.org      </code></p>

<p class="spip"><code class='spip_code' dir='ltr'>$ ps2pdf mon_fichier.ps mon_fichier.pdf                        </code></p>

<p class="spip">Problèmes rencontrés :
<br /></p>
<li> Codage des caractères
<br /><li> Le fichier PostScript ne correspond pas au fichier imprimé mais au fichier réel sans la feuille de style
<h2>wget + htmldoc</h2>
<p class="spip">Ces commandes permettent de télécharger une page html et la convertir en fichier pdf :</p>

<p class="spip"><code class='spip_code' dir='ltr'>wget www.coagul.org</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>$ htmldoc --continuous -t pdf index.html > test.pdf</code></p>

<p class="spip">Problèmes rencontrés :
<br /></p>
<li> Le fichier PDF ne correspond pas au fichier imprimé mais au fichier réel sans la feuille de style
<p class="spip"><strong class="spip">Remarque 1</strong> : Le programme « <strong class="spip"> htmldoc </strong> » dispose également d’une interface utilisateur pour effectuer tous les réglages plus facilement.</p>

<p class="spip"><strong class="spip">Remarque 2</strong> : Il est possible également de générer un format livre au lieu du format HTML ce qui offre un bien meilleur rendu.</p>

<p class="spip"><strong class="spip">Remarque 2</strong> : htmldoc est souvent utilisé par les sites en php/asp pour générer des PDF à la volé.</p>

<p class="spip">Article intéressant sur HTMLDOC :
<br /></p>
<li> <a href="http://doc.ubuntu-fr.org/htmldoc" class="spip_out">http://doc.ubuntu-fr.org/htmldoc</a>
<h2>kwebdesktop</h2>
<p class="spip">Cette commande permet de créer une image .png de la page en utilisant le rendu de Konqueror :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ kwebdesktop 1024 2000 test.png www.coagul.org</code></p>

<p class="spip">Problèmes rencontrés :
<br /></p>
<li> Il faut connaître la hauteur de la page à l’avance
<br /><li> Le rendu est tel qu’a l’écran alors que je voudrais qu’il soit tel qu’a l’impression
<br /><li> Format de sortie en .png et non pas PDF
<h2>khtml2png</h2>
<p class="spip">Semble donner le même résultat que kwebdesktop et n’est pas disponible en standard sous Debian :
<br /></p>
<li> <a href="http://kde-apps.org/content/show.php?content=10016" class="spip_out">http://kde-apps.org/content/show.php ?content=10016</a>
<h2>Utiliser Mozilla en ligne de commandes</h2>
<p class="spip">Cette méthode semble la meilleure, mais je n’ai pas réussi à la mettre en oeuvre :
<br /></p>
<li> <a href="http://www.mozilla.org/unix/remote.html" class="spip_out">http://www.mozilla.org/unix/remote.html</a>
<h2>Dcop et Konqueror</h2>
<p class="spip">Avec Dcop, il est possible de piloter Konqueror en ligne de commande.</p>

<p class="spip">Lancement de Konqueror :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ kfmclient openURL 'http://www.coagul.org' &</code></p>

<p class="spip">Je n’ai pas compris la différence avec :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ konqueror 'http://www.coagul.org' &</code></p>

<p class="spip">Récupération de la référence de Konqueror ouverte :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ HKON=`dcop | grep konqueror`</code></p>

<p class="spip"># Recherche de la référence sur la partie ’html-widget’ de konqueror.</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ HWDG=`dcop $HKON | grep html-widget`</code></p>

<p class="spip"># Utilisation de la fonction print (true=affiche menu d’impression)</p>

<p class="spip">Impression :</p>

<p class="spip"><code class='spip_code' dir='ltr'>$ dcop $HKON $HWDG print true</code></p>

<p class="spip">Mais lors du lancement de l’impression, j’avais systématiquement ce message d’erreur :</p>

<p class="spip"><code class='spip_code' dir='ltr'>cupsdoprint -P ...</code></p>

<p class="spip"><code class='spip_code' dir='ltr'>No printer specified (and PRINTER variable is empty)</code></p>

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

<p class="spip"><code class='spip_code' dir='ltr'>export PRINTER=Imprimante-PDF</code></p>

<p class="spip">Ensuite, il faut se reconnecter de KDE pour prendre en compte la modification.</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>#!/bin/bash<br />
konqueror &<br />
while [ -z "$HKON" ]<br />
do<br />
  sleep 1<br />
  HKON=`dcop | grep konqueror`<br />
done<br />
<br />
echo $HKON<br />
dcop $HCON<br />
for fichier in `cat index2.txt`<br />
do<br />
  echo $fichier<br />
  dcop $HKON "konqueror-mainwindow#1" openURL $fichier<br />
  sleep 4<br />
  HWDG=`dcop $HKON | grep html-widget`<br />
  dcop $HKON $HWDG print true<br />
  sleep 3<br />
done<br />
#dcop $HKON MainApplication-Interface quit</code></div>
<p class="spip">Autre variante :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>#!/bin/bash<br />
<br />
# Lance le processus de konqueror en arrière plan<br />
konqueror &<br />
# `jobs -p` retourne le numéro du dernier processus lancé en arrîère plan<br />
<br />
pid=`jobs -p`<br />
konq="konqueror-$pid"<br />
<br />
# Attente que konqueror soit lancé<br />
sleep 1<br />
#dcop "konqueror-$PIDkonqueror"<br />
<br />
# Modife l'URL de Konqueror<br />
dcop $konq "konqueror-mainwindow#1" openURL [http://fr.openoffice.org/->http://fr.openoffice.org/]<br />
<br />
# Attends que la page HTML soit chargée<br />
# -> ATTENTION : Si la page n'a pas le temps de se charger entièrement, le PDF sera incomplet<br />
sleep 5<br />
<br />
interface=`dcop $konq | grep html-widget`<br />
dcop $konq $interface print true<br />
<br />
# Quitte konqueror<br />
dcop $konq MainApplication-Interface quit</code></div>
<p class="spip">Problèmes posés par le script : 
<br /></p>
<li> Si Konqueror est déjà lancé, ça ne fonctionne pas
<br /><li> Certaines pages du Wiki sont à éliminés
<br /><li> 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
<br /><li> Il faut intégrer dans le script la création du PDF final, la suppression des PDF avant et après
<br /><li> 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
<h2>Autres liens</h2>
<p class="spip">Article intéressant sur le fonctionnement de Dcop :
<br /></p>
<li> <a href="http://www.commentcamarche.net/forum/affich-1791353-piloter-konqueror-via-un-script-pour-imprimer" class="spip_out">http://www.commentcamarche.net/forum/affich-1791353-piloter-konqueror-via-un-script-pour-imprimer</a>
<br /><li> <a href="http://www.lea-linux.org/cached/index/Dev-dcop.html" class="spip_out">http://www.lea-linux.org/cached/index/Dev-dcop.html</a>
<br /><li> <a href="http://www-128.ibm.com/developerworks/linux/library/l-dcop/?ca=dgr-kdeml01KDEDCOP" class="spip_out">http://www-128.ibm.com/developerworks/linux/library/l-dcop/ ?ca=dgr-kdeml01KDEDCOP</a>
<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.4</td><td>21/03/07</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td>0.5</td><td>29/05/08</td><td>Mise en ligne</td></tr>
</tbody>
</table>