首先打開下載wkhtmltopd需要的網(wǎng)址 https://wkhtmltopdf.org/downloads.html
我的參考地址 https://gitee.com/srchen1987/dawdler-series
首先查看自己服務(wù)端的操作系統(tǒng) :
武義網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
# lsb_release -a
我的是 CentOS 7.5 ,所以下載 CentOS 7 x86_64 / i686 Package (.rpm) built on CentOS 7.4.1804
https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm //rpm文件
但是如果你想用tar.xz文件,下載地址在
https://github.com/wkhtmltopdf/wkhtmltopdf/releases/0.12.4 選擇對(duì)應(yīng)操作系統(tǒng)即可,我選擇的是
https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
2.下面進(jìn)行安裝
由于上面我們分了兩種文件,下面我們介紹兩種安裝方式:
不管哪種方式,我們需要先進(jìn)入到安裝的目錄,進(jìn)入shell命令:
cd / #進(jìn)入根目錄
cd usr/local #進(jìn)入指定目錄
【1】rpm文件安裝
進(jìn)入指定目錄后執(zhí)行下面命令 :
這里按章rpm文件,遇到了很多需要下載的包,所以我嘗試換一下tar.xz文件下載
【2】tar.xz文件下載安裝
命令:
$ : wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz #下載文件
$ : tar wkhtmltox-0.12.4_linux-generic-amd64.tar.xz #解壓文件
在usr/local 出現(xiàn) wkhtmltox 文件夾即為成功
為了能從任意路徑執(zhí)行程序,將 wkhtmltopdf 安裝到 /usr/bin 目錄下 ,執(zhí)行命令
$ : cp wkhtmltox/bin/wkhtmltopdf /usr/bin/
3.額外問(wèn)題
本人中途遇到了很多報(bào)錯(cuò)問(wèn)題
fontconfig is needed by wkhtmltox-1:0.12.5-1.centos7.x86_64
libXext is needed by wkhtmltox-1:0.12.5-1.centos7.x86_64
libXrender is needed by wkhtmltox-1:0.12.5-1.centos7.x86_64
xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.12.5-1.centos7.x86_64
xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.12.5-1.centos7.x86_64
上面的提示,我缺少 fontconfig libXext libXrender,于是我按照缺少的一直用 yum安裝(操作系統(tǒng)里面沒(méi)有yum可自行百度安裝方法)
下面是我安裝的一些插件:
$ : yum install libXrender*
$ : yum install libfontconfig*
$ : yum install libXext*
4.使用wkhtmltopdf
如果你沒(méi)有碰到我第三部的問(wèn)題,可以直接再shell控制臺(tái)直接使用
$ : wkhtmltopdf http://www.baidu.com pdftest.pdf
成功顯示
Loading pages (1/6)
libpng warning: iCCP: known incorrect sRGB profile ] 49%
libpng warning: iCCP: known incorrect sRGB profile ] 53%
libpng warning: iCCP: known incorrect sRGB profile ] 56%
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
如果你不知道生成的pdf路徑在哪里 ,我們需要查找剛才生成的pdf文件
$ :find / -name pdftest.pdf
輸出 /usr/local/pdftest.pdf ,可以看到生成的pdf文件默認(rèn)在 wkhtmltox 同級(jí)目錄下
5.在php下使用 wkhtmltopdf
剛才是在控制臺(tái)使用的wkhtmltopdf命令,而我們需要在php文件執(zhí)行生成pdf,總結(jié)網(wǎng)上給的方法:
(1)安裝libwkhtmltox (linux內(nèi)核、Centos-6 .5-64bit),相當(dāng)于一個(gè)擴(kuò)展
(2)shell_exec() 執(zhí)行shell命令,確保該函數(shù)可以執(zhí)行
我這里最開始碰到的一個(gè)問(wèn)題是,在在服務(wù)器控制臺(tái)用wkhtmltopdf http://www.baidu.com pdftest.pdf可以
生成pdf文件,用自己的php代碼生成一直行不通,以為是擴(kuò)展和shellexec必須要同時(shí)滿足,其實(shí)只要滿足其中
一個(gè)就行,用shellexec快一點(diǎn),用第一種方法需要×××下載或者git查找需要的擴(kuò)展壓縮。*
【1】這里我要實(shí)現(xiàn)的是 前端給一個(gè)地址訪問(wèn) http://www.xxx.com/test/test,生成對(duì)應(yīng)的pdf文件在服務(wù)器端口,
于是簡(jiǎn)單的給一個(gè)可以訪問(wèn)的地址生成test.php文件
php代碼 :
運(yùn)行 http://www.xxx.com/test/test ,但是一直沒(méi)有執(zhí)行生成對(duì)應(yīng)的pdf
【2】我嘗試另外的解決方式 我在 /usr/local下生成 test.php文件 代碼如上,用服務(wù)端自己運(yùn)行
$ : php test.php
竟然在 /usr/local 下生成了make.pdf
【3】但是為什么放在可訪問(wèn)的地址上寫一樣的代碼,第二種方法可以生成,于是我在第一種test.php 改寫代碼
php $res = shell_exec('wkhtmltopdf -V); #注意這里是 大寫的 V
?>
可以看到瀏覽器里面返回了 :
wkhtmltopdf 0.12.4 (with patched qt)
【4】對(duì)比兩種方法,說(shuō)明wkhtmltopdf是可以執(zhí)行了,因?yàn)榭梢苑祷仄渲械陌姹荆皇菫槭裁匆粋€(gè)可以生成一
個(gè)不可以,最后發(fā)現(xiàn)是你進(jìn)入shell是以root身份進(jìn)去,有著讀寫命令, 但是直接訪問(wèn)你地址的話,你寫入pdf沒(méi)
有這個(gè)權(quán)限
需要賦予這個(gè)權(quán)限,你可以在你的項(xiàng)目里面給與一個(gè)有權(quán)限的,我生成的是 /app/pdf
所以test.php代碼改進(jìn),直接訪問(wèn) http://www.xxx.com/test/test
第二個(gè)根據(jù)所傳的url 和輸出pdf名稱,進(jìn)行瀏覽器下載pdf,
訪問(wèn): http://www.xxx.com/test/test?url=http://www.baidu.com&name=test.pdf
6.生成pdf中文亂碼問(wèn)題
可以看到你通過(guò)訪問(wèn) http://www.xxx.com/test/test?url=http://www.baidu.com&name=test.pdf 生成的pdf文件,
存在中文亂碼問(wèn)題,可以在自己 C:\Windows\Fonts 找到 simsun.ttc 中文宋體,simsun.ttc 而不是 simsun.ttf,
把字體文件放在 放在 /usr/share下面就行