記錄php使用html轉(zhuǎn)換pdf時踩的坑

起因

我們會將html文件轉(zhuǎn)換為pdf文件來方便打印。

使用環(huán)境

環(huán)境依賴

windows、docker、centOS8鏡像、php7

compose擴展:

1:twig來進(jìn)行html模板渲染
2:knp-snappy進(jìn)行pdf轉(zhuǎn)換(以下簡稱knp)
3:wkhtmltopdf-amd64做實際的命令執(zhí)行(類似ImageMagick的convert命令)

問題

在本地調(diào)用轉(zhuǎn)換命令時報錯。

Exit with code 1 due to network error: ContentNotFoundError
The process has been signaled with signal 11

排查過程

1:首先找到報錯的位置,是wkhtmltopdf-amd64命令在執(zhí)行時拋出的報錯。根據(jù)報錯猜測是有文件沒有找到或者不可讀。
2:將渲染html的/tmp目錄給777權(quán)限。還是報錯。
3:找到wkhtmltopdf-amd64的官方倉庫,看issues找到類似的報錯,看到有人說是html的路徑?jīng)]有寫全。
4:打開渲染后的html文件(這里要注意,knp渲染完后會hook析構(gòu)方法__destruct(),將臨時文件刪除掉,所以要sleep(30),再將文件復(fù)制出來),找到有使用src連接的地方,發(fā)現(xiàn)確實有個地方?jīng)]有寫死路徑,用了相對路徑,改成絕對路徑測試。報錯變了。
5:拿到第二個報錯,直奔knp的issues,發(fā)現(xiàn)已經(jīng)項目已經(jīng)停止維護(hù)了。不過找到了wkhtmltopdf-amd64的倉庫地址,發(fā)下作者有更新。
6:在git上下載wkhtmltopdf-amd64 for centOS8的rpm包,然后把編譯后的二進(jìn)制文件替換vendor里的文件。報錯消失。

中間其實曲折很多,但是最終還是解決了。

以前的同事我問了,也遇到了這個問題。解決方式是手動把報錯的代碼注釋掉了,也是一種解決思路。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容