navicat 15 pdf导出中文乱码本质是系统打印模块未嵌入字体,需按系统分别配置:windows设默认中文字体并正确安装,macos用“所有用户启用”notosanscjk,linux装wqy-microhei并设lang;推荐改用report designer,其可嵌入字体、跨平台保真。
navicat 15 没有真正意义上的「pdf导出」功能,所谓“打印为 pdf”只是调用操作系统原生打印模块,不嵌入字体、不做子集化,中文字体显示为方块,100% 是系统字体缺失或默认字体链 fallback 失败导致的。
Windows 上导出 PDF 中文变方块:检查 simsun / msyh 是否真可用
Navicat 不会主动加载 C:\Windows\Fonts 下的字体,它依赖 Windows GDI 的默认字体映射逻辑。如果系统未将中文字体设为默认无衬线字体,打印时就会 fallback 到 MS Sans Serif(无中文字符),结果就是方块。
- 打开「控制面板 → 字体 → 字体设置」,确认「中文字体默认为」已手动设为
SimSun或Microsoft YaHei - 不要只靠复制字体文件到
C:\Windows\Fonts,需右键安装(而非仅拖入),否则注册表未写入,GDI 不识别 - 重启 Navicat 后,按
Ctrl+P呼出系统打印对话框,此时观察预览区——若标题/字段名仍为方块,说明系统级字体链未生效
macOS 导出 PDF 中文乱码:NotoSansCJK 必须「所有用户启用」
macOS 的「字体册」支持「仅此用户启用」和「所有用户启用」两种模式。Navicat(基于 Java)启动时读取的是全局字体路径,仅当前用户启用的字体不会被 Java AWT 渲染器发现。
- 把
NotoSansCJK.ttc拖入「字体册」后,双击打开,点击右下角「安装字体」→ 选择「安装到所有用户」 - 在「系统设置 → 通用 → 字体」中,确认「用于东亚文的字体」明确设为
PingFang SC或Noto Sans CJK SC,不能留空或用 Latin 字体顶替 - 不要尝试改 Navicat 的
Options → Fonts,那里只影响结果集窗口显示,对打印路径完全无效
Linux 导出 PDF 空白或方块:fonts-wqy-microhei + LANG 缺一不可
Linux 下 Navicat 既不带字体,也不读取 ~/.fonts.conf,它只认系统级 fontconfig 缓存 + 正确的 LANG 环境变量。缺任一环节,Java Swing 就静默 fallback 到 DejaVu Sans,中文直接消失。
- 执行
sudo apt install -y fonts-wqy-microhei(Ubuntu/Debian)或sudo yum install -y wqy-microhei-fonts(CentOS/RHEL) - 运行
fc-cache -fv刷新缓存,确保fc-list :lang=zh能列出至少一个中文字体 - 启动前必须设环境变量:
LANG=en_US.UTF-8 navicat(推荐 en_US.UTF-8 而非 zh_CN.UTF-8,避免部分 Java 版本对 zh locale 解析异常)
比修字体更稳的方案:别用打印,改用 Report Designer
Report Designer 是 Navicat Premium 内置的报表引擎,它生成 PDF 时会主动嵌入字体字形(TrueType subsetting),不受系统字体限制。这才是面向交付的正解。
- 菜单栏 →
Tools → Report Designer→ 新建报表 → 绑定查询 - 双击字段,在属性面板里显式将字体设为
SimSun(Windows)、PingFang SC(macOS)或WenQuanYi Micro Hei(Linux) - 点
Preview确认中文正常 →Export → PDF,此时 PDF 文件内含字体流,可跨平台打开不乱码
真正容易被忽略的是:Navicat 的打印路径本质上是“屏幕截图式 PDF”,它不处理字体嵌入、不校验编码、不重排版。哪怕你把系统字体全配齐,只要某张表名含生僻字(如「〇」「〆」)或 emoji,依然可能 fallback 失败。Report Designer 虽要 Premium 授权,但它是唯一能保证中文字体 100% 可控的出口。











