2013-06-09 4 views
5

Есть ли способ конвертировать латинские буквы надлежащим образом? Мне нужно польский текст в моем школьном проекте. Вот код, как я могу генерировать PDFDjango reportlab latin2 encoding

#!/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 

Я попробовал несколько кодирующим трюки без результата.

+0

Где вы получаете этот неправильный результат? В сгенерированном pdf? –

+0

Да, это то, что я получаю, скопировано из pdf (я заменил скопированный «nn» на черные квадраты - это то, что я вижу в pdf). – lisek

+0

Попробуйте эту строку вместо метода 'GenerujPustyAskusz':' c.drawString (450,750, «Załącznik nr 2 do Regulaminu» .decode ('utf-8')) 'также, почему вы помечаете эти вопросы как latin2, я думаю, вы используя utf-8? –

ответ

6

Я думаю, что основная проблема заключается в том, что шрифт, который вы используете, не имеет этих польских символов. Этот код работает для меня и появился символы, которые вы хотели:

#!/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() 

Если вы хотите использовать другой шрифт, вы должны найти шрифт вы хотите, которые включают в польские символы.

Надеюсь, это поможет!

+1

Awosome! Оно работает. Большое спасибо, у меня было много времени. SOLVED – lisek

+0

Я рад, подумайте о том, чтобы принять ответ, пожалуйста, если он вам был полезен :) –

+0

Теперь, если был только метод 'Canvas.getAvailableTTFonts()' ... –

Смежные вопросы