前言
你是否遇到过这样的诡异场景:在 Draw.io 中精心绘制了一张 10000pt × 10000pt 的图纸,导出为 PDF 后,用不同的软件打开,尺寸竟然五花八门?WPS 显示 7200pt,Edge 显示 3388mm,而 Chrome 又变成了 2541mm……
这不是你的文件损坏了,也不是阅读器出了 Bug。这背后隐藏着一个 Web 图形工具与 PDF 标准之间长达数年的“单位战争”。今天,我们就用极客的方式,彻底扒开这个坑爹的“尺寸灵异事件”。
一、诡异的案发现场
为了揪出幕后真凶,我们先在 Draw.io 中新建一个绝对正方形进行压力测试,参数如下:
- 图形尺寸:10000 pt × 10000 pt
- 边框宽度:0 pt
- 导出缩放:100%
按照常理,这是一个绝对物理尺寸固定的 PDF。但当我将它导入到各大主流工具中查看文档属性时,结果让人大跌眼镜:
| Draw.io (源文件) | 10000 pt × 10000 pt | 10000 pt | 100% (基准) |
| WPS Office | 254.068 cm × 254.068 cm | ≈ 7200 pt | 缩水至 72% |
| Google Chrome / 夸克 | 2541 mm × 2541 mm | ≈ 7202.8 pt | 缩水至 ≈ 72% |
| VSCode (PDF预览) | 2540.7 mm × 2540.7 mm | ≈ 7201.9 pt | 缩水至 ≈ 72% |
| Microsoft Edge | 3388 mm × 3388 mm | ≈ 9603.78 pt | 缩水至 96% |
💡 核心矛盾:WPS、Chrome、VSCode 三款工具的读数高度一致(约 72%),而 Edge 独树一帜地显示了约 96%。没有任何一款工具显示了原始的 10000pt! 到底是解析引擎的锅,还是操作系统的锅?
二、寻根溯源:国际标准 vs 内部设定
要破解这个案子,我们必须先复习一下印刷界与排版界的绝对物理单位常识:
- 1 inch (英寸) = 25.4 mm (物理世界定理)
- 1 inch = 72 pt (磅) (PDF / PostScript 国际通用排版标准)
如果严格按照这个标准,用户在 Draw.io 里画的 10000 pt,真实物理宽度应该长达 10000÷72≈138.89 英寸10000 \\div 72 \\approx 138.89 \\text{ 英寸}10000÷72≈138.89 英寸(约 3527.78 mm)。但各大软件统统没有读出这个数字!
问题到底出在哪?
三、真凶浮出水面:Draw.io 内部的“秘密换算”
经过反复测试,我回到了案发源头 Draw.io,做了一个极其简单的操作:切换画布单位。
就在同一个图形上,当我把全局单位从 pt 切换为 英寸 和 毫米 时,Draw.io 的属性面板自己吐出了致命的证据:
- 设为 pt → 10000 pt
- 设为 inch → 100.000"
- 设为 mm → 2540.0 mm
让我们验证一下这三组数字之间的换算关系:
- 100 inch×25.4=2540 mm100 \\text{ inch} \\times 25.4 = 2540 \\text{ mm}100 inch×25.4=2540 mm (✅ 精确值,完全符合国际物理标准)
- 10000 pt÷100 inch=100 pt/inch10000 \\text{ pt} \\div 100 \\text{ inch} = \\mathbf{100 \\text{ pt/inch}}10000 pt÷100 inch=100 pt/inch
破案了! 在 Draw.io 的底层逻辑里,它根本不承认 1 inch = 72 pt 的国际标准。为了自己内部计算方便,它强行规定了:1 inch = 100 pt!
❓ 为什么是 100?
这其实是 Draw.io 作为 Web 应用的历史设计决策:
四、真相大白:为什么是 72% 和 96%?
现在,我们将 Draw.io 这个“非标”的底牌代入到各大软件的解析逻辑中,一切奇葩的数据瞬间豁然开朗。
当你点击导出 PDF 时,Draw.io 并没有傻到把“10000”这个数值直接写进 PDF 坐标流里(否则标准阅读器会把它当成 138 英寸的巨图)。它做了一次物理尺寸保全转换:它知道用户的真实意图是画一个 100 英寸 的图形,于是它把 100 英寸作为真实物理尺寸写入了 PDF。
1. 为什么 WPS / Chrome / VSCode 显示缩放了 72%?
这些守规矩的软件严格按照 PDF 标准(1 inch = 72 pt)解读文件。当它们读到“100 英寸”的物理画布时,在 PDF 坐标系中表达需要:
100 inch×72 pt/inch=7200 pt100 \\text{ inch} \\times 72 \\text{ pt/inch} = 7200 \\text{ pt}100 inch×72 pt/inch=7200 pt
所以,PDF 文件里实际存储的数值就是 7200。
- 换算成毫米:100 inch×25.4=2540 mm100 \\text{ inch} \\times 25.4 = 2540 \\text{ mm}100 inch×25.4=2540 mm(也就是你看到的 254 cm)。
7200 pt / 10000 pt = 72%。 > ⚠️ 认知翻转:对于以 mm/inch 为参照的用户来说,WPS们显示的 2540mm 才是正确的物理尺寸。“72% 缩水”仅在你把 Draw.io 界面上的 “pt” 当作标准 pt 时才成立。本质上,是 Draw.io 的 “pt” 标签误导了你,而非 PDF 缩小了图形。
2. 为什么 Edge 浏览器显示缩放了 96% (3388 mm)?
Edge 浏览器的 PDF 渲染引擎底层虽然和 Chrome 一样,但它的文档属性面板触发了另一个 Web 标准——CSS 屏幕像素标准。
根据 W3C 规范定义,在屏幕显示上:
CSS 标准: 1 inch=96 px\\text{CSS 标准: } 1 \\text{ inch} = 96 \\text{ px}CSS 标准: 1 inch=96 px
当 Edge 的属性面板读取到 PDF 中 100 英寸的物理尺寸时,它没有用印刷标准的 72pt 去还原,而是下意识地将其转换为了 CSS 像素:
100 inch×96 px/inch=9600 px100 \\text{ inch} \\times 96 \\text{ px/inch} = 9600 \\text{ px}100 inch×96 px/inch=9600 px
然后,Edge 的面板把这个 9600px 按 1px ≈ 1pt 的近似关系直接显示为了 ~9603.78pt,或者反推成了 3388mm。
如果我们把 Edge 显示的 9600px 还原回标准 pt:
9600 px×7296=7200 pt9600 \\text{ px} \\times \\frac{72}{96} = 7200 \\text{ pt}9600 px×9672=7200 pt
底层数据惊人的一致! Edge 并没有恶搞你的文件,它只是换了一套单位体系(CSS px)来展示同一个物理真相:100 inch = 2540 mm。
五、全景对照表
为了让大家闭眼都能看懂,我把这场“乱斗”整理成了一张表格:
| 显示数值 | 10000 | 7200 | 7200 pt / 2540 mm | ~9603 pt / 3388 mm |
| 单位含义 | 1/100 inch (伪pt) | 1/72 inch (真pt) | 1/72 inch (真pt) | CSS px 近似值 |
| 物理尺寸 | 2540 mm | 2540 mm | ✅ 2540 mm | ✅ 2540 mm (底层正确) |
| 用户感知 | “我画了10000pt” | — | “怎么只有7200pt?” | “怎么变成9603pt了?” |
| 偏差来源 | 自定义十进制单位 | 物理尺寸保全修正 | 伪pt → 真pt (×0.72\\times 0.72×0.72) | 真pt → CSS px (×9672\\times \\frac{96}{72}×7296) |
💡 一句话总结:72% 是“伪 pt → 真 pt”的单位修正;96% 是“真 pt → CSS px”的二次转译。
六、避坑指南
如果你在日常工作中,需要使用 Draw.io 导出高精度、用于严格尺寸协作的 PDF,请收好以下策略:
在建立画布的第一时间,就把单位修改为绝对不变的物理单位:毫米 (mm) 或 厘米 (cm)。因为 Draw.io 对毫米到英寸的转换(25.4)是绝对精确的,只要你不用 pt 思考,导出的物理尺寸走到天涯海角都不会变形。
Draw.io 中应设置的伪 pt=目标标准 pt÷0.72\\text{Draw.io 中应设置的伪 pt} = \\text{目标标准 pt} \\div 0.72Draw.io 中应设置的伪 pt=目标标准 pt÷0.72
例如:想要在 Word 或标准 PDF 中显示为 12pt 的字体 →\\rightarrow→ 在 Draw.io 中需要手动设为 12÷0.72≈16.6712 \\div 0.72 \\approx 16.6712÷0.72≈16.67。
3. 关于跨工具协作的特别说明(防绕晕公式)
- Word / InDesign / LaTeX 中的 pt →\\rightarrow→ 真实物理值 (1/72 inch1/72 \\text{ inch}1/72 inch) ✅
- CSS 屏幕样式中的 pt →\\rightarrow→ 相对参考值 (9672 px\\frac{96}{72} \\text{ px}7296 px) ⚠️
- Draw.io 中的 pt →\\rightarrow→ 逻辑进位单位 (1/100 inch1/100 \\text{ inch}1/100 inch) ❌
下次在 Draw.io 中看到 “pt”,请在心中默念:这是逻辑点,不是印刷点!




