2013-06-09 4 views
5

Gibt es eine Möglichkeit, latin2-Buchstaben richtig zu konvertieren? Ich brauche einen polnischen Brief an mein Schulprojekt. Hier ist ein Code, wie ich pdf generierenDjango 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() 

Und ich bekomme diese:

Za■■cznik nr 2 do Regulaminu 

ich mehrere kodieren Tricks ohne Ergebnis versucht.

+0

Wo bekommen Sie diese falsche Ausgabe? In der generierten pdf? –

+0

Ja, das, was ich bekomme, wird von pdf kopiert (ich ersetzte kopiert 'nn' mit schwarzen Quadraten - das ist, was ich in pdf sehe). – lisek

+0

Probieren Sie diese Zeile in 'GenerujPustyAskusz' Methode statt:' c.drawString (450,750, "Załącznik nr 2 tun Regulaminu" .decode ('utf-8')) 'auch, warum markieren Sie diese Fragen als latin2, denke ich Sie benutze utf-8? –

Antwort

6

Ich denke, das Hauptproblem ist, dass die Schriftart, die Sie verwenden, nicht diese polnischen Zeichen hat. Dieser Code funktioniert für mich und zeigte sich die Zeichen gesucht:

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

Wenn Sie andere Schriftart verwenden möchten, müssen Sie die Schrift finden müssen Sie, dass die polnische Zeichen enthalten sein sollen.

Ich hoffe, das hilft!

+1

Awosome! Es klappt. Vielen Dank, du hast mir viel Zeit gespart. Gelöst – lisek

+0

Ich bin froh, in Betracht zu ziehen, die Antwort bitte zu akzeptieren, wenn es Ihnen nützlich war, bitte :) –

+0

Jetzt, wenn es nur eine Methode 'Canvas.getAvailableTTFonts()' ... gab –