【问题标题】:Report Lab can't handle hebrew (unicode)报告实验室无法处理希伯来语(unicode)
【发布时间】:2012-06-13 02:33:38
【问题描述】:

我正在尝试根据 python 编程生成 pdf,但生成的输出无法正确显示希伯来字母

# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
def hello(c):
    c.drawString(100,100, "מה שלומך")
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()

【问题讨论】:

  • 你试过在drawString之前用setFont改变字体吗?
  • 我没有得到我应该设置的字体类型

标签: python reportlab non-ascii-characters


【解决方案1】:

如果您使用正确的解码调用,例如"מה שלומך".decode("utf-8"),它会起作用。

# -*- coding: utf-8 -*-
from reportlab.pdfgen import canvas
def hello(c):
    c.drawString(100,100, "מה שלומך".decode("utf-8"))
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()

【讨论】:

  • 或者,更简单地说,使用u"מה שלומך"
  • Hrm,Reportlab 指出unicodeutf-8 编码字符串都受支持,因此这不是答案。请参阅PDF userguide,第 41 页,第 3.1 节。
  • 我的经验是,ReportLab 在 Unicode 上失败了,您需要使用 UTF-8。仅通过确保一切都是 UTF-8 来解决非 ASCII 字符的问题。
  • 上述解决方案对我不起作用。我已经尝试过这些排列组合。
【解决方案2】:

此代码(见下文)有效!您需要做的就是将ArialHB.ttf(或任何其他支持希伯来字符的字体)放入site-packages/reportlab/fonts...

所需的输出将位于 pdf 页面的底部。

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

from reportlab.pdfgen import canvas 
from reportlab.pdfbase import pdfmetrics 
from reportlab.pdfbase.ttfonts import TTFont 

pdfmetrics.registerFont(TTFont('Hebrew', 'ArialHB.ttf'))

def hello(c):
    c.setFont("Hebrew", 14)
    c.drawString(10,10, u"מה שלומך".encode('utf-8'))

c = canvas.Canvas("hello.pdf") 
hello(c) 
c.showPage()
c.save()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多