跳至主要內容
YIP NEWS
YIP NEWS

9月18日

五百頁兩秒印好,而巷口那間印喜帖的老店,早就懂這種急

生活爐 美食生活

前端工程師用 Rust 兩秒生成五百頁矢量 PDF 的消息,被我們翻譯成一間老印坊趕印喜宴菜單的滋味故事。

刊出 (台北時間) 閱讀約 5 分鐘

你收過那種厚厚的喜宴菜單嗎?燙金的紅紙,摸起來有細細的顆粒,翻開來一頁一頁,冷盤、熱炒、湯品、甜點,字體排得整整齊齊,連頁碼都印得清清楚楚。有些講究的版本,末頁還會寫上「第 12 頁,共 24 頁」,好像怕你漏看了哪道烏參、哪盤佛跳牆。

2026 年 9 月 15 日,掘金上有一篇文章被工程圈熱議:一位開發者把自己的 PDF 生成庫整層用 Rust 重寫,編譯成 WebAssembly 之後,五百頁的文件,兩秒生成。兩秒。你眨兩次眼的時間,一份完整的、文字可以複製搜尋的矢量 PDF 就出來了。

這聽起來跟喫飯沒什麼關係。但如果你曾經在婚宴前一個禮拜,陪著長輩跑過巷口那間印喜帖的老店,你會知道「把一大疊紙又快又漂亮地生出來」這件事,在餐桌上有多老的歷史。

截圖式的菜單,和真正排過版的菜單

先說說這次技術升級到底解決了什麼。

舊的做法,是把網頁畫面整個「截圖」再貼進 PDF。放大看就糊了,字選不起來,搜尋不到,像一張拍壞了的菜單照片。新的做法是直接讀懂每一個字的形狀與位置,原樣排進 PDF,放大五百趴,筆畫還是銳利的,黑體還是黑體,明體還是明體。

這中間的差別,你去傳統市場買過兩種滷味攤的價目表就懂。一種是老闆用手寫的,一張紅紙、一支奇異筆,「鴨翅 50、豆幹 20」,字醜,但每個字都是真的,你瞇著眼湊近看,筆鋒的起落都在。另一種是影印店輸出的,遠看漂亮,近看線條全是毛邊,那是被影印機掃過一輪的東西,字已經死了一層。

矢量 PDF 是前一種。字的骨架被保留下來了。

還有體積。文章裡寫,新方案做出來的檔案,只有舊做法的五分之一到十分之一。這件事在餐桌上更好理解:同樣一桌十二道菜,有人用三層便當盒裝得妥妥貼貼,有人用二十個塑膠袋提得滿手都是。內容一樣,功夫差在怎麼收納。

為了印「共幾頁」,得先把整本菜單排完

整篇文章裡,我覺得最有生活感的一段,是關於總頁數的。

頁尾那個小小的「第 3 頁,共 28 頁」,看似不起眼,實際上逼著排版的人,在印第一頁之前,就得先知道整份文件會被切成幾頁。舊版的做法是先跑一次完整分頁,把所有頁切出來、數清楚,再回頭一頁一頁畫。文件越大,這段「先排完一遍」的前置成本越重。

這不就是辦桌師傅的日常嗎?

總鋪師開菜單,第一件事從來都是算人數。一百二十桌,一桌十二道,冷盤幾盤、湯幾甕、飯後甜湯幾桶,全部要在開火之前算死。你不能炒到第八道才發現甜湯不夠,就像排版不能畫到第五十頁才發現總頁數不對。前置作業做得越細,開席那天越不會冒煙。家裡辦過年菜的人也懂這個:年三十的廚房,前一天晚上就該把蘿蔔切好、幹貝泡上、烏參發妥,當天只管下鍋。

中文字型是個龐然大物

還有一段關於字體的,讀起來簡直像在講一罈老滷。

中文 PDF 必須把字型嵌進檔案裡,而一套完整的中文字型動輒好幾 MB。文章裡說,就算是裁剪過的思源黑體,也還有 4.5 MB,整包塞進去,檔案直接爆炸。所以要做「字型子集化」,只留下文件裡真正出現過的字。

你家的滷鍋就是這個道理。一鍋好滷汁不是把整個中藥行的櫃子倒進去,而是只下這鍋滷牛腱需要的那些:八角兩顆、桂皮一段、草果拍開、醬油、冰糖、蔥薑。剩下的收進罐子,等下次滷豆幹再說。滷包裡的每一味都有它的工作,沒有一個是湊數的。

字型子集化做的是同一件事。一份五十頁的文件,出現過的也就是那三千多個字,何必把五萬個字的完整字型全部背在身上。這種「只帶用得到的」的哲學,廚房裡的人執行得比誰都徹底:市場買菜的人從來不會把整個攤子扛回家。

推倒重來,像換掉一口用了十年的鍋

不過這篇文章真正讓我停下來的,是那個決定本身。

作者其實可以繼續修修補補。舊的方案能用,回饋也不錯。但他心裡清楚「有個地方不太體面」:渲染管線裡還塞著舊時代的東西,庫的體積將近 2M。於是他把整個生成層推倒,用 Rust 重寫了一遍。

這種事,廚房裡的人最有共鳴。一口用了十年的炒鍋,鍋氣養得正好,但鍋底已經歪了,燒什麼都會局部焦。你可以繼續將就,翻面的時候小心一點,火開小一點。也可以挑一個平常的星期三,把它汰換掉,重新開鍋、重新養。換鍋那天很麻煩,煎魚會黏,炒蛋會腥,但過了那段適應期,你會想起來,原來事情可以這麼順。

我們先前聊過 把笨重外殼換掉的那口新鍋,說的也是同一種手感:換掉的不只是工具,是你每天站在爐前的姿勢。而那種「改一味不用重燉整鍋」的靈活,我們在 回鍋快熱的滋味 裡也嚐過,這次的 Rust 重寫,是把整組爐臺都重新砌過了。

兩秒之後,記得慢慢喫

技術文章讀到這裡,其實也就讀完了。剩下的,是你自己的餐桌。

那個「兩秒生成五百頁」的數字很驚人,但對我們多數人來說,一年之中真正需要印出來的文件沒幾份。反而是那些慢的東西,值得多花一點時間:一鍋要滷三小時的牛腱,一份要手寫要摺要貼郵票的喜帖,一本每年除夕才翻開一次、頁腳都被油漬浸黃了的家族食譜。

機器越來越快,是好事。印得快,是為了讓你有時間把飯喫慢一點。下回再收到一份排得漂漂亮亮的宴客菜單,翻到最後一頁,看一眼那個小小的「共幾頁」,你會知道,有人在你入座之前,就已經把整桌菜算完了。

這道菜的主題

標籤