2013-06-09 11 views
5

Czy istnieje opcja przekonwertowania liter latin2 w odpowiedni sposób? Potrzebuję polskiego listu do mojego szkolnego projektu. Oto kod, jak wygenerować 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() 

i uzyskać w ten sposób:

Za■■cznik nr 2 do Regulaminu 

Próbowałem kilka sztuczek kodujące bez rezultatu.

+0

Gdzie otrzymujesz błędne dane wyjściowe? W wygenerowanym pdf? –

+0

Tak, to, co dostaję, jest skopiowane z pdf (zastąpiłem skopiowane 'nn' czarnymi kwadratami - to widzę w pdf). – lisek

+0

Spróbuj tego wiersza w metodzie 'GenerujPustyAskusz' zamiast:' c.drawString (450,750, 'załącznik nr 2 do Regulaminu" .decode ('utf-8')) 'również, dlaczego tagujesz to pytanie jako latin2, myślę, że używasz utf-8? –

Odpowiedz

6

Myślę, że głównym problemem jest to, że czcionka, której używasz, nie ma polskich znaków. Ten kod pracował dla mnie i pokazał się znaki Poszukiwany

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

Jeśli chcesz użyć innej czcionki musisz znaleźć krój chcesz które zawierają polskich znaków.

Mam nadzieję, że to pomoże!

+1

Awosome! To działa. Wielkie dzięki, zaoszczędziłeś mi dużo czasu. ROZWIĄZYWANY – lisek

+0

Cieszę się, rozważ zaakceptowanie odpowiedzi, proszę, jeśli ci się przydało :) –

+0

Teraz, jeśli była tylko metoda 'Canvas.getAvailableTTFonts()' ... –

Powiązane problemy