安裝wkhtmltopdf
#apt-getinstallwkhtmltopdf
從HTML生成PDF檔案的基本語法如下:
#wkhtmltopdfinput-fileoutput-file
我們可以從任何網頁生成PDF:
#wkhtmltopdfexample.comexample.pdf
或從本地html檔案:
#wkhtmltopdfexample.htmlexample.pdf
以上命令只能在Linuxbox圖形環境中使用。如果我們在一個VPS或專用伺服器上生成PDF,如果我們執行該命令,我們將得到從下錯誤:
wkhtmltopdf:cannotconnecttoXserver
為了解決這個問題,我們需要使用一個名為xvfb的工具。
Xvfb是一個X伺服器,能夠執行在沒有顯示硬體和沒有物理輸入裝置的機器上。它使用虛擬記憶體來模擬一個dumbframebuffer。
回到頂部
安裝xvfb
#apt-getinstallxvfb
接下來,我們需要建立一個shell指令碼:
xvfb-run--server-args="-screen0,1024x768x24"/usr/bin/wkhtmltopdf$*
然後將它儲存在/usr/bin/wkhtmltopdf.sh下
下一步,我們將建立一個symbolic連結,這樣我們就可以執行指令碼而不用編寫的完整路徑:
#ln-s/usr/bin/wkhtmltopdf.sh/usr/local/bin/wkhtmltopdf2
讓我們嘗試執行shell指令碼,並看看會發生什麼。
#wkhtmltopdf2example.comexample.pdf
Loadingpage(1/2)
Printingpages(2/2)
Done
好,如果能夠正確執行。就可以用以下自定義PHP指令碼來生成一個PDF檔案。
//Turnonoutputbuffering
ob_start();
echo"<html>";
echo"<head>";
echo"</head>";
echo"<body>";
echo"<p>customHTMLtoPDFreport</p>";
echo"</body>";
echo"</html>";
//returnthecontentsoftheoutputbuffer
$html=ob_get_contents();
$filename=date("YmdHis");
//savethehtmlpageintmpfolder
file_put_contents("/tmp/{$filename}.html",$html);
//Cleantheoutputbufferandturnoffoutputbuffering
ob_end_clean();
//convertHTMLtoPDF
shell_exec("wkhtmltopdf2-q/tmp/{$filename}.html/tmp/{$filename}.pdf");
if(file_exists("/tmp/{$filename}.pdf")){
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename="{$filename}.pdf"");
echofile_get_contents("/tmp/{$filename}.pdf");
}else{
exit;
}
安裝wkhtmltopdf
#apt-getinstallwkhtmltopdf
從HTML生成PDF檔案的基本語法如下:
#wkhtmltopdfinput-fileoutput-file
我們可以從任何網頁生成PDF:
#wkhtmltopdfexample.comexample.pdf
或從本地html檔案:
#wkhtmltopdfexample.htmlexample.pdf
以上命令只能在Linuxbox圖形環境中使用。如果我們在一個VPS或專用伺服器上生成PDF,如果我們執行該命令,我們將得到從下錯誤:
wkhtmltopdf:cannotconnecttoXserver
為了解決這個問題,我們需要使用一個名為xvfb的工具。
Xvfb是一個X伺服器,能夠執行在沒有顯示硬體和沒有物理輸入裝置的機器上。它使用虛擬記憶體來模擬一個dumbframebuffer。
回到頂部
安裝xvfb
#apt-getinstallxvfb
接下來,我們需要建立一個shell指令碼:
xvfb-run--server-args="-screen0,1024x768x24"/usr/bin/wkhtmltopdf$*
然後將它儲存在/usr/bin/wkhtmltopdf.sh下
下一步,我們將建立一個symbolic連結,這樣我們就可以執行指令碼而不用編寫的完整路徑:
#ln-s/usr/bin/wkhtmltopdf.sh/usr/local/bin/wkhtmltopdf2
讓我們嘗試執行shell指令碼,並看看會發生什麼。
#wkhtmltopdf2example.comexample.pdf
Loadingpage(1/2)
Printingpages(2/2)
Done
好,如果能夠正確執行。就可以用以下自定義PHP指令碼來生成一個PDF檔案。
//Turnonoutputbuffering
ob_start();
echo"<html>";
echo"<head>";
echo"</head>";
echo"<body>";
echo"<p>customHTMLtoPDFreport</p>";
echo"</body>";
echo"</html>";
//returnthecontentsoftheoutputbuffer
$html=ob_get_contents();
$filename=date("YmdHis");
//savethehtmlpageintmpfolder
file_put_contents("/tmp/{$filename}.html",$html);
//Cleantheoutputbufferandturnoffoutputbuffering
ob_end_clean();
//convertHTMLtoPDF
shell_exec("wkhtmltopdf2-q/tmp/{$filename}.html/tmp/{$filename}.pdf");
if(file_exists("/tmp/{$filename}.pdf")){
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename="{$filename}.pdf"");
echofile_get_contents("/tmp/{$filename}.pdf");
}else{
exit;
}