将网站转换为PDF(递归)

有没有办法将网页及其子页面转换为一个PDF文件?

将网页列表另存为PDF文件

  • 首先安装wkhtmltopdf转换工具(此工具需要桌面环境; 源代码 ):

     sudo apt install wkhtmltopdf 
  • 然后创建一个文件,其中包含多个目标网页的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 
  • 通过下一个命令合并输出文件,在上面的目录( 源 )中执行:

     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 

将整个网站保存为PDF文件

  • 首先,我们必须创建一个包含站点URL映射的文件( url-list.txt )。 运行这些命令( 源 ):

     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 
  • 然后我们需要完成上一节中的步骤。

创建一个脚本,将整个网站保存为PDF文件(递归)

  • 为了使过程自动化,我们可以将所有内容整合到一个脚本文件中。

  • 创建一个名为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 
  • 脚本内容是:

     #!/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 for paste; Ctrl + OEnter进行保存; 按Ctrl + X退出。

  • 用法:

    在此处输入图像描述


原问题的答案:

将多个PHP文件转换为一个PDF(递归)

  • 首先安装包enscript ,这是一个' 常规文件到pdf'转换工具:

     sudo apt update && sudo apt install enscript 
  • 然后运行下一个命令,它将生成名为output.pdf文件,该文件位于执行命令的目录中,该文件将包含/path/to/folder/及其子目录中所有php文件的内容:

     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