使用Python的pdfkit转换含Material Icons的HTML为PDF失败求助
解决Material Icons无法在pdfkit生成的PDF中渲染的问题
我之前也碰到过类似的Material Icons没法在pdfkit生成的PDF里正常显示的情况,给你几个实用的排查和解决方向:
确保Material Icons字体可被pdfkit访问
如果你是通过CDN引入的字体,pdfkit可能因为网络限制或者资源加载策略无法获取到字体文件。建议把Material Icons的字体文件(比如woff2格式)下载到本地项目中,然后在HTML的样式里用本地路径引用:@font-face { font-family: 'Material Icons'; font-style: normal; font-weight: 400; src: url('./assets/fonts/material-icons.woff2') format('woff2'); } .material-icons { font-family: 'Material Icons'; font-weight: normal; font-style: normal; font-size: 24px; line-height: 1; letter-spacing: normal; text-transform: none; display: inline-block; white-space: nowrap; word-wrap: normal; direction: ltr; -webkit-font-feature-settings: 'liga'; -webkit-font-smoothing: antialiased; }注意要保证字体文件的路径相对于你的HTML文件是正确的,避免路径错误导致字体加载失败。
配置pdfkit的加载选项
pdfkit底层依赖wkhtmltopdf,默认可能会限制本地文件访问或者停止慢脚本,这会影响字体加载。你可以在生成PDF时添加相关参数:
如果是用命令行生成:pdfkit --enable-local-file-access --no-stop-slow-scripts templates/pdf.html out.pdf如果是通过Python脚本(比如你的
gen.py)调用,要在配置里设置这些选项:import pdfkit config = pdfkit.configuration(wkhtmltopdf='/path/to/wkhtmltopdf') # 如果wkhtmltopdf不在系统PATH里需要指定 options = { 'enable-local-file-access': None, 'no-stop-slow-scripts': None, 'allow': '/path/to/your/project' # 允许访问项目目录下的资源 } pdfkit.from_file('templates/pdf.html', 'out.pdf', configuration=config, options=options)先验证HTML在浏览器中的渲染
先把templates/pdf.html在普通浏览器里打开,确认Material Icons能正常显示。如果浏览器里都显示不出来,那问题肯定出在HTML本身——比如字体引用错误、类名拼写错误(比如把material-icons写成了别的),先把浏览器里的问题解决,再尝试生成PDF。更新wkhtmltopdf到最新版本
旧版本的wkhtmltopdf对现代字体格式(比如woff2)的支持很差,建议你检查一下当前版本:wkhtmltopdf --version如果版本比较旧,就去下载最新的稳定版,更新后再尝试生成PDF。
内容的提问来源于stack exchange,提问作者Quy Tang
相关产品推荐
相关产品推荐

