我正在将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。