小工具提案:PDF 整理與外洩檢查
- Dominant language
- JavaScript
- Stars
- 47
- Forks
- 7
- Avg merge
- 2h 42m
- Merged PRs (30d)
- 291
Description
需求依據見 #512。六組角色調查裡有四組把 PDF 處理列在前面,是收斂最強的一項。
## 一頁兩件事
### 整理
合併、分割、抽頁、刪頁、旋轉。這是讀者實際會回來用的部分。
現行的免費線上服務要把整份檔案上傳。以 iLovePDF 為例,隱私政策寫 `will delete the files of your Content within TWO (2) HOURS of being processed`,也明寫不拿內容訓練 AI。政策寫得乾淨,但兩小時內完整檔案確實在對方伺服器上,而使用者多半沒讀過那份政策。
### 外洩檢查
把 PDF 的文字層整份攤開。你以為遮掉的名字如果出現在裡面,遮蔽就是無效的。順便列出附件、註解與表單欄位。
這是跟一般線上 PDF 服務的差別,它給的是別人不給的東西。黑框畫在視覺層而文字層原封不動是最經典的外洩方式,activePDF 執行長談美國司法部報告時說 `Using Acrobat, I'm actually able to move the black boxes around. The text is still there.`([Cornell CS 存檔](https://www.cs.cornell.edu/info/people/gries/howbushoperates/justicecensoring.html))。
站上 `redact.js` 已經把圖片那一側做對了,會重新編碼並逐像素確認純黑,PDF 這一側目前完全沒有覆蓋。
## 為什麼落在這個站
`stripmeta.js` 已經在動態載入 pdf-lib,`utils/strip-metadata.md` 已經有一整節在解釋 PDF 的交叉索引表與物件壓縮。領域知識與 vendor 檔都現成。
分組落在「送出去之前」,那一組目前只有兩支(檔案 metadata 清除器、截圖遮蔽),是五組裡最薄的。
## 相依與分期
**第一期(整理)零新相依。** pdf-lib 已經在 `utils/vendor/pdf-lib.min.js`(317 KB),合併、分割、抽頁、旋轉都做得到,沿用 `stripmeta.js` 的動態載入寫法。
**第二期(檢查)需要 pdf.js。** 文字抽取 pdf-lib 做不到。`pdfjs-dist` 的 `pdf.min.mjs` 385 KB 加 `pdf.worker.min.mjs` 1015 KB,合計約 1.4 MB,是目前最大那份 vendor 檔的四倍多。全站離線總量 41.6 MB 吃得下,但這是唯一的實質成本。
先出第一期看反應,再決定要不要付第二期的 1.4 MB。
## 互動成本預估
依 anoni.net 小工具的慣例,開工前先估輸入點:
| 動作 | 輸入點 |
|---|---|
| 選檔案 | 1 |
| 選要做哪一種(合併 / 分割 / 抽頁 / 旋轉) | 1 |
| 選頁面(縮圖點選,不是輸入框) | 視需求 |
| 下載 | 1 |
常駐輸入點三個,選頁走縮圖點選。壓縮暫時不做,那需要重新編碼影像,複雜度跟前四項不同級。
## 待辦
- [ ] 第一期:`docs/zh-TW/js/pdfkit.js`(暫名)與 `docs/zh-TW/utils/pdf.md`
- [ ] 三語系頁面與 `js/` 的 symlink(en 與 zh-CN 逐檔指向 zh-TW)
- [ ] nav 收進「送出去之前」,索引頁補卡片(`tools/test_utils_index_order.mjs` 會擋)
- [ ] `tools/test_pdfkit.mjs`:頁面操作的正確性,以及原始碼沒有任何送出或留存資料的手段
- [ ] `offline_assets` 列入 pdf-lib,離線副本要能處理 PDF
- [ ] 第二期:pdf.js 的 vendor 與雜湊紀錄,`utils/vendor/README.md` 補上
Contributor guide
Research direction
Start by reading stripmeta.js for the existing dynamic pdf-lib loading pattern and utils/strip-metadata.md for the current PDF explanation. The first phase is docs/zh-TW/js/pdfkit.js and docs/zh-TW/utils/pdf.md, plus the three-language symlinks, nav/index card, offline_assets, and tools/test_pdfkit.mjs. Done means merge/split/extract/rotate work offline with pdf-lib and the tests confirm page operations and no upload or retention path.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- frontend, security, tooling
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100