Joseph Tux
une série de htmls vers un pdf en 4 commandes

Créer un livre pdf à partir d’une série de pages WEB / HTML

jeudi 8 novembre 2012 par Joseph Tux

  EXEMPLE avec les fichiers html de Pinocchio<span class= [1] ' />

  1 Téléchargements en nombre :

( à partir du répertoire choisi pour cette opération [2] )
- * # pages html : [3]

-* de 01 à 09:
for i in  {0..9} ; do wget http://claude.sartirano.pagesperso-orange.fr/TRADPIN0${i}.htm ; done
-* de 10 à 36:
for i in {10..36}; do wget http://claude.sartirano.pagesperso-orange.fr/TRADPIN${i}.htm ; done

Remarquez le 0 (zéro) (...)

Remarquez le 0 (zéro)
ajouter 0 devant les 9 premiers nombres simplifiera le tri ultérieur
Pour un livre d’ au moins 100 pages, mettre 2 zéros de 1 à 9, puis 1 zéro de 10 à 99

Dans cet exemple, si on convertit les fichiers html en pdf, on s’aperçoit que des boutons de navigation polluent le texte.
Donc, on lit le code html, on découvre que les boutons de navigations tiennent entre 2 balises <table ... > et </table>
, qui ne sont utilisées nulle part ailleurs. Il suffit d’effacer ces lignes.

Encore une fois, effacer avec un éditeur est simple, mais répéter cette opération un grand nombre de fois est le travail de l’ordinateur, pas des mains de l’homme ! [4]

  2 Enlever les boutons de navigation en bas de page :

supprimer des fichiers html toutes les lignes entre :

<table et </table>

for i in TRADPIN*.htm ; do perl -ne '$/=""; print if ! m{<table} .. {</table>}' ${i} > _${i%.htm}_.htm ; done

Explications du code perl (...)

Explications du code perl :

perl -ne : boucle sur chaque ligne d'un fichier texte ( comme le html).
code perl entre apostrophe pour que bash ne le modifie pas.
$/="" : la défintion du retour à la ligne devient indéfini: le fichier entier est traité en 1 passe, comme une seule ligne.
! m{ : sélection négative d'un expression régulière.
{<table>} .. {</table>} : 2 expressions entre '..' décrivent un paragraphe délimité par ces 2 expressions.
la délimitation des expressions entre  accolades '{' '}' aurait pu être remplacé par le délimiteur par défaut '/'  ( ou biens d'autres, mais l' originalité n'est pas recommandée dans ce domaine.

  3 générer les pdf

avec wkhtmltopdf

les fichiers _TRADPINxx_.htm seront renommés en Pinocchio-xx.pdf (où xx est le numéro de page) :

Version 1 : boucler sur le numéro de page :
$ for i in {1..9} ; do wkhtmltopdf -s A4 TRADPIN0${i}.htm Pinocchio-0${i}.pdf ; done
$ for i in {10..36} ; do wkhtmltopdf -s A4 TRADPIN${i}.htm Pinocchio-${i}.pdf ; done

Explications de $i#_TRAPDIN et $A%_.htm

OU, plus brièvement et plus rapidement (utile pour des centaines de fichiers lourds :)

Version 2 : boucler sur la liste de fichiers, (ici avec le joker *), et extraire le numéro :
for i in _TRADPIN* ; do A="Pinocchio-${i#_TRADPIN}" ; B=${A%_.htm}.pdf; wkhtmltopdf -s A4 "$i" $B; done

Explications de $i#_TRAPDIN et $A%_.htm

  4 fusionner les pdf

( pdftk respecte l’ordre des pages telles que nommées ici prefixe01..09 10 .. 36suffixe )

$ pdftk Pinocchio-*.pdf cat output  Pinocchio.pdf


 RÉSUMÉ DES OUTILS UTILISÉS :

wget ( ou curl ) Téléchargement
perl Traitement du fichier ( supression de code )
wkhtmltopdf Conversion de html vers pdf [5]
pdftk Assemblage de tous les pdf en un fichier unique [6]

faire « man [outil] » pour tout savoir !
seule la commande perl et la syntaxe du shell nécessitent quelques compétences, vite apprises à ce niveau [7].

[1Merci à l'auteur pour cette très belle traduction

[2on peut remplacer « wget » par « curl -O »

[3Dans la 1re ligne, remarquez le 0 (zéro) : il faut ajouter 0 devant les 9 premiers nombres pour se simplifier le tri ultérieur

[4D’autant plus qu’ici, la tâche est simple, mais imaginez des pages avec des cadres, des pubs, des menus etc.. ! ) : quelques commandes en ligne, analogues, méritent le temps de les construire pour celui qu’elles économiseraient si on imaginait faire ce travail tout à la main !

[5Package wkhtmltopdf sous Debian

[6Package pdftk sous Debian

[7man bash


Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 159 / 57582

Suivre la vie du site fr  Suivre la vie du site GNU, LINUX, BSD, LL  Suivre la vie du site AIDES GNU/LINUX   ?

Site réalisé avec SPIP 3.1.6 + AHUNTSIC

Creative Commons License