前言
为了把HTML转成PDF(带很多css的),折腾了一晚上。试了一下pdfkit是基本没戏(pdfkit css bug),转头想用weasyprint,没想到适配更差,记录一下。
安装
brew install cairo pango gdk-pixbuf libffi
pip install weasyprint
在conda环境下使用weasyprint
本来如果在brew的python3下使用应该没什么问题,但是如果要用conda环境的解释器就会报错:OSError: cannot load library 'gobject-2.0-0'
解决方案如下:1
2
3
4
5sudo ln -s /opt/homebrew/opt/glib/lib/libgobject-2.0.0.dylib /usr/local/lib/gobject-2.0
sudo ln -s /opt/homebrew/opt/pango/lib/libpango-1.0.dylib /usr/local/lib/pango-1.0
sudo ln -s /opt/homebrew/opt/harfbuzz/lib/libharfbuzz.dylib /usr/local/lib/harfbuzz
sudo ln -s /opt/homebrew/opt/fontconfig/lib/libfontconfig.1.dylib /usr/local/lib/fontconfig-1
sudo ln -s /opt/homebrew/opt/pango/lib/libpangoft2-1.0.dylib /usr/local/lib/pangoft2-1.0
创建对应位置的软链接,issue在这。
这样以后在终端用是没什么问题了,weasyprint url xx.pdf
,中文支持不佳,css部分支持不好。
仍然报错
在正常Python调用中仍然会报错,RuntimeError: cannot use unpack() on <cdata 'char *' NULL>
,定位到cffi/api.py
,一个空指针,暂时不知道怎么解决。
CFFI(C Foreign Function Interface) 是Python的C语言外部函数接口。通过CFFI,Python可以与几乎任何C语言代码进行交互。