You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:36:03