关于python基于reportlab 生成PDF 出现中文乱码的解决办法

经过2天的折腾,还有百度了各个网站论坛对于这一问题大家的解决办法。发现大家的回答缺了一个必要条件,或是写了但没有重点提及这个。导致中文乱码问题一直无法解决!原有大家的解决思路都是编码上。没有重点提及注册字体。在此我整理我的解决方法。希望对有此类问题的同学有帮助!

这个问题的正确解决思路如下

1) 对于读取文件需要正确编码。
正确解决的结果是 Python 可以正确解析到这个字符。
常用的编码: utf-8,gbk,gb2312,gb18030。
注意:生成pdf文件需要是字符。读取文件最好是用2进制方式读取。再用相应编码解码!
如果遇到如下错误提示:更换编码即可!

   UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa1 in position 2: inva

可以更换编码:
a=b.decode( your_encoder ) 更换 your_encoder 即可!
而读文件如果个人无法确定文件编码。可以通过chardet 模块detect方法检测文本的编码。

2)生成pdf并显示中文的代码需要注册字体!
这一步非常关键。如果这一步无法实现。就无法解决中文乱码的问题。
关于windows系统的字体。放置路径一般是 c:\windows\fonts\目录。
可以选择对应的字体。
具体示例如下:

 from reportlab.pdfbase import pdfmetrics,ttfonts
 pdfmetrics.registerFont (reportlab.pdfbase.ttfonts.TTFont ('song', 'C:/Windows/Fonts/simfang.ttf'))  # 注册字体
 c = canvas.Canvas(output) #实例化canvas
 c.setFont ('song', 10) # 设置字体及大小
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值