背景
之前计算出每日top15存储量临时表
,将表名、存储量、最后修改日期等关键信息通过 Markdown 的形式发送到企微群中,触达开发人员,使其及时清理以节省存储资源;但是 Markdown 格式看上去很乱,增加阅读成本,所以想将这些信息转换成PNG格式,使其看上去较为美观。
方案
通过查找资料发现有以下几个 Python 第三方包可以实现我的需求,分别是:html2png
、html2image
、weasyprint
,对其一一进行尝试,结果如下:
html2png
因为我是在阿里云 dataworks 中开发的,这是一个托管环境,安装方式和本地不一样,需要通过独享调度资源组实现,安装好之后在pyodps基本中进行测试,但是一直报如下错误:
我开始以为没安装成功,但是在资源环境中确实发现了这个包,说明安装是没问题的:
然后我就询问阿里云客服,但是经过他们自己的测试人员尝试后问题还是无法解决,所以我就放弃了这个方案,转而去尝试 html2image
。
html2image
此包我在本地尝试成功,但是在dataworks中又出幺蛾子了,显示有个 json解析出了错误,具体原因为也没找到,尝试问阿里云客服,但是人家说这不是他们的问题,不包解决,hahaha,我将最后的希望放在了 weasyprint上。
weasyprint
安装好之后立马开始测试,虽然成功将内容转换成PNG并发送企微群,但是不显示中文:
报错信息如下:
home/tops/lib/python3.7/site-packages/weasyprint/fonts.py:229: UserWarning: FontConfig: No fonts configured. Expect ugly output. 'FontConfig: No fonts configured.
这个警告通常是因为 WeasyPrint 找不到可用的字体。查找资料并询问ChatGPT找到了一个最佳解决方案:
- 1、下载 SimHei 字体文件,存储在阿里云 OSS 上;
- 2、直接在 HTML 代码部分引用 字体文件 URL 即可。
按照如上设置之后在此运行代码,PNG发送成功,结果如下: