2013-06-09 22 views
5

có tùy chọn nào để chuyển đổi chữ cái latin2 theo cách thích hợp không? Tôi cần thư đánh bóng cho dự án trường học của tôi. Dưới đây là một số mã như thế nào tôi có thể tạo 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() 

Và tôi có được điều này:

Za■■cznik nr 2 do Regulaminu 

Tôi đã thử nhiều thủ đoạn mã hóa với kết quả không.

+0

Bạn nhận được đầu ra sai ở đâu? Trong pdf được tạo ra? –

+0

Vâng, điều này tôi nhận được được sao chép từ pdf (tôi đã thay thế sao chép 'nn' bằng hình vuông màu đen - đây là những gì tôi thấy trong pdf). – lisek

+0

Hãy thử dòng này trong phương thức 'GenerujPustyAskusz' thay vào đó:' c.drawString (450,750, "Załącznik nr 2 do Regulaminu" .decode ('utf-8')) 'cũng vậy, tại sao bạn gắn thẻ câu hỏi này là latin2, tôi nghĩ bạn đang sử dụng utf-8? –

Trả lời

6

Tôi nghĩ vấn đề chính là phông chữ bạn đang sử dụng không có các ký tự đánh bóng đó. Mã này đã làm việc cho tôi và xuất hiện các ký tự bạn muốn:

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

Nếu bạn muốn sử dụng phông chữ khác bạn sẽ phải tìm ra kiểu chữ bạn muốn bao gồm các nhân vật đánh bóng.

Tôi hy vọng điều này sẽ hữu ích!

+1

Awosome! Nó hoạt động. Cảm ơn rất nhiều, u đã cứu tôi rất nhiều thời gian. GIẢI THÍCH – lisek

+0

Tôi rất vui, hãy cân nhắc việc chấp nhận câu trả lời nếu nó hữu ích cho bạn :) –

+0

Bây giờ nếu chỉ có một phương thức 'Canvas.getAvailableTTFonts()' ... –