Navicat 导出 ER 图为 PDF 失败的根本原因是 Qt WebEngine 在无图形界面或中文字体缺失时渲染失败,非软件自身缺陷;需确保 GUI 环境、安装 Noto Sans CJK 等中文字体,并在模型中手动开启连接标签与基数显示。
Navicat 导出 ER 图为 PDF 时提示 “无法生成 PDF” 或空白页
根本原因通常是底层依赖的 pdf 渲染引擎(qt webengine)在无图形界面环境或字体缺失时失效,不是 navicat 自身 bug。mac/linux 下尤其常见,windows 通常默认能过。
- 确认系统已安装基础中文字体(如
Noto Sans CJK或WenQuanYi Micro Hei),Linux 可执行fc-list :lang=zh检查 - 避免在 SSH + X11 转发环境下操作 —— 即使显示了界面,WebEngine 仍可能拒绝渲染
- 临时解决:在图形桌面环境中启动 Navicat(非命令行方式),且确保当前用户有完整 GUI 权限
- 若用 Docker 运行 Navicat(极少见但存在),必须挂载
/tmp/.X11-unix并启用--privileged,否则必然失败
导出 PDF 后中文乱码或字段名被截断
Navicat 的 ER 图导出不走系统字体配置,而是硬编码调用 Qt 的字体回退链,对非 Latin 字符支持脆弱。截断问题则源于 PDF 布局引擎对宽字符宽度预估错误。
- 建模时表名/字段名尽量控制在 12 字以内,避免
用户基本信息扩展属性历史快照表类长命名 - 导出前在 Navicat 中进入
工具 → 选项 → 模型 → 字体,手动设为SimSun(Windows)或STHeiti(macOS),Linux 推荐Noto Sans CJK SC - 不要依赖“自动缩放”选项 —— 它只缩放图形,不重排文字流,反而加剧截断
- 导出格式选
PDF(矢量)而非PDF(光栅),后者本质是截图,放大即糊,且无法复制文字
如何让导出的 PDF 包含关系线说明(如 “1:N”、“外键约束名”)
Navicat 默认导出会隐藏连接线上的文本标注,需提前在模型视图中显式开启,且该设置不随文件保存,每次打开都要检查。
- 在模型编辑界面,右键画布 →
显示/隐藏 → 显示连接标签(注意不是“显示连接线”) - 双击任意关系连线,在弹出面板中勾选
显示基数和显示外键名称,否则即使开启标签也不会输出 - 若使用逆向工程生成的模型,部分关系可能未绑定外键元数据,此时
显示外键名称无效,需先在表结构 → 外键里补全定义 - 导出前务必点击画布空白处取消所有元素选中状态,否则 Navicat 会只导出选中区域(常被忽略)
自动化批量导出多个模型为 PDF 的可行性
Navicat 官方不提供命令行导出模型的接口,navicat.exe --export-model 等尝试均无效。所谓“批量”,只能靠模拟点击或 AppleScript/PowerShell 封装,稳定性差、易断裂。
- Windows 下可用 AutoHotkey 写脚本触发菜单操作,但需固定窗口尺寸和 DPI 缩放为 100%,否则坐标偏移
- macOS 可用
osascript控制菜单栏,但 Navicat 16+ 启用了沙盒,脚本权限需手动在系统设置中授予 - 真正可靠的替代方案是绕过 Navicat:用
mysqldump --no-data+schema2json工具生成中间结构,再用 Python 的graphviz或mermaid-cli渲染为 PDF - 如果只是定期归档,建议直接保存
.nm模型文件 + 截图 PNG,PDF 并非唯一可读交付物
ER 图导出 PDF 看似简单,实际卡点都在字体、GUI 上下文和 Qt 渲染链上。别在“为什么点不动导出按钮”上耗太久,先验证是否能正常打开 Navicat 自带的示例模型并导出 —— 这一步能排除八成环境问题。










