Na vicat无法直接打印超大型ER图,应改用Export→As Image导出PNG/SVG:需先解锁所有表并执行Auto Layout,勾选Wrap column names、Use anti-aliasing,降级字体,分Group导出后合并PDF。
想在 Na vicat 里直接「打印」超大型数据库的ER全景图?这事儿本质上就行不通。问题不在于你的操作,而在于工具本身的限制——它压根没有语义分页的能力。强行通过打印菜单操作,结果往往是表格被截断、字体被压扁、关系连线飞出页面。所以,别在打印这条路上死磕了,路径从一开始就选错了。
别用 File → Print,改用 File → Export → As Image(PNG/SVG)
关键在于区分两个功能:「打印」和「导出为图片」。前者走的是系统原生打印通道,粗暴地将当前窗口的像素内容硬塞进A4纸,完全无视ER图的逻辑结构。而后者则灵活得多,不仅能保留矢量信息、支持抗锯齿,还能让你手动控制画布范围,这才是处理大型ER图的正确姿势。

- 进行
Export操作前,务必确保你已激活模型编辑器(标题栏会显示为蓝色)。在数据库连接页或其它子标签页里操作是无效的。 - 选择PNG格式时,一定要勾选
Use anti-aliasing(使用抗锯齿)选项。注意,这个选项仅在主菜单的导出功能中间出现,右键菜单通常不提供。 - 如果选择SVG格式,导出后中文字符可能会被转换为路径。这虽然适合无限缩放查看,但会导致在浏览器中无法直接搜索或复制文字。后续如果需要编辑,得用 Inkscape 这类工具手动解组。
- 导出分辨率建议直接设置为
300 dpi。如果分辨率过低,嵌入PDF后再打印,效果会非常模糊。
导出前必须解锁所有表并重跑 Auto Layout
布局混乱是另一个常见陷阱。只要有一张表被手动拖动过位置,或者被勾选了 Lock Position(锁定位置),那么 Auto Layout(自动布局)功能就会退化为局部微调,导致整个布局松散、空白区域失控。这并非算法缺陷,而是对象状态被锁住了。
- 首先全选所有表:使用
Ctrl+A,然后观察右下角状态栏,看是否显示有X tables locked(X张表被锁定)。 - 如果存在锁定,需要批量解锁:
Ctrl+Shift+L是 Na vicat 15.5及以上版本的快捷键。老版本则只能逐个右键点击表,取消勾选Lock Position。 - 解锁完成后,点击菜单栏的
Layout → Auto Layout,等待几秒钟直到所有关系连线稳定下来,再进行导出操作。 - 千万别迷信「自动适应画布」这类功能——它仅仅是对视觉进行缩放,并不会重新进行逻辑排列。真正有效的流程永远是:先解锁,再执行自动布局。
超大图导出后仍挤成一团?试试 Wrap column names + 字体降级
字段名过长(例如 user_last_login_timestamp_utc_offset_minutes 这种)会直接撑爆表格边框,尤其在导出为PNG时更为明显。Na vicat默认不会自动换行,但提供了一个隐藏开关来解决这个问题。
- 在模型编辑器中,点击任意一张表,右键选择
Properties(属性),然后勾选Wrap column names(字段名换行)。需要注意的是,此设置仅对当前视图生效,且导出后效果不可逆。 - 如果换行后仍有内容溢出,可以尝试将模型页的字体临时更改为
Microsoft Sans Serif或DejaVu Sans这类基础字体,避免使用思源黑体等字形复杂的字体。修改后,重启模型页面再导出。 - 如果导出的PDF空白区域过多?这往往不是留白太多,而是字体未正确嵌入。尝试在导出PDF时,取消勾选
Embed fonts(嵌入字体)选项,转而依赖系统基础字体。
真正可控的分页:Group + 单独导出
对于包含数百张表的巨型ER图,想要实现“分页打印”的效果,唯一靠谱的方法就是人工介入,按逻辑模块进行划分。利用 Group(分组)功能将相关表聚类,然后逐个导出。Na vicat本身不支持按依赖层级自动切片,也不会响应外键拓扑关系来分页。
- 首先,选中所有相关的表(例如“用户中心”模块下的所有表),右键点击,选择
Create Group(创建分组)。然后双击分组标题栏,将其重命名为易于识别的名称,如auth_module。 - 点击该分组使其高亮(边框变为蓝色),此时再执行
File → Export → As Image,系统就只会导出该组内的内容,并且画布会自动适配。 - 为每个逻辑分组导出一张PNG图片,最后使用PDF工具(例如 pdfjam)进行合并。命令示例如下:
pdfjam --a4paper --scale 0.95 *.png -o er_pages.pdf。 - 在这个过程中,有一个绝对要避免的操作:千万别使用「Fit to Page」(适应页面)或「Shrink to fit」(缩放以适应)这类选项。它们会无差别地压缩所有连线粗细和字体大小,最终导致关系线重叠在一起,根本无法分辨。
说到底,Na vicat 的 ER 图导出机制是典型的「所见即所得」,而非「所思即所得」。它不会智能地理解“这个业务模块应该单独占据一页”,也无法根据外键的密度自动分页。所有对最终结果的可控性,都来自于你前期所做的准备工作:合理的 Group 划分、彻底的表解锁、谨慎的字体降级,以及正确的导出路径选择。这些步骤环环相扣,缺一不可。跳过任何一个,等待你的很可能就是一张打印出来只有半张表、三根飞线、以及一行字段挤满整页的“废纸”。
