RexCode logo

Lode 開發筆記:內建截圖標註 + PDF 內容比對

Lode 這週上了兩個看起來不相干、但都來自同一個動機的功能:不想為了一件小事離開手上的檔案工作台

一個是 Viewer 裡的截圖標註(Annotate)模式——打開一張 PNG,就能加箭頭、框重點、打碼遮住敏感資訊、裁切、縮放、存檔。另一個是 PDF 內容比對——把兩份 PDF 抽成文字,做 side-by-side diff,看清楚兩版之間「文字內容」到底改了什麼。

兩個都是「dogfooding」逼出來的:我自己每天在 Lode 裡看檔、比對、準備 App Store 上架素材,結果每次要標一張截圖就得跳去 Preview 或 Skitch,要比兩份講義 PDF 又得先各自轉成文字。既然 Lode 已經是我開最久的那個視窗,那就把這兩件事收進來。


功能一:Viewer 裡的截圖標註模式

Lode 原本就能當 image viewer 看圖,這次在圖片檢視裡加了一顆鉛筆按鈕,按下去就從「看」切換到「改」,進入一個標註畫布(元件檔在 annotate/,只在需要時才 lazy-load 進來,不拖累啟動)。

能做的事

技術上它是個混合渲染:向量標註走 SVG、克隆/修補這種retouch 走底下一層 raster canvas、文字用真正的 <textarea> 疊上去,存檔時才把三層壓平烘成一張點陣圖。重點是流程:截圖 → 在 Lode 裡打開 → 標註/打碼 → 存檔,全程不換 App。


功能二:PDF 內容比對(抽文字 diff)

第二個功能長在 File Diff 模式裡。以前 Lode 的 File Compare 是給文字檔/程式碼用的 side-by-side diff;現在你可以直接丟兩份 PDF 進去,上方會出現 「PDF text diff (extracted)」 標籤和 Text / Visual 切換。

Lode File Diff 模式比對兩份多益 PDF:左邊紅色、右邊綠色逐行差異,並保留 ## Page 頁碼標記
在 File Diff 裡把兩份多益講義 PDF 抽成文字比對——左紅右綠逐行差異,保留 ## Page 頁碼標記,還能搜尋與複製。

Text 模式:Lode 用 macOS 內建的 PDFKit 把每份 PDF 的內嵌文字層抽成純文字,再丟進跟比程式碼同一套的 Monaco diff ——左邊紅色是被刪掉/不同的,右邊綠色是新增的。抽出來的文字會保留 ## Page 1 這種頁面分隔標記(由 PDFKit 逐頁走出來的),讓你知道差異落在第幾頁。因為走的是文字層、不是 OCR,所以純掃描的圖片型 PDF 抽不到字——這是個要知道的限制。

Visual 模式:把每頁 render 成圖片並排,比的是排版呈現;還有一顆 Diff overlay 把兩頁用 difference 混色疊起來,版面挪動一眼就看得到。這條 render 只在你第一次切到 Visual 時才啟動。

為什麼預設是「抽文字」而不是「比圖」?因為多數時候你想知道的是內容改了什麼,不是像素差幾格。合約改了哪一句、報價單改了哪個數字、講義換了哪個例句——這些都是文字層級的問題,抽成文字後不但看得清楚,還能複製、搜尋。上圖那個例子就是很真實的用途:把兩份多益講義 PDF 丟進去,一眼看出「詞類題」那份和「非白領情境核心短語」那份在內容上差在哪。

搭配既有的 「Review clipboard…」,你也可以複製一段文字,直接跟一份 PDF 抽出來的內容比對,不用先另存檔案。(同一條管線也吃 Word:.doc/.docx 會轉出文字與 PDF,甚至能 docx 對 pdf 混比。)


兩個開發筆記式的小取捨

標註分兩層:向量可編輯,retouch 直接烘。 箭頭、文字、方框做成 SVG 物件,所以能事後選取、搬位置、乾淨地 Undo;但克隆圖章、模糊、馬賽克本質是像素操作,直接畫在底下的 raster canvas 上。一個容易被忽略的細節:模糊是帶著 padding 去 render 的——不然選取邊緣會透出原本清晰的像素,對一個拿來打碼的工具來說等於漏餡。魔術棒那邊也做了整張圖 RGBA buffer 的快取,不然每點一下就要重新點陣化上百 MB。

PDF 比對站在 macOS PDFKit 上,預設走文字。 沒有內含任何第三方 PDF 引擎——抽文字、數頁數、render 頁面全部呼叫系統的 PDFKit(所以是 macOS-only,也因此 sandbox 乾淨、可上 App Store)。而「比 PDF」預設走抽文字、而不是 render 兩頁逐像素比,是因為後者對「內容改了什麼」幾乎沒用:換個字型、差一個 kerning 就整片紅。先抽文字、保留頁碼、走 Monaco diff,才對得上真正的問題;需要看版面時再切 Visual。預設對準最常見的需求,是這個功能一開始就定的方向。


兩個功能的共同精神都一樣:把「為了一件小事而跳出去」的次數降到最低。 Lode 的目標一直是一個原生、可買斷的 macOS 檔案工作台——看檔、比對、搜尋、Git,現在再加上「順手標張截圖、順手比份 PDF」。

了解 Lode · 免費下載

🔨
本文介紹的工具:Lode

原生 macOS 工作台,整合 File Diff、Folder Diff、Binary Diff、全文搜尋、Git Viewer、影像檢視與標註,一個 App 搞定,且可買斷。