BytesIO Python的克罗地亚编码

2024-05-14 07:38:49 发布

您现在位置: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'))

但它仍然没有正确显示

有没有其他方法来展示这些特殊的角色


Tags: 函数io文本程序模板pdfpacket画布
2条回答

所以我找到了解决办法:

我以@Aleksey的方式添加了这个评论:# -*- coding: utf-8 -*-

我将字体从Arial改为Calibri,正如@usr2564301建议的那样:

首先,导入的模块:

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)

除此之外,我在definition函数和drawString函数中保留了UTF-8编码

谢谢大家的帮助

使用UTF-8编码的脚本应以以下注释开头:

# -*- coding: utf-8 -*-

您还可以通过以下方式设置utf-8的使用:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

在脚本中,可以使用“u”前缀定义unicode字符串

can.drawString(100, 100, u"Kopačka")

相关问题 更多 >

    热门问题