[英]Croatian encoding for BytesIO Python
所以我制作了一個 Python 程序,可以將文本添加到 PDF 模板,但是我在顯示像 č,ć,š,ž,đ 等字符時遇到了問題。
該文本首先放在畫布上:
packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=A4)
然后將數據包放入新的 PDF 中:
can.drawString(100, 100, "Kopačka")
can.save()
packet.seek(0)
new_pdf = PdfFileReader(packet)
之后我將空的 PDF 模板和新的 PDF 與關鍵文本合並。
問題是特殊的變音符號顯示為這樣的黑框:⬛
我嘗試將 UTF-8 編碼添加到定義函數中:
def __init__(self, e='utf-8')
在像這樣的 drawString 函數中:
can.drawString(100, 100, "Kopačka".encode('utf-8'))
但它仍然沒有正確顯示。
有沒有辦法以其他方式顯示這些特殊字符?
使用 UTF-8 編碼的腳本應以以下注釋開頭:
# -*- coding: utf-8 -*-
您也可以通過這種方式設置 utf-8 的使用:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
在您的腳本中,Unicode 字符串可以用 'u' 前綴定義
can.drawString(100, 100, u"Kopačka")
於是我找到了解決辦法:
我添加了@Aleksey 所說的評論: # -*- coding: utf-8 -*-
我按照@usr2564301 的建議將字體從 Arial 更改為 Calibri:
一、導入模塊:
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
然后我在文件夾中下載了 Calibri Regualr.ttf 並在應用程序中注冊了它:
pdfmetrics.registerFont(TTFont('Calibri', 'Calibri Regular.ttf'))
然后更改畫布中的字體:
can.setFont("Calibri", 11)
除此之外,我在定義函數和 drawString 函數中保留了 UTF-8 編碼。
謝謝大家的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.