将网站转换为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 + O和Enter进行保存; 按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