最近碰到一個Html轉PDF的需求,看了一下基本上都是需要依賴Wkhtmltopdf,需要在Windows或者linux安裝這個可以后使用。找了一下選擇了HtmlToPDFCore,這個庫是對Wkhtmltopdf.NetCore簡單二次封裝,這個庫的好處就是通過NuGet安裝HtmlToPDFCore就帶了Windows/Mac/Linux的依賴包,就是包有點大。HtmlToPDFCore包含了Wkhtmltopdf.NetCore,直接用Wkhtmltopdf.NetCore也是可以的。
下面總結一下碰到的問題:
1、權限問題
An error occurred trying to start process '/path/rotativa/Linux/wkhtmltopdf' with working directory '/path'. Permission denied
本質上Wkhtmltopdf.NetCore是通過進程調用Wkhtmltopdf的,在Linux會有執行權限問題,需要給到wkhtmltopdf執行權限
2、中文亂碼的問題
中文在Windows是正常的,但是Linux有問題
# 安裝中文字體包
sudo apt-get update
sudo apt-get install -y \fonts-wqy-microhei \fonts-wqy-zenhei \fonts-noto-cjk \ttf-mscorefonts-installer \fontconfig# 刷新字體緩存
sudo fc-cache -fv# 驗證中文字體安裝
fc-list :lang=zh
3、直接通過wkhtmltopdf檢查是否可以正常使用
wkhtmltopdf是可以直接調用的
如果輸出的pdf是正常的,那么在代碼里調用也是正常的
接下來就可以正常使用了:
HtmlToPDFCore.HtmlToPDF htmlToPDF = new HtmlToPDFCore.HtmlToPDF();var html ="<html><body>123中文</body></html>";return File(htmlToPDF.ReturnPDF(html), "application/pdf", $"{id}_{DateTime.Now:yyyyMMddHHmmss}.pdf");
HtmlToPDFCore項目地址:GitHub - carloscds/HtmlToPDFCore: Convert HTML to PDF