web-dev-qa-db-ja.com

WebサイトをPDFに変換(再帰的に)

Webページとそのサブページを1つのPDFファイルに変換する方法はありますか?

2
Tarek

WebページのリストをPDFファイルとして保存します

  • 最初にwkhtmltopdf変換ツールをインストールします(このツールにはデスクトップ環境が必要です; source ):

    Sudo apt install wkhtmltopdf 
    
  • 次に、複数のターゲットWebページ(それぞれが新しい行にある)のURLのリストを含むファイルを作成します。このファイルをurl-list.txtと呼び、~/Downloads/PDF/に配置しましょう。たとえば、コンテンツは次のようになります。

    https://askubuntu.com/users/721082/tarek
    https://askubuntu.com/users/566421/pa4080
    
  • 次に、次のコマンドを実行します。これにより、各サイトURLのPDFファイルが生成され、コマンドが実行されるディレクトリに配置されます。

    while read i; do wkhtmltopdf "$i" "$(echo "$i" | sed -e 's/https\?:\/\///' -e 's/\//-/g' ).pdf"; done < ~/Downloads/PDF/url-list.txt
    

    ディレクトリ~/Downloads/PDF/内で実行されるこのコマンドの結果は次のとおりです。

    ~/Downloads/PDF/$ ls -1 *.pdf
    askubuntu.com-users-566421-pa4080.pdf
    askubuntu.com-users-721082-tarek.pdf
    
  • 上記のディレクトリで実行される次のコマンドで出力ファイルをマージします( source ):

    gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged-output.pdf $(ls -1 *.pdf)
    

    結果は次のとおりです。

    ~/Downloads/PDF/$ ls -1 *.pdf
    askubuntu.com-users-566421-pa4080.pdf
    askubuntu.com-users-721082-tarek.pdf
    merged-output.pdf
    

Webサイト全体をPDFファイルとして保存します

  • 最初に、サイトのURLマップを含むファイル(url-list.txt)を作成する必要があります。次のコマンドを実行します( 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
    
  • 次に、上記のセクションの手順を実行する必要があります。

Webサイト全体をPDFファイルとして(再帰的に)保存するスクリプトを作成します

  • プロセスを自動化するために、すべてをスクリプトファイルにまとめることができます。

  • 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
    
  • スクリプトの内容は次のとおりです。

    #!/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)
    

    上記のコンテンツをコピーし、nanoで使用: Shift+Insert ペースト用; Ctrl+O そして Enter 保存用; Ctrl+X 終了の場合

  • 使用法:

    enter image description here


元の質問に対する答え:

複数のPHPファイルを1つのPDFに変換します(再帰的に)

  • 最初にパッケージenscriptをインストールします。これは '通常のファイルからpdf' 変換ツールです。

    Sudo apt update && Sudo apt install enscript
    
  • 次に、次のコマンドを実行します。コマンドは、output.pdfおよびそのサブディレクトリ内のすべてのphpファイルのコンテンツを含む/path/to/folder/というファイルを生成します。 :

    find /path/to/folder/ -type f -name '*.php' -exec printf "\n\n{}\n\n" \; -exec cat "{}" \; | enscript -o - | ps2pdf - output.pdf
    
  • このファイル を生成した私のシステムからの例:

    find /var/www/wordpress/ -type f -name '*.php' -exec printf "\n\n{}\n\n" \; -exec cat "{}" \; | enscript -o - | ps2pdf - output.pdf
    
7
pa4080