使用ReportLab生成的PDF在Adobe Illustrator中中文乱码求助
解决ReportLab生成PDF在Adobe Illustrator中中文乱码问题
问题核心在于:你的代码仅注册了SimSun字体,但未启用字体嵌入。浏览器可调用系统本地的SimSun字体渲染文本,而Adobe Illustrator严格依赖PDF文件内部嵌入的字体数据,缺失对应字体信息就会出现乱码。
修正方案
在注册TTFont时添加embed=True参数,强制ReportLab将字体数据嵌入PDF中;若需要完整嵌入字体而非仅文档用到的字符子集,可额外添加subset=False参数(默认是子集嵌入,多数场景下子集已足够)。
修正后的代码:
from reportlab.pdfgen import canvas from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont # 注册字体并启用嵌入,subset=False可选,用于完整嵌入字体 pdfmetrics.registerFont(TTFont('SimSun', 'SimSun.ttf', embed=True, subset=False)) c = canvas.Canvas('output.pdf') c.setFont('SimSun', 12) c.drawString(100, 100, '水果超级大卖场') c.save()
补充说明
embed=True:确保字体的字形数据被写入PDF,让Adobe Illustrator无需依赖系统字体即可渲染文本。subset=False:默认情况下ReportLab会只嵌入文档中用到的字符子集,若你后续需要在AI中编辑文本(添加更多同字体字符),建议开启完整嵌入;仅需查看或现有字符编辑时,子集嵌入更节省PDF体积。
内容的提问来源于stack exchange,提问作者kong xie
相关产品推荐
相关产品推荐

