将unicode文本插入pyx画布

时间:2014-10-21 08:18:36

标签: python django pyx

我有一组UTF-8字符,我想插入PyX生成的pdf文件。 我已将# -*- coding: utf-8 -*-添加到文件顶部。代码有点类似于以下内容:

# -*- coding: utf-8 -*-
c = canvas.canvas()
txt = "u'aあä'"
c.text(2, 2, "ID: %s"%txt)
c.writeEPSfile("filename.eps")

但我仍然无法理解这一点。

错误:

'ascii' codec can't encode character u'\xae' in position 47: ordinal not in range(128)

3 个答案:

答案 0 :(得分:1)

试试这个:

# -*- coding: utf-8 -*-
c = canvas.canvas()
txt = u'aあä'.encode('utf-8')
c.text(1, 4, "UID: %s"%(txt))
c.writeEPSfile("filename.eps")

答案 1 :(得分:1)

您可以设置PyX将unicode字符传递给(La)TeX。然后,在TeX / LaTeX中生成有问题的字符都成为一个问题。这是产生相关输出的一个相当小的解决方案:

from pyx import *

text.set(cls=text.LatexRunner, texenc='utf-8')
text.preamble(r'\usepackage[utf8]{inputenc}')
text.preamble(r'\usepackage{newunicodechar}')
text.preamble(r"\newunicodechar{あ}{{\usefont{U}{min}{m}{n}\symbol{'102}}}") 
text.preamble(r'\DeclareFontFamily{U}{min}{}')
text.preamble(r'\DeclareFontShape{U}{min}{m}{n}{<-> udmj30}{}')

c = canvas.canvas()
c.text(0, 0, 'UID: aあä')
c.writeGSfile('utf8.png')

这直接导致输出(如此处上传的PNG):program output

请注意,这是在Python 3上使用PyX 0.13和相当标准的LaTeX安装完成的。另外,我使用了https://tex.stackexchange.com/questions/171611/how-to-write-a-single-hiragana-character-in-latex中有关在LaTeX中创建这些字符的一些信息。似乎有像CJKutf8这样的解决方案来设置所有类型的字符,直接用作LaTeX中的unicode字符,但这是出于我的经验。无论如何,如果所有设置都已正确完成,它应该在PyX内部工作正常,就像从LaTeX本身那样。祝你好运!

答案 2 :(得分:1)

也许你可以从babel包找到一套相应的套装 当我尝试插入德语ä(变音符号)时,我遇到了同样的错误。我只是添加了德国巴贝尔包:

text.preamble(r"\usepackage[ngerman]{babel}")

之后,这可能没有错误:

c.text(12, 34, "äöüßß")

我也使用了utf8输入编码,我认为这也是必要的。

进一步阅读:
https://en.wikibooks.org/wiki/LaTeX/Internationalization
https://en.wikibooks.org/wiki/LaTeX/Fonts