【问题标题】:Django reportlab latin2 encodingDjango reportlab latin2 编码
【发布时间】:2013-06-09 09:58:12
【问题描述】:

是否有任何选项可以正确转换 latin2 字母?我需要给我的学校项目写波兰信。这是我如何生成pdf的一些代码

#!/usr/bin/python
# -*- utf-8 -*-

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter, A4



def GenerujPustyArkusz(c):
    c.setFont("Times-Roman", 8)
    c.drawString(450,750, u"Załącznik nr 2 do Regulaminu")


def test():
    c = canvas.Canvas("test.pdf", pagesize=letter)
    GenerujPustyArkusz(c)
    c.showPage()
    c.save()


test()

我明白了:

Za■■cznik nr 2 do Regulaminu

我尝试了几种编码技巧,但没有结果。

【问题讨论】:

  • 你从哪里得到错误的输出?在生成的pdf中?
  • 是的,这是我从 pdf 中复制的(我将复制的 'nn' 替换为黑色方块 - 这是我在 pdf 中看到的)。
  • GenerujPustyAskusz 方法中尝试这一行:c.drawString(450,750, "Załącznik nr 2 do Regulaminu".decode('utf-8')) 还有,你为什么将这个问题标记为 latin2,我认为你使用的是 utf-8?
  • 我需要的字母是 latin2 (iso-8859-2),例如 łóżźćńś。我试过这个技巧没有结果。

标签: python django encoding reportlab iso-8859-2


【解决方案1】:

我认为主要问题是您使用的字体没有那些波兰语字符。 这段代码对我有用,并显示了你想要的字符:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter, A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont   

def GenerujPustyArkusz(c):
    pdfmetrics.registerFont(TTFont('Verdana', 'Verdana.ttf'))
    c.setFont("Verdana", 8)
    s = u"Załącznik nr 2 do Regulaminu"
    c.drawString(450,750, s)   

def test():
    c = canvas.Canvas("test.pdf", pagesize=letter)
    GenerujPustyArkusz(c)
    c.showPage()
    c.save()  

test()

如果你想使用其他字体,你必须找到你想要的包含波兰字符的字体。

我希望这会有所帮助!

【讨论】:

  • 太棒了!有用。非常感谢,你为我节省了很多时间。解决了
  • 我很高兴,如果对您有用,请考虑接受答案:)
猜你喜欢
  • 2020-09-05
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多