小编tir*_*isu的帖子

Reportlab - Unicode 字符在 unicode 支持的字体中显示为框

尝试通过 python 3 使用 reportlab 编写包含宏宏的文档 (\xc4\x81 \xc4\x93 \xc4\xab \xc5\x8d \xc5\xab),但宏宏显示为框 (\xe2\x96 \xa0). 该文档是用 Arial 字体编写的 - 但如果我在文字处理程序中打开该文件来检查字体,则这些框采用“Segoe UI Symbol”字体。

\n\n

要在 Arial 中导入为支持多种 unicode 字符的字体(这似乎有效):

\n\n
import reportlab.rl_config\nreportlab.rl_config.warnOnMissingFontGlyphs = 0\nfrom reportlab.pdfbase import pdfmetrics\nfrom reportlab.pdfbase.ttfonts import TTFont\npdfmetrics.registerFont(TTFont(\'Arial\', \'Arial.ttf\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还通过 json 导入字典,当我在记事本中打开 json 文件时,看起来像这样:

\n\n
{"example1":"b\\u0101s"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该程序读取并写入这个字典:

\n\n
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer\nfrom reportlab.lib.styles import getSampleStyleSheet\ndoc = SimpleDocTemplate("hello.pdf")\nStory = [Spacer(1,2*inch)]\nstyle = styles["Normal"]\nwith open(\'CompDict.json\',\'r\') as f:\n        m_dic=json.load(f)\nfor key,value in m_dic:\n     p=Paragraph(key+":"+value,style)\n     Story.append(p)\ndoc.build(Story)\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果应该是一个 pdf 文件,example1:b\xc4\x81s但结果却是example1:b\xe2\x96\xa0s …

python unicode reportlab

6
推荐指数
1
解决办法
5968
查看次数

标签 统计

python ×1

reportlab ×1

unicode ×1