web-dev-qa-db-fra.com

Convertir un site Web en PDF (récursivement)

Est-il possible de convertir une page Web et ses sous-pages en un seul fichier PDF?

2
Tarek

Enregistrer une liste de pages Web en tant que 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
    

Enregistrer un site Web entier en tant que fichier 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.

Créez un script qui enregistrera un site Web entier en tant que fichier PDF (récursivement)

  • 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:

    enter image description here


La réponse à la question initiale:

Convertir plusieurs PHP fichiers en un PDF (récursivement)

  • 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
    
7
pa4080