摘要:背景最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到。本著最好不要額外安裝軟件的原則,搜索過(guò)后分別嘗試了等等。但是實(shí)現(xiàn)效果都與預(yù)期差距較大。它們是開(kāi)源命令行工具,使用渲染引擎將呈現(xiàn)為和各種圖像格式。它們不需要顯示或顯示服務(wù)。
背景
最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到PDF。表格使用的是普通的table,圖表引用了https://www.chartjs.org/ 遇到的問(wèn)題詳見(jiàn)wkhtmltopdf chartjs
思路在網(wǎng)上查了下前后端都可以將html生成pdf,考慮到實(shí)現(xiàn)效果以及效率,最后決定將轉(zhuǎn)化工作在服務(wù)端使用PHP完成。本著最好不要額外安裝軟件的原則,搜索過(guò)后分別嘗試了 TCPDF MPDF FPDF html2pdf 等等。但是實(shí)現(xiàn)效果都與預(yù)期差距較大。最后不得不嘗試需要額外安裝的wkhtmltopdf。
wkhtmltopdf簡(jiǎn)介引用 官網(wǎng) 介紹:wkhtmltopdf是wkhtmltox中的一個(gè)工具,另一個(gè)是wkhtmltoimage。它們是開(kāi)源(LGPLv3)命令行工具,使用Qt WebKit渲染引擎將HTML呈現(xiàn)為PDF和各種圖像格式。它們不需要顯示或顯示服務(wù)。值得一提的是谷歌瀏覽器chrome也使用的是Qt WebKit渲染引擎。
wkhtmltopdf安裝安裝是在docker中進(jìn)行的,使用開(kāi)源項(xiàng)目docker-lnmp。但該php使用的是alpine版本,遂把鏡像改回默認(rèn)的debian版本,后由于客戶使用的是centos,又多帶帶下載了centos7的鏡像。
debian安裝# wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.jessie_amd64.deb # dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb
這里安裝會(huì)提示缺少依賴信息,其他信息可以直接通過(guò)apt-get install進(jìn)行安裝,但是這兩個(gè)需要注意下 :
dpkg: dependency problems prevent configuration of wkhtmltox: wkhtmltox depends on libpng12-0; however: Package libpng12-0 is not installed. wkhtmltox depends on libssl1.0.0; however: Package libssl1.0.0 is not installed.
這兩個(gè)包直接去倉(cāng)庫(kù)中搜索安裝即可,然后再次執(zhí)行安裝命令,就會(huì)成功安裝了
# dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb # wkhtmltopdf -V # wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdfcentos安裝
# wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm # rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
正常系統(tǒng)安裝并update后會(huì)提示缺少依賴信息:
error: Failed dependencies: fontconfig is needed by wkhtmltox-1:0.12.2.1-1.x86_64 freetype is needed by wkhtmltox-1:0.12.2.1-1.x86_64 libpng is needed by wkhtmltox-1:0.12.2.1-1.x86_64 libjpeg is needed by wkhtmltox-1:0.12.2.1-1.x86_64 libX11 is needed by wkhtmltox-1:0.12.2.1-1.x86_64 libXext is needed by wkhtmltox-1:0.12.2.1-1.x86_64 libXrender is needed by wkhtmltox-1:0.12.2.1-1.x86_64 xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.12.2.1-1.x86_64 xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.12.2.1-1.x86_64
這里直接按照提示的安裝包就可以了
# yum install fontconfig freetype libpng libjpeg libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi
然后再次執(zhí)行安裝命令,就會(huì)成功安裝了
# rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm # wkhtmltopdf -V # wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdfwkhtmltopdf問(wèn)題
這里需要注意的是部分系統(tǒng)可能會(huì)拋出異常
QXcbConnection: Could not connect to display Aborted (core dumped)
這里需要安裝xvfb然后使用xvfb運(yùn)行
# xvfb-run wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf
導(dǎo)出的pdf中文會(huì)有亂碼,可以將windows系統(tǒng)c盤system32目錄下的Fonts里面的字體拷貝到linux的/usr/share/fonts下重新運(yùn)行就可以了
wkhtmltopdf是跨平臺(tái)的軟件,和后端使用那種語(yǔ)言是沒(méi)有關(guān)系的。
PHP有直接可以用的框架https://github.com/KnpLabs/snappy和laravel框架https://github.com/barryvdh/laravel-snappy
當(dāng)然直接使用PHP執(zhí)行shell也及其簡(jiǎn)單,但要注意防范webshell。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/116075.html
摘要:背景最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到。本著最好不要額外安裝軟件的原則,搜索過(guò)后分別嘗試了等等。但是實(shí)現(xiàn)效果都與預(yù)期差距較大。它們是開(kāi)源命令行工具,使用渲染引擎將呈現(xiàn)為和各種圖像格式。它們不需要顯示或顯示服務(wù)。 背景 最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到PDF。表格使用的是普通的table,圖表引用了https://www.char...
摘要:背景最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到。本著最好不要額外安裝軟件的原則,搜索過(guò)后分別嘗試了等等。但是實(shí)現(xiàn)效果都與預(yù)期差距較大。它們是開(kāi)源命令行工具,使用渲染引擎將呈現(xiàn)為和各種圖像格式。它們不需要顯示或顯示服務(wù)。 背景 最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到PDF。表格使用的是普通的table,圖表引用了https://www.char...
摘要:背景最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到。本著最好不要額外安裝軟件的原則,搜索過(guò)后分別嘗試了等等。但是實(shí)現(xiàn)效果都與預(yù)期差距較大。它們是開(kāi)源命令行工具,使用渲染引擎將呈現(xiàn)為和各種圖像格式。它們不需要顯示或顯示服務(wù)。 背景 最近接到一個(gè)客戶需求,要求將學(xué)生的考試結(jié)果分析表格和圖表導(dǎo)出到PDF。表格使用的是普通的table,圖表引用了https://www.char...
閱讀 2514·2023-04-25 17:37
閱讀 1195·2021-11-24 10:29
閱讀 3701·2021-09-09 11:57
閱讀 697·2021-08-10 09:41
閱讀 2249·2019-08-30 15:55
閱讀 2817·2019-08-30 15:54
閱讀 1948·2019-08-30 15:53
閱讀 901·2019-08-30 15:43