(法老的歌有夠好聽😭)

前言

這其實也不是我的問題畢竟我也沒有在用 GoodNote 。雖然那咖軟體手感是真的很好,但是我才不會花錢在那個訂閱費用。但不得不說他的防盜版真的做的很好,唯一流出的盜版不但不是最新還只能用 jailbreak 開(平板沒辦法越、版本太新了)。

某個朋友他直屬傳給他的微積分筆記在 PDF 檔裡面螢光筆都會擋住後面的字發現動求助。而且沒有訂閱的 goodnote 匯入不了(他說的),我一個手癢就把檔案要過來了。

災情:

分析 / 查資料

拿到的檔案是 .goodnote 後綴,然後我猜他就是一種壓縮檔之類,如果是的話那這個可能有人作過正確 viewer 畢竟壓縮檔算好分析的

超好笑還真是


一開始的想法是直接看看有沒有 goodnote viewer

發現官方就有網頁版,但是他只接受 150 mb 以下的,所以沒辦法用。檔案比較小的可以試試看。


這個更是完全沒有用,因為他只支援非手寫的地方,那我就不需要用 goodnote 開了吧


最後找到這個,看簡介應該是有靠 AI Vibe 出來的,有點存疑但也沒東西可以用了就死馬當活馬醫

他有一個 live demo:

看起來可能是用 web assembly 處理轉換的功能,可能檔案太大了我丟進去就停止回應了😭

readme 寫說他有 cli,然後我覺得這種複雜的分析 grok 應該比較擅長我就 clone 下來的同時把 repo 丟給 grok
加上一些爬文,決定把檔案都先轉成 svg ,向量圖的特性說不定寫個 script 就可以把螢光筆直接刪掉之類。

1
2
3
git clone https://github.com/Kaih1825/parser-for-goodnotes.git 
cd parser-for-goodnotes
uv sync

(記得裝 uv )

1
uv run gn-export-svg <foo.goodnotes> -o <directory/> -a --pdf

成功的生出一卡車的 SVG 了,雖然沒有像是一開始一樣全部遮住,但是還是沒有辦法閱讀

輸出後的原檔

去除螢光筆

一開始 Grok 建議直接用 CLI 匯出 JSON 分析筆刷再處理,但可能檔案太大或者這個 vibe project 真的有問題?跑了好幾分鐘都沒有出來。
我想到 SVG 不是可以直接看出不同線條的顏色嗎,那我直接把一個有螢光筆的檔案丟給 AI 分析看看。

然後下面那個紅色是紅色原子筆的筆刷,所以我就要 AI 寫一個 script 能批次刪除資料夾下的 svg 特定筆刷。

注意填入自己的路徑
螢光筆處理:

1
2
3
4
mkdir -p clean_svg

for f in <directory>/*.svg; do filename=$(basename "$f")
sed '/fill="#ec534b"/d' "$f" > "clean_svg/$filename" echo "已處理: $filename" done

合併 svg(其實可以優化前面的檔名,不然檔名排序有點多餘)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
uv run python -c '
from pathlib import Path
from io import BytesIO
import re
import cairosvg
from pypdf import PdfWriter

def page_number(path: Path) -> int:
m = re.search(r"page_(\d+)_", path.name)
return int(m.group(1)) if m else 9999

writer = PdfWriter()
svgs = sorted(Path("<directory>").glob("*.svg"), key=page_number)
print(f"共 {len(svgs)} 頁,按正確頁碼排序後開始轉換...")

for i, svg in enumerate(svgs, 1):
pdf_bytes = cairosvg.svg2pdf(url=str(svg))
writer.append(BytesIO(pdf_bytes))
if i % 10 == 0 or i == len(svgs):
print(f"已完成 {i}/{len(svgs)} 頁 ({svg.name})")

output = "<filename>.pdf"
writer.write(output)
writer.close()
print(f"\n完成!已輸出:{output}")
'

喔可以看到基本上其實可以吃本來的 uv 環境然後寫 python 腳本就好,但我急著要讀期中考😭

結果

可以看到都沒了

原檔:

淡化螢光筆

svg 是向量圖顯然可以改透明度吧!

一開始只有改透明度然後就出現一堆透明框框:

發現是 stroke 這個屬性沒有動到

1
2
3
4
5
6
7
8
9
10
11
12
mkdir -p transparent_svg

for f in <directory>/*.svg; do
filename=$(basename "$f")
sed -E '
s/fill="#ec534b"( fill-opacity="[^"]*")?/fill="#ec534b" fill-opacity="0.15"/g;
s/stroke="#ec534b"[^ ]*//g;
s/stroke-opacity="[^"]*"//g;
s/stroke-width="[^"]*"//g
' "$f" > "transparent_svg/$filename"
echo "已處理: $filename"
done

結果可以說是全對:

然後一樣用前面的方法把 svg 合併成 PDF 就好了

後記

該去讀期中考了,但是我覺得他還有東西可以改進,例如我不確定這個有沒有機會直接搞出線上的編輯器、還有筆畫的平滑(雖然我朋友說只是那個學長字太醜),或者更有野心也可以自己寫一個。這讓我想到之前有人靠 AI 神力重寫了 Adobe 軟體 ( PhotoCraft: An open-source, photo editor written by scratch in pure Rust),看畫這個餅哪天實現或者意識到自己在重造輪子吧。