使用FPDF生成PDF文件时孟加拉语单词显示断裂如何解决
你遇到的字符断裂问题是**原版PyFPDF不支持复杂文字排版(CTL)**导致的:孟加拉语属于需要组合字形、连写渲染的表意文字,原版PyFPDF没有实现相关的字形整形规则,只会逐个拆分字符渲染,和你使用的字体无关,更换字体无法解决问题。
方案1:使用支持复杂脚本的新版FPDF(fpdf2,最推荐)
fpdf2是原版PyFPDF的社区维护升级版,已经原生支持孟加拉语等复杂文字的渲染。
第一步:安装依赖库
pip uninstall fpdf -y pip install fpdf2 python-bidi harfpy
第二步:修改代码适配fpdf2
from fpdf import FPDF from bidi.algorithm import get_display pdf = FPDF(orientation='L', unit='mm', format='A5') pdf.add_page() pdf.add_font('kalpurush', '', 'fileLocation/kalpurush.ttf') pdf.set_font('kalpurush', '', 18) pdf.set_xy(10, 10) pdf.set_text_color(0, 0, 0) # 处理文本排版顺序,适配复杂文字的显示逻辑 processed_text = get_display("শিরোনাম") pdf.cell(w=0, h=10, align='L', txt=processed_text, border=0) pdf.output("test.pdf")
方案2:文本转图片插入PDF(备选)
如果不想更换基础库,可先通过PIL/Pillow将孟加拉语文本渲染为透明背景的图片,再插入到PDF对应位置,优点是兼容性强,缺点是文字无法选中复制:
from fpdf import FPDF from PIL import Image, ImageDraw, ImageFont # 先渲染文本为高清晰度图片 font = ImageFont.truetype("fileLocation/kalpurush.ttf", 18*3) img = Image.new("RGBA", (400, 100), (255,255,255,0)) draw = ImageDraw.Draw(img) draw.text((0,0), "শিরোনাম", font=font, fill=(0,0,0)) img.save("temp_text.png") # 插入图片到PDF对应位置 pdf = FPDF(orientation='L', unit='mm', format='A5') pdf.add_page() pdf.image("temp_text.png", x=10, y=10, w=40) pdf.output("test.pdf")
内容的提问来源于stack exchange,提问作者asif abdullah
相关产品推荐
相关产品推荐

