Question Convertir site web en PDF (récursivement)


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


2
2017-08-03 17:09


origine


S'il vous plaît modifier votre question pour ajouter des détails de ce que vous voulez exactement. Vos commentaires sur réponse de pa4080 suggérer que vous avez des exigences spécifiques qui ne sont pas claires de la question. - Zanna
Désolé pour mon anglais, puis j'ai des fichiers php qui représentent des pages d'un site Web, ces fichiers sont regroupés dans différents sous-répertoires, je voudrais créer un seul pdf contenant le texte de tous les fichiers formatés comme s'il était affiché dans le navigateur. - Tarek


Réponses:


Enregistrer une liste de pages Web au format PDF

  • Première installation wkhtmltopdf outil de conversion (cet outil nécessite un environnement de bureau; la source):

    sudo apt install wkhtmltopdf 
    
  • Créez ensuite un fichier contenant une liste d'URL de plusieurs pages Web cibles (chacune sur une 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
    
  • Ensuite, exécutez la commande suivante, qui générera un fichier PDF pour chaque URL du 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
    
  • Fusionnez les fichiers de sortie par la commande suivante, exécutée dans le répertoire ci-dessus (la 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 sous forme de fichier PDF

  • Nous devons d'abord créer un fichier (url-list.txt) qui contient la carte URL du site. Exécutez ces commandes (la 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éer un script qui sauvera un site Web entier sous forme de fichier PDF (récursivement)

  • Pour automatiser le processus, nous pouvons rassembler tous les éléments dans un fichier script.

  • Créez un fichier exécutable, appelé site-to-pdf.sh:

    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 utilisation: Décalage+Insérer pour la pâte; Ctrl+O et Entrer pour sauver Ctrl+X pour la sortie.

  • Usage:

    enter image description here


La réponse à la question initiale:

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

  • Installez d'abord le paquet enscript, qui est un 'fichier régulier au pdf ' outil de conversion:

    sudo apt update && sudo apt install enscript
    
  • Ensuite, exécutez la commande suivante, qui générera le fichier appelé output.pdf, situé dans le répertoire où la commande est exécutée, qui contiendra le contenu de tous php fichiers 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, 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
    

3
2017-08-03 17:48



Pour afficher la page comme si c'était du HTML? - Tarek
@Tarek, s'il vous plaît, soyez plus précis. Vous voulez dire non pas le code PHP mais le résultat que vous voyez dans le navigateur Web ou la sortie HTML du code PHP? - pa4080
Par exemple, si je télécharge une page PHP "www .... com / index.php", comment créer un fichier PDF à partir de cette vue, comme dans le navigateur et non dans le code PHP? - Tarek
@Tarek, vous voulez dire que vous avez enregistré une page Web et que vous voulez la convertir en PDF? Si oui, pourquoi ne pas simplement l'enregistrer en format PDF? - pa4080
Parce que j'ai besoin d'une solution récursive à utiliser pour des sites entiers ... - Tarek