EP.05砍掉重練筆記

砍掉重練 #2:為了「一模一樣」,換掉了整個 PDF 引擎

上一個坑,我砍掉的是一個角色。這一個坑,我砍掉的是一整套技術。

而起因,只是員工的一個小小願望:「印出來的東西,可以跟我們以前的 Word 一模一樣嗎?」

聽起來很簡單對吧?我也這樣以為。這個「一模一樣」,後來害我把整個 PDF 的做法砍掉重來了不只一次。然後包神幫我解決了;感恩包神,讚嘆包神。

一個看起來很無理、其實很有道理的要求

一開始我心裡是有點抗拒的:都已經數位化了,格式漂亮就好,幹嘛非得跟舊的 Word 長得一模一樣?

但我後來想通了,員工的理由其實很扎實:

  • 格式要統一。這些文件是要對外的,也要跟 GLP 的正式文件對得起來 —— 版面一亂,專業感就掉了。
  • 不想改習慣。大家看這個版面看了很多年,一眼就知道哪個欄位在哪、該看哪裡。你把版面換掉,等於逼所有人重新學一次「怎麼讀一份自己每天在讀的文件」。

這件事給我一個很重要的體會,後來變成我做系統的一條原則:當一件事無關對錯的時候,就讓員工待在他覺得舒適、又能把事情做好的位置。

版面長怎樣,本來就沒有絕對的對錯。既然沒有對錯,我何必為了「我覺得比較潮」的新版面,去打亂一群人已經很順的工作方式?系統是來服務人的,不是來刷存在感的。他們的舒適,就是我該努力還原的規格。

我天真地以為這很簡單

於是我開始做「HTML 轉 PDF」—— 把內容排成網頁,再轉成 PDF 印出來。

第一套做法,我用的是一個 Python 的排版引擎(它把網頁在背景「畫」成 PDF)。一開始感覺不錯,八成像了。然後,就卡在那剩下的兩成。而那兩成,全都是細節。

卡住我的,全是「細節」

魔鬼真的都在細節裡。讓我一個一個數給你聽,每一個都真實發生過:

  • 分頁,會把表格攔腰切成兩半。一張表格印到一半、剛好遇到換頁,下半截就被硬生生切到下一頁去,看起來就是破版。
  • 頁首、頁尾。每一頁上下那條固定的資訊,要在對的位置、每頁都出現、還不能擠到內容。
  • 中文字型。電腦裡沒有正確的中文字型快取,印出來不是變成方框、就是字跑掉。
  • 螢幕上看到的,跟印出來的不一樣。有些欄位在網頁上被自動補了預設值、印出來卻是空白(或反過來),兩邊對不上,使用者一眼就抓包。

每一個細節單獨看都是小事,但湊在一起,就是「看起來不像、不能用」。要我一個一個去磨,幫表格加上「不准從中間切開」的規則、把頁首頁尾釘死、把中文字型的快取預熱好……磨到後來我發現:我是在用一個排版引擎,硬追一個瀏覽器等級的版面。這條路,天花板就在那裡。

砍掉,換一個「沒有畫面的瀏覽器」來印

想通這件事,我做了第二次砍掉重練:換掉整個 PDF 引擎。

我不再用那個 Python 排版引擎,改成「開一個沒有畫面的瀏覽器(Chromium),讓它像你平常在 Chrome 按『列印成 PDF』一樣,把網頁印出來」。

員工要的「跟 Word 一樣」,本質上是一種給人看的、很講究的版面;而世界上把「給人看的網頁版面」做得最好的,就是瀏覽器本身。與其自己用排版引擎土法煉鋼,不如直接借用瀏覽器幾十年練出來的排版能力。

這中間我其實試過不只一種方式(怎麼把瀏覽器叫起來、怎麼讓它常駐才不會每次都慢半拍……)一路換、一路砍。但方向一旦對了,那些原本磨到快抓狂的細節,忽然就一個一個順了。

順帶一提,這也讓我後來想清楚一件事:線上「看」跟「列印」是兩回事。線上檢視,我用網頁直接呈現,方便審查委員邊看邊比對給意見;真正要印、要存檔的完稿,才走 PDF。兩條路,各做各最擅長的事。

我從這一張紙學到的三件事

  1. 「不想改習慣」是一個值得你為它砍掉重練的正當需求。不要因為使用者說不出高大上的技術理由,就覺得他的要求不重要。他要的「跟以前一樣」,背後是整個團隊的工作效率。
  2. 像素級的還原,沒有捷徑。當你發現自己在用錯的工具硬追一個目標,磨到天花板時,該換工具就換。砍掉一套你花了力氣的東西很痛,但硬撐一套追不上的方案,更痛。
  3. 借力,比逞強聰明。瀏覽器花了幾十年才把版面排到這麼好,我沒必要自己重造一次。認清「這件事別人已經做得很好」,然後站上去,也是一種能力。

一張紙要印得「跟以前一模一樣」,聽起來最不起眼的需求,逼我把整套技術砍掉重換,也讓我想清楚「系統到底是為誰服務的」。

到頭來,我還是那句話:無關對錯的時候,讓大家待在能把事情做好的舒適位置。這不只是體貼,這是讓系統真正被用起來的關鍵。

← 回到文章列表