第三方库使用心得之xhtml2pdf
python吧
全部回复
仅看楼主
level 11
👾pHq👾 楼主
xhtml2pdf 是一个 Python 库,用于将 HTML 和 CSS 文件转换为 PDF。它主要用于生成包含复杂布局和样式的 PDF 文档。[真棒]
在图里的函数中,pisa.CreatePDF正是这个库的核心函数,其中“html”是源 HTML 内容,可以是html文件或字符串,参数“dest=result_file”是目标文件,可以是文件对象或路径字符串,参数“encoding="utf-8"”则为html文件的编码格式。
为什么lz会使用到它?
lz之前为nonebot开发了一个机器人插件,目的是想便捷地把markdown内容给可视化转化为图片,其中一个步骤是将markdown转化为html后,再将html转化为pdf(为什么不用html2image库?因为这种类似的库需要手动安装第三方工具或浏览器,我认为这种对于运行在服务器上的插件来说配置及其不方便),最后再将pdf文件通过fitz库转化为图片由机器人发送给客户端。所以xhtml2pdf就显得很重要。[乖][乖][乖]
下面细琐lz在使用学习这个库的一些心得体会,以及为吧u分享在使用一些小众冷门库但是网上资料又很少的时候该怎么做[乖][乖][乖]
2024年06月20日 11点06分 1
level 11
👾pHq👾 楼主
[疑问]发出来了吗
2024年06月20日 13点06分 2
level 11
👾pHq👾 楼主
来了来了!![泪]
xthml2pdf的使用方法很简单,仅需在css样式中指定好纸张的尺寸、页边距等参数,pisa.CreatePDF函数即可自动识别并转化为指定的纸张大小,比如:
@page{
size: A4 portrait;
}
这个样式就指定了转化后的pdf尺寸是A4纸的大小[开心]
2024年06月21日 08点06分 4
level 11
👾pHq👾 楼主
然后便是lz在开发时遇到的第一个问题:中文乱码。[呵呵]
这个库对于第三方语言的支持比较糟糕,一开始lz导出的pdf文件中文全是方块■,网上查找以及询问ai给出的答案均是让我们在css样式中指定字体文件目录,比如:
body{
font: url;
}
可是即使是这样设置了之后,导出依旧是乱码,字体文件并没有起作用。
2024年06月21日 08点06分 5
level 11
👾pHq👾 楼主
lz一开始一直以为是字体问题,就一直不停更换字体文件,从宋体一直到微软雅黑全试过了,方块依旧是那个方块[呵呵]快给我整红温了都。
就在lz一筹莫展之际,lz突然想到,为什么不去看看官方文档呢?[狂汗]
果然,在官方文档里清清楚楚地写着Fonts这一个大板块[呵呵]
2024年06月21日 08点06分 6
level 11
👾pHq👾 楼主
点进去一看,问题迎刃而解[真棒]
不止简体中文,日文韩文都有对应的内部支持[太开心]
并且下方还有示例:
2024年06月21日 08点06分 7
level 11
👾pHq👾 楼主
按照它的示例使用之后,问题就解决了。[哈哈]
(为什么图中的文字带有格式?是因为html源字符串已经是格式化过后的了)
这也告诉了我们,一定一定要去看一下文档!!很多你可能会遇到的问题库的开发者已经在文档中写好了告诉你了,不要太过依赖搜索或者ai[咦]
2024年06月21日 08点06分 8
level 11
👾pHq👾 楼主
接下来就是lz在开发过程中遇到的第二个问题:中文换行[呵呵]
这个问题即使是查遍文档也没有结论,文档中只提到了使用css常规换行样式“break-wrod”就行,比如:
word-wrap: break-word;
white-space: pre-wrap;
overflow-wrap: break-word;
可是正如上文所说,由于其对中文的比较糟糕的支持,即使是应用了它内置的中文字体,也没办法通过改变css样式来支持中文换行[呵呵]
图中的源html已在css中使用上述样式
2024年06月21日 08点06分 9
level 11
👾pHq👾 楼主
那该怎么办呢?都到这里了总不能摆烂吧![阴险]
遇事不决,暴力出奇迹![怒][怒][怒]我直接对需要传进去的html字符串做一个预处理。
对于xhtml2pdf库中A4大小的纸张,通常为43个中文字符需要换一次行,所以可以直接遍历html字符串,每当中文符超过43个,就打上一个<br>标签![怒]
算是史山了[呵呵]但是问题也算是解决了
2024年06月21日 08点06分 10
level 11
👾pHq👾 楼主
所以说希望8u们接触新的库或者新技术时不要一筹莫展,充分利用开发者文档能够解决你的大部分问题[太开心]希望8u们都养成一个看文档的好习惯
2024年06月21日 08点06分 11
level 7
说得好,我把文档丢给gpt[吐舌]43个字换行也太草(机智)了[笑眼]
2024年07月10日 20点07分 12
level 2
请问楼主src内容很多怎么导入呢,谢谢
2024年12月05日 09点12分 13
你要导入什么文件?字体还是什么
2024年12月05日 12点12分
level 1
你个码农
2025年01月18日 16点01分 14
[笑眼][笑眼][笑眼]
2025年01月18日 23点01分
level 1
2025年01月18日 16点01分 15
level 4
lz请问一下 nonebot插件教程在哪里看得,我也想写[小乖]
2025年08月07日 15点08分 17
直接搜nonebot2官网有文档
2025年08月07日 23点08分
@👾pHq👾 谢谢,刚好打开贴吧就看到了回复[小乖]
2025年08月07日 23点08分
1 2 尾页