|
|
发表于 2026-9-24 17:23:34
|
显示全部楼层
尊敬的栗老师:
您好!我是棋印的忠实用户,首先非常感谢您做出这么好用的围棋打印软件,把我们这些爱好者从手画棋盘里解放出来了。
冒昧来信,是想向您反馈一个我遇到的 BUG,并附上我这边定位到的原因和一个可能的修复方案,供您参考。
【软件版本】
棋印 v1.5.6(Windows 版 exe)
【问题现象】
用棋印导入带有中文棋盘标签 / 中文解说的 SGF 棋谱后:
软件界面里的预览正常,中文(如棋盘上的“甲”“乙”标签、题面“黑先:……”解说)都能看到;
但一旦“打印”或“导出 PDF”,棋盘上用 LB 属性标的中文标签(甲、乙……)会变成空白,题面里的中文解说也大量丢失 / 变成方块。
也就是说:屏幕能看,打印 / 导出的 PDF 里中文就没了。
【复现步骤】
导入一份含中文棋盘标签(如 LB[gr:甲]、LB[fo:乙])或中文说明(C[黑先:……])的 SGF;
点“打印”或“导出 PDF”;
打开输出的 PDF,即可看到棋盘上的中文标签区域为空,正文中文缺失。
【我这边做的分析(仅供参考)】
棋印的打印 / PDF 输出应该是走 reportlab 这个库来画图的。reportlab 默认字体是 Helvetica,而 Helvetica 是纯拉丁字体,不含任何汉字字形,所以所有中文(包括画在棋盘交点上的标签)画出来都是“没有字形”= 空白。
关键点在于:棋印在画棋盘标签和题面文字时直接用了 reportlab 的默认拉丁字体,并没有注册(registerFont)一个中文字体。所以这不是 SGF 编码问题,而是“PDF 绘制时没指定中文字体”导致的中文画不出来。
【建议的修复方向(约 2 行核心代码)】
在生成 PDF 之前,先把系统里已有的中文字体注册进 reportlab,然后把绘制棋盘标签和正文字段用的 fontName 换成这个中文字体即可:
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# 注册一个中文字体(以下为 Windows 常见中文字体路径,可改为您打包时附带的字体或让用户自选)
pdfmetrics.registerFont(TTFont('hei', 'C:/Windows/Fonts/simhei.ttf'))
# 之后凡是画中文的地方,把 fontName 设为您注册的字体即可,例如:
# canvas.setFont('hei', size) # 画棋盘标签、坐标、题面文字
# Paragraph(text, ParagraphStyle(fontName='hei', ...)) # 用 platypus 排版题面解说时
simhei.ttf(黑体)在大多数 Windows 上都有;若希望跨平台 / 不依赖系统字体,也可以把一款免费中文字体(如思源黑体 / 文泉驿)随软件一起打包,再用相对路径注册。注册完成后,棋盘上的“甲/乙”和题面中文在 PDF 里就能正常显示。
【一点小建议】
如果方便,也可以在“打印 / 导出”设置里增加一个“字体”下拉,让用户自选中文字体,这样既能彻底解决中文问题,也方便用其他字体排版,体验会更好。
以上分析是我作为用户在本地做的一点排查,未必完全准确,若与您实现有出入还请包涵。衷心希望这个 BUG 能在后续版本里解决,让更多中文用户受益。
如果需要我提供某份具体出问题的 SGF 样例文件,或帮忙测试修复后的效果,我随时可以配合。
再次感谢您的付出,祝棋印越做越好!
此致
敬礼
|
|