首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >BytesIO Python的克罗地亚编码

BytesIO Python的克罗地亚编码
EN

Stack Overflow用户
提问于 2020-03-19 20:25:41
回答 2查看 182关注 0票数 0

所以我做了一个Python程序,可以将文本添加到PDF模板中,但我在显示字符时遇到了问题,比如č,ć,š,ž,đ等。

该文本首先放在画布上:

代码语言:javascript
运行
复制
packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=A4)

然后你把包放到一个新的PDF中:

代码语言:javascript
运行
复制
can.drawString(100, 100, "Kopačka")
    can.save()    
    packet.seek(0)  
    new_pdf = PdfFileReader(packet)

在那之后,我将空的PDF模板和新的PDF与关键文本合并。

问题是特殊的变音字符显示为黑框,如下所示:⬛

我尝试将UTF-8编码添加到定义函数中:

代码语言:javascript
运行
复制
def __init__(self, e='utf-8')

在drawString函数中,如下所示:

代码语言:javascript
运行
复制
can.drawString(100, 100, "Kopačka".encode('utf-8'))

但它仍然不能正确显示。

有没有办法以其他方式显示这些特殊字符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-21 17:50:39

所以我找到了解决方案:

我添加了@Aleksey的评论:# -*- coding: utf-8 -*-

我按照@usr2564301的建议将字体从Arial改为Calibri:

首先,导入模块:

代码语言:javascript
运行
复制
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

然后我下载了文件夹中的Calibri Regualr.ttf,并在应用程序中注册了它:

代码语言:javascript
运行
复制
pdfmetrics.registerFont(TTFont('Calibri', 'Calibri Regular.ttf'))

然后在画布中更改字体:

代码语言:javascript
运行
复制
can.setFont("Calibri", 11)

除此之外,我将UTF8编码留在了定义函数和drawString函数中。

感谢大家的帮助!

票数 0
EN

Stack Overflow用户

发布于 2020-03-19 20:33:21

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

代码语言:javascript
运行
复制
# -*- coding: utf-8 -*-

你也可以这样设置utf-8的用法:

代码语言:javascript
运行
复制
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

在您的脚本中,unicode字符串可以使用'u‘前缀定义

代码语言:javascript
运行
复制
can.drawString(100, 100, u"Kopačka")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60757230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档