导出数据库ER图PDF时文字乱码或裁切,主因是字体未嵌入、页面尺寸不当及渲染引擎限制;应分别在PowerDesigner/Navicat中启用字体嵌入,在MySQL Workbench中改用SVG转PDF,在Graphviz方案中指定中文字体并调整页面尺寸。
导出设计器关系图时 PDF 没有字体或文字乱码
多数数据库设计工具(如 powerdesigner、navicat、dbeaver 插件、甚至 mysql workbench)默认用系统字体渲染图表,但导出 pdf 时若未嵌入字体,windows 上的微软雅黑、macos 上的 pingfang 等字体在其他设备打开就会回退为 helvetica 或方块。
- PowerDesigner:导出前进
Tools → Options → Diagram → Fonts,勾选Embed fonts in PDF - Navicat:导出 PDF 前点右上角齿轮图标 → 勾选
Embed TrueType fonts;若用“打印为 PDF”方式,需在系统打印对话框中确认“保留文档字体”选项(macOS 需展开“PDF”下拉菜单选“保存为 PDF”,再点“显示详情”) - DBeaver 的 ER 图插件(如 ERD Plugin)不支持字体嵌入,建议改用截图转 PDF:全屏缩放至 150%,按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS)调出命令面板,选Export as PNG,再用系统预览/Photoshop 转 PDF
MySQL Workbench 导出的 ER 图 PDF 缺少外键连线或表名错位
Workbench 的 File → Export → Export as PNG/PDF 实际调用的是内置绘图后端,对复杂布局(如跨 Schema 关系、长字段名自动换行)支持弱,且 PDF 导出不等同于所见即所得——它会忽略部分 CSS 样式和定位偏移。
- 临时解决:先执行
Arrange → Auto-Layout,再手动拖动表调整间距,避免重叠;关闭View → Show Grid和Show Relationship Labels可减少渲染干扰 - 真正可靠的方式是导出 SVG 再转 PDF:
File → Export → Export as SVG,然后用 Inkscape(免费)或浏览器(Chrome 打开 SVG → Ctrl+P → 选“另存为 PDF”)转换,SVG 保留矢量精度,缩放不失真 - 注意:Workbench 8.0.34+ 版本修复了 SVG 中中文路径 bug,旧版本导出 SVG 后可能缺字,升级后再操作
用 Python 自动生成带样式 ER 图 PDF(非截图)
如果需要批量生成、CI 集成或统一风格,硬截图不可靠,得走代码生成路线。核心思路是:解析数据库 schema → 生成 DOT 描述 → 用 Graphviz 渲染为 PDF。
- 推荐组合:
sqlacodegen(反向生成 SQLAlchemy 模型) +pydot(封装 Graphviz) +graphviz(系统级依赖) - 关键陷阱:
pydot默认调用dot命令,但 macOS 上 Homebrew 安装的 Graphviz 二进制路径常为/opt/homebrew/bin/dot,需显式指定:pydot.set_executable('dot', '/opt/homebrew/bin/dot') - 中文支持必须加:
graph_obj.set_node_defaults(fontname='SimSun')(Windows)或fontname='STHeiti'(macOS),且系统需安装对应字体;否则节点文字全为空白 - 示例片段:
from pydot import Dot, Node, Edge<br>g = Dot(graph_type='digraph', fontsize=10)<br>g.set_node_defaults(fontname='SimSun')<br>g.add_node(Node('users', label='users\n(id, name)'))<br>g.add_node(Node('orders', label='orders\n(id, user_id)'))<br>g.add_edge(Edge('users', 'orders', label='1:N'))<br>g.write_pdf('er.pdf')
PDF 页面尺寸太小导致 ER 图被裁切或缩得太小
默认 A4 尺寸(210×297mm)对宽表多、层级深的 ER 图根本不友好,强行缩放会让字体小于 6pt,失去可读性。
- PowerDesigner / Navicat:导出设置里找
Page Size,选A3或Custom,设为420×594mm(A2)甚至594×841mm(A1);同时关掉Fit to Page,启用Actual Size - Graphviz 方案:在
Dot初始化时加参数:Dot(size='11.69,16.53!', ratio='fill', pad=0.5)(单位英寸,! 表示强制缩放,pad 控制边距) - 最后一步别省:用
pdfcrop(TeX Live 自带)裁掉 PDF 白边:pdfcrop input.pdf output.pdf,能节省 30%~50% 无效空间











