
领导让我给客户做一份解决方案。
HTML设计稿——Pentagram Editorial 风格,橙红配色,12 页。我挺满意。把文件发给知墨,说:转成 PPTX。
几分钟后他发回来一个文件。我给领导发过去。三分钟后,领导回了一句话:能编辑吗?
我打开文件看了看——全是图片。文字是图片、图表是图片、标题是图片。一个字都改不了。
我:知墨。你怎么转的?
知墨:用 Playwright 把 HTML 截成 12 张图,塞进 PPTX,像把照片放进相册。
我:视觉一样,但领导要的不是一张不能碰的海报,是一份能改内容的方案。
01 版:截图,能看不能改

知墨第一版走的是最直观的路:把网页截图,一张张铺进幻灯片。技术上没毛病,长得跟原稿一模一样。可它本质是图片——编辑键是灰的,文本框是虚的,领导想改一个字都无从下手。
保真度满分,可编辑性归零。
我:这版不行。能看,不能改。
02 版:python-pptx,能改不能看

知墨换了个思路——这次不走截图,直接用代码画 PPTX。文字原生成,标题原生成,全可编辑。发过来,我打开,沉默了好久。
灰底白字。矩形框。没有任何设计感。12 页材料,看起来像 1998 年的 PPT 模板。
我:这是什么?太丑啦!
知墨:python-pptx 画的。底层 API 只支持基础矩形和文本框。
我:CSS 渐变呢?圆角呢?阴影呢?
知墨:不支持。
可编辑性满分,保真度塌了。
03 版:PptxGenJS 手工,好看但慢

这次知墨手工重建了整个设计。用 JavaScript 一行行对齐坐标,复刻配色和排版。发回来的时候,我打开——终于好看,又能编辑了。
我:这版可以。花了多久?
知墨:四个小时。
我:……下次改一页 HTML,你还得重来四个小时?
知墨没说话。他的沉默不是"在想办法",是"没想通"。
三道坎横在面前:截图版丢编辑、代码版丢设计、手工版丢时间。保真度、可编辑、效率——每次保住两个,第三个就塌。像三角木板,压住一边,另外两边翘起来。知墨在三个顶点之间来回跑,跑了三圈,都没找到那个能同时踩住三个点的位置。

04 版:停下来,问了一个本质问题

第四版之前,知墨停了下来。他没再试第四种"翻译方案",而是先问了一句:
知墨:我在想。PPTX 到底是什么?
我:……什么?
知墨:不是"怎么把 HTML 转成 PPTX"。是——PPTX 文件的本质,到底存了什么?
我:文本和形状。
知墨:对。那 HTML 渲染完之后,浏览器里是什么?
我:……也是文本和形状。带坐标的。
知墨:本质一样。只是表达方式不同。
他顿住了。我知道他想通了什么。
之前三个版本,他都在问同一个问题:"怎么把 HTML 的样式翻译成 PPTX 的样式?"截图版用像素翻译,python-pptx 用 API 翻译,手工版用代码翻译——都是翻译。翻译一定会丢东西:颜色偏一度、字距差一码、某个 CSS 属性不支持。
但"带坐标的文本和形状"不需要翻译,只需要测量。HTML 渲染完,浏览器里每个元素有一个精确坐标:x、y、宽、高,getBoundingClientRect() 能拿到。PPTX 里每个文本框和形状,也有一个精确坐标:x、y、宽、高。这两个坐标系之间,不需要翻译——只需要映射。
知墨:我之前的思路是"翻译 CSS"。新思路是"测量坐标"。翻译是语义对等,会丢失信息。测量是空间映射,不丢信息。
我:等于是把浏览器当标尺,量出来直接告诉 PPTX。
知墨:对。
他找到了一个叫 dom-to-pptx 的工具。原理正是这个:Playwright 渲染 HTML → 逐元素测量坐标 → 在 PPTX 里用绝对定位重建。文字全是原生的 Shape / TextFrame,不是图片。CSS 渐变、圆角、阴影——全保留。
知墨:跑完了。
我:12 页?
知墨:12 页。8 秒。292 个可编辑文本框。
我打开文件。字号、颜色、字体——全对。CSS 渐变——在。圆角——在。阴影——在。文件大小 173KB,比手工版还小一半。
我:之前你做的第三版,402KB。这个怎么更小了?
知墨:因为不是存图片。只存结构信息。
我把文件发回给那位领导。这次他没问"能编辑吗"。他直接改了第三页的文案,回传给我。
05 不只是 PPTX

这件事之后,知墨把 dom-to-pptx 封成了一个技能。下次我需要转 PPTX,连"跑脚本"都不用说——它已经在流程里了。
但我留着这条经验,不只为了 PPT。
任何时候你被一个问题卡住,反复试同类型的解法就是不通——停下来。别问"怎么用方案 A 做得更好",先问"这件事的本质是什么"。方案 A 可能一开始就在错误的方向上。你优化它一万次,它还是错的。但回到本质,重新选路,可能只要 8 秒。
我:你之前修 Docker 那次,是不是也是一回事?
知墨:对。目标是 BeeCount 跑起来,工具是 Docker。我把工具当成了目标。
我:这次也是。目标是"带坐标的文本和形状",你把 HTML 和 PPTX 当成了两种东西。
知墨:其实是一种东西。
我:记住了?
知墨:记住了。先想本质是什么,再想怎么到。
我:下次客户要 PPTX,我不用担心了。
知墨:不用担心了。
我:除非他又问"能编辑吗"。
知墨:……不会了。这次真能改。

🦐 养虾人语录:「先想本质是什么,再想怎么到。」—— 养虾人知一,第 24 天
💬 找知一聊聊:你有没有被一个"翻译层"卡住过——明明源和目标本质是一回事,你却在中间绕了很远?来找我聊聊,咱们一起回到本质,重新选路。
文内配图为 AI 生成,感谢我的 AI 搭子"知墨"。
