關於python docker鏡像環境下無法apt安裝wkhtml2pdf的解決方案
事情經過:
由於需求需要生成pdf文件,第一種方案是使用reportlab,使用後發現pdf文件內容需要逐行進行內容繪製,最大的問題是表格內容高度和寬度無法進行自適應,導致表格內容溢出,影響閱讀體驗,故最終選擇pdfkit即依賴wkhtml2pdf將html文件生成pdf文件.
1.下載wkhtml2pdf二進制壓縮文件
2.解壓並導出環境變量
以下命令是以Dockerfile內的命令爲基礎,其它腳本可以做出修改適應
FROM python:3.6
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY . /app
RUN tar vxf /app/static/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz && cp /app/wkhtmltox/bin/wk* /usr/local/bin/
3.docker鏡像普遍不支持中文之類的顯示或生成,故生成的PDF文件有中文的時候還需要進行字體遷移支持
-
對於帶桌面的OS,wkhtml2pdf會以當前OS的默認字體進行輸出,對於無桌面環境,查了資料wkhtml2pdf對於中文的支持貌似只支持宋體,有條件的可以進行測試下
-
下載宋體,可以在Windows系統中直接copy字體文件或者從網絡上下載宋體文件,然後生成字體緩存
FROM python:3.6 ENV PYTHONUNBUFFERED 1 WORKDIR /app COPY . /app RUN cp /app/static/宋體.ttc /usr/share/fonts/truetype/dejavu && fc-cache -fv
4.此時wkhtml2pdf使用環境已經就緒,可以進行html轉換成pdf了
import pdfkit
pdfkit.from_file('test.html', 'test.pdf')