有没有办法将网页及其子页面转换为一个 PDF 文件?
答案1
将网页列表保存为 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-list.txt
首先,我们必须创建一个包含站点 URL 映射的文件 ( )。运行以下命令 (来源):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
: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退出。用法:
原始问题的答案:
将多个 PHP 文件转换为一个 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