Символы Юникода не отображаются должным образом в reportlab-python3 - PullRequest
0 голосов
/ 31 октября 2019

Я использую ReportLab с Python3.7 для генерации PDF-файлов, в которые «вставляются» изображения вместе с текстом, добавляемым рядом с каждым изображением. Текст читается из файла CSV и в основном на бенгальском языке. Изображения обрезаются и сохраняются как отдельные файлы изображений (.png).

Ниже приведен соответствующий раздел кода, который я использую для добавления текста. в файл PDF.

from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics, cidfonts
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.fonts import addMapping
import csv

def hBTxt(msg, canvas, x, y, fontName):
    canvas.saveState()
    try:
        font = pdfmetrics.getFont(fontName)
    except KeyError:
        font = cidfonts.UnicodeCIDFont(fontName)
        pdfmetrics.registerFont(font)

    canvas.setFillGray(0.8)
    canvas.rect(x,y,pdfmetrics.stringWidth(msg, fontName, 16),16,stroke=0,fill=1)
    canvas.setFillGray(0)
    canvas.setFont(fontName, 16,16)
    canvas.drawString(x,y,msg)
    canvas.restoreState()
...
for fldPnt in brSet:
    with open(r'E:\VTImg\CSVFiles\ImageData.csv', 'r', encoding = 'utf-8') as csvF:
        imgData = csv.DictReader(csvF)
        for row in imgData:
            if int(row['PD Set']) == 5 and row['Dept'] == fldPnt:
                txt = row['Name']
                break
    pdfmetrics.registerFont(TTFont('SiyamRupali', r'C:\Windows\Fonts\Siyamrupali.ttf'))
    addMapping('SiyamRupali', 0, 0, r'C:\Windows\Fonts\Siyamrupali.ttf')
    c = canvas.Canvas('hello.pdf')
    hBTxt(txt, c, 100, 100, 'SiyamRupali')
    c.showPage()
    ...
    c.save()

В документе PDF неправильно отображаются текстовые значения. Например, когда значение txt в CSV-файле отображается как «সৌমিত্র বসু» (и это требуемый вывод) в Excel / Notepad, текст, который отображается в PDF как Отображать . Текстовое значение в CSV представляет собой последовательность следующих символов Unicode - \ u09b8 \ u09cc \ u09bf \ u09a4 \ u09cd \ u09b0 SPACE \ u09ac \ u09b8 \ u09c1.

Моя операционная система - Windows 10,Reportlab версия 3.5.32.

...