Est-il possible de convertir une page Web et ses sous-pages en un seul fichier PDF?
Installez d'abord l'outil de conversion wkhtmltopdf
(cet outil nécessite un environnement de bureau; source ):
Sudo apt install wkhtmltopdf
Créez ensuite un fichier contenant une liste des URL de plusieurs pages Web cibles (chacune sur la nouvelle ligne). Appelons ce fichier url-list.txt
et plaçons-le dans ~/Downloads/PDF/
. Par exemple, son contenu pourrait être:
https://askubuntu.com/users/721082/tarek
https://askubuntu.com/users/566421/pa4080
Puis exécutez la commande suivante, qui générera un fichier PDF pour chaque URL de site, situé dans le répertoire où la commande est exécutée:
while read i; do wkhtmltopdf "$i" "$(echo "$i" | sed -e 's/https\?:\/\///' -e 's/\//-/g' ).pdf"; done < ~/Downloads/PDF/url-list.txt
Le résultat de cette commande - exécuté dans le répertoire ~/Downloads/PDF/
- est:
~/Downloads/PDF/$ ls -1 *.pdf
askubuntu.com-users-566421-pa4080.pdf
askubuntu.com-users-721082-tarek.pdf
Fusionner les fichiers de sortie par la commande suivante, exécutée dans le répertoire ci-dessus ( source ):
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged-output.pdf $(ls -1 *.pdf)
Le résultat est:
~/Downloads/PDF/$ ls -1 *.pdf
askubuntu.com-users-566421-pa4080.pdf
askubuntu.com-users-721082-tarek.pdf
merged-output.pdf
Nous devons d’abord créer un fichier (url-list.txt
) contenant la carte URL du site. Exécutez ces commandes ( source ):
TARGET_SITE="https://www.yahoo.com/"
wget --spider --force-html -r -l2 "$TARGET_SITE" 2>&1 | grep '^--' | awk '{ print $3 }' | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' > url-list.txt
Ensuite, nous devons passer par les étapes de la section ci-dessus.
Pour automatiser le processus, nous pouvons tout rassembler dans un fichier de script.
Créez un fichier exécutable, appelé site-to-pdf.sh
:
mkdir -p ~/Downloads/PDF/
touch ~/Downloads/PDF/site-to-pdf.sh
chmod +x ~/Downloads/PDF/site-to-pdf.sh
nano ~/Downloads/PDF/site-to-pdf.sh
Le contenu du script est:
#!/bin/sh
TARGET_SITE="$1"
wget --spider --force-html -r -l2 "$TARGET_SITE" 2>&1 | grep '^--' | awk '{ print $3 }' | grep -v '\.\(css\|js\|png\|gif\|jpg\|txt\)$' > url-list.txt
while read i; do wkhtmltopdf "$i" "$(echo "$i" | sed -e 's/https\?:\/\///' -e 's/\//-/g' ).pdf"; done < url-list.txt
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged-output.pdf $(ls -1 *.pdf)
Copiez le contenu ci-dessus et dans nano
, utilisez: Shift+Insert pour la pâte; Ctrl+O et Enter pour sauver; Ctrl+X pour la sortie.
Usage:
La réponse à la question initiale:
Commencez par installer le package enscript
, qui est un ' fichier normal en pdf' outil de conversion:
Sudo apt update && Sudo apt install enscript
Puis exécutez la commande suivante, qui générera le fichier nommé output.pdf
, situé dans le répertoire où la commande est exécutée, qui contiendra le contenu de tous les fichiers php
dans /path/to/folder/
et ses sous-répertoires. :
find /path/to/folder/ -type f -name '*.php' -exec printf "\n\n{}\n\n" \; -exec cat "{}" \; | enscript -o - | ps2pdf - output.pdf
Exemple, à partir de mon système, qui a généré ce fichier :
find /var/www/wordpress/ -type f -name '*.php' -exec printf "\n\n{}\n\n" \; -exec cat "{}" \; | enscript -o - | ps2pdf - output.pdf