Unicode字符在reportlab-python3中无法正确显示

时间:2019-10-31 20:23:39

标签: unicode windows-10 python-3.7 reportlab

我正在将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文档显示的文本值错误。例如,当CSV文件中的txt值在Excel /记事本中显示为“সৌমিত্র(”(这是所需的输出)时,在PDF中显示为Display的文本。 CSV中的文本值是以下Unicode字符的序列-\ u09b8 \ u09cc \ u09ae \ u09bf \ u09a4 \ u09cd \ u09b0空间\ u09ac \ u09b8 \ u09c1。

我的操作系统是Windows 10,Reportlab版本3.5.32。

0 个答案:

没有答案