Я использую 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.