Хорватская кодировка для BytesIO Python - PullRequest
0 голосов
/ 19 марта 2020

Итак, я создал программу Python, которая будет добавлять текст в шаблон PDF, но у меня проблема с отображением таких символов, как č, ć, š, ž, đ et c.

Этот текст сначала помещается на холст:

packet = io.BytesIO()
can = canvas.Canvas(packet, pagesize=A4)

, затем вы помещаете пакет в новый файл PDF:

can.drawString(100, 100, "Kopačka")
    can.save()    
    packet.seek(0)  
    new_pdf = PdfFileReader(packet)

и после этого я объединяю пустой Шаблон PDF и новый PDF с критическим текстом.

Проблема в том, что специальные символы diacriti c отображаются в виде черных ящиков, например: 101

Я попытался добавить кодировку UTF-8 к функции определения:

def __init__(self, e='utf-8')

и в функции drawString, например:

can.drawString(100, 100, "Kopačka".encode('utf-8'))

, но она по-прежнему не отображается правильно.

Есть ли способ показать эти специальные символы каким-либо другим способом?

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Итак, я нашел решение:

Я добавил комментарий, как @Aleksey сказал: # -*- coding: utf-8 -*-

И я изменил шрифт с Arial на Calibri, как @ usr2564301 предложил так:

Сначала импортированные модули:

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

Затем я скачал Calibri Regualr.ttf в папку и зарегистрировал его в приложении:

pdfmetrics.registerFont(TTFont('Calibri', 'Calibri Regular.ttf'))

А затем изменил шрифт на холсте:

can.setFont("Calibri", 11)

Кроме этого, я оставил кодировку UTF-8 в функции определения и функции drawString.

Спасибо всем за помощь!

0 голосов
/ 19 марта 2020

Сценарии, использующие кодировку UTF-8, должны начинаться с этого комментария:

# -*- coding: utf-8 -*-

Также вы можете настроить использование utf-8 следующим образом:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

В вашем сценарии Unicode строки могут быть определены с префиксом 'u'

can.drawString(100, 100, u"Kopačka")
...