1. 程式人生 > >關於python基於reportlab 生成PDF 出現中文亂碼的解決辦法

關於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) # 設定字型及大小