公司沒有購買 Adobe Acrobat,難道員工就只能把合約、廠商表單、員工資料丟到「免費的線上 PDF 工具」,或是下載來源與背景不明的免費軟體來處理嗎?
那些網站確實方便,點兩下就好了,但有幾件事不能不問:你的檔案到底在對方伺服器上留多久?隱私政策會不會允許二次利用或是拿去做 AI 訓練?個資法、GDPR 真的出事的時候誰負責?
所以我把自己這幾年常用的 PDF 與 Office 處理工具,整理成一套可以裝在自己機房、完全開源的整合平台:jt-doc-tools(Jason Tools 文件工具箱),採 Apache 2.0 授權釋出。
目前版本為 v1.14.5,內含 41 個工具。原本只是為了解決自己的使用情境而做,後來有不少客戶接用在公司環境裡,能幫他們處理文件又減少外洩情境,我覺得相當開心。
為什麼要自架
線上 PDF 工具的核心問題只有一件事:你的檔案上傳到別人的伺服器了。合約、人事、財務、客戶名單、身分證、銀行帳號,這些東西一旦離開自己的網路,後面發生什麼事就不是你能控制的了。
我整理了幾個實際會踩到的隱憂:
- 無法確認何時真的被刪除
檔案上傳到第三方伺服器,保留多久、備份留幾份,使用者無從查證
- 伺服器端如何處理不透明
多數線上工具沒有公開原始碼,處理流程是個黑盒子
- 隱私政策會變更
免費版常見「得將使用者內容用於服務改善或模型訓練」這類條款
- 個資法與 GDPR 風險
上傳身分證、銀行帳號、客戶名單,等於把個資交給境外服務
- 合規無法追溯
公司稽核看不到、SIEM 收不到,事後要追查也沒有記錄可查
- 資料跨境疑慮
跨國、跨機房的傳輸會觸發資料跨境的合規問題
地端自架加上開源,才能把這些問題一次處理掉:所有檔案處理只發生在你自己的伺服器上,沒有雲端、沒有第三方 API、沒有 telemetry,原始碼完全公開可以逐行稽核。
41 個工具,六大分類
每個工具都是獨立頁面,左側 sidebar 一鍵切換。以下依分類整理:
填單用印
- 表單自動填寫
上傳廠商表單或申請書,自動辨識欄位並填入公司基本資料,一份 profile 對應一家公司,多公司可切換
- 用印與簽名
拖曳定位印章、簽名、Logo 到 PDF 上,所見即所得,支援批次處理與資產管理
- 浮水印
透明度、角度、尺寸可調,可平鋪填滿或定位到指定位置,直接寫進頁面 content stream,下游收到也不容易移除
用印與簽名:拖曳定位印章並即時預覽
檔案編輯
- PDF 編輯器
疊加文字、圖片、形狀、白底遮罩、標註,也可以直接刪除原 PDF 上的文字與圖片
- PDF 壓縮
三段預設,或進階自訂 DPI 與字型子集化
- 多頁合併(N-up)
2、4、6、8、9、16 頁合併到一張
- 檔案合併與頁面分拆
基本的 PDF 操作
- 頁面轉向、頁面整理、頁碼
排版與編排調整
- 註解平面化
把註解燒進頁面內容,收件方無法移除,表單欄位仍保留可填
- 掃描拼合
證件正反面等多張掃描檔,自動抓出有內容的區塊、保留原彩色,依原位置合成到同一張 A4 白底,淡灰底會自動淨白
PDF 編輯器:受 Scribus 啟發的 frame-based 疊加模式
這裡先說明定位:PDF 編輯器走的是輕量、夠用就好的路線,不是 Acrobat 等級的完整編輯器。原 PDF 當背景,上面疊加內容,應付日常蓋章、補字、塗銷、加註綽綽有餘;複雜的版面重排、跨頁文字自動斷行重排不在範圍內。
內容處理
- 擷取文字
輸出 TXT、Markdown、Word、ODT,可選用 LLM 重排段落
- 擷取圖片
嵌入圖片自動去重,可勾選下載 ZIP
- PDF 附件萃取
取出 PDF 內嵌的 EmbeddedFiles
- 字數統計
總字、字元、段落、句子,附四張互動圖表,可匯出 CSV、JSON、Markdown
- 註解整理
擷取 PDF 註解輸出完整清單、審閱報告或待辦清單,可依類型與作者篩選
- 逐句翻譯
接地端 LLM 逐句翻譯,左原文右譯文並排對照
- OCR 文字辨識
掃描 PDF 或圖片變成可選取的文字,雙引擎(EasyOCR 預設、Tesseract 備援)
- 清單處理
一行一筆做排序、去重、篩選、取頭尾、大小寫轉換,可組合多個操作
- 電子發票處理
掃台灣電子發票 QR Code,自動建檔與分類會計科目
- 乘車證明整理
台鐵、高鐵乘車證明 PDF 自動整理成報帳表格
- 統編查詢
8 位統編反查,或以公司、機關、學校名稱與地址模糊搜尋,支援批次查詢
- 送件前檢核
自動檢核頁面尺寸、字型嵌入、欄位完整、敏感資料殘留與隱藏內容
格式轉換
- 文書轉 PDF
Word、Excel、PowerPoint、ODF 批次轉 PDF
- 文書轉圖片
每頁轉成 PNG,五段 DPI 可選,從 100 草稿到 400 印刷
- 圖片轉 PDF
拖入多張圖片,逐頁排序、旋轉、刪除,輸出單一 PDF
- PDF 轉 Markdown
轉成結構化 Markdown,保留標題、表格、粗體,適合餵 LLM 或做 RAG 預處理
- Markdown 轉文書
套用主題後輸出 PDF、DOCX、ODT
- PDF 轉文書檔(Beta)
PDF 反轉成 Word 或 OpenDocument,三種引擎可選
- PDF 轉簡報檔
PDF 反轉成 PPTX 或 ODP,一頁對一張投影片,投影片尺寸沿用原稿
需要注意的是,處理 Word、Excel、PowerPoint、ODF 的工具需要 Office 引擎,會用到 OxOffice 或 LibreOffice(優先使用 OxOffice,這是 OSSII 維護的台灣本地化 fork,CJK 支援較好),介面上會以扳手圖示標示。其餘 28 個工具只處理 PDF、純文字與圖片,不需要 Office 引擎。安裝腳本會自動偵測並補裝。
資安處理
- 文件去識別化
偵測身分證、手機、Email、統編、信用卡、銀行帳號、公司名稱、人名等個資,可選擇編修或遮罩
- 文字去識別化
純文字版本,額外偵測 IP、hostname、AD DN、API token 等 IT 資料,log 送 AI 前先清乾淨
- PDF 密碼保護與解除
AES-256 加密與權限控制,也支援批次解除密碼
- 中繼資料清除
作者、標題、XMP、修訂歷史一鍵清空
- 隱藏內容掃描
JavaScript、嵌入檔、隱藏文字、外部連結等風險,一鍵清除
- 文件差異比對
兩份文件並排比對,Office 檔案會自動先轉 PDF
- 文字差異比對
直接貼兩塊文字立即比對,不用上傳,適合 log、code、改稿快速 diff
- 註解清除
刪除 PDF 註解,可全部刪除或依作者、類型篩選
文件去識別化:偵測完成後可逐筆勾選並即時預覽編修結果
去識別化有兩種處理方式,差異務必分清楚:編修(Redaction)是真正從 PDF 內容流移除,不可還原;資料遮罩(Masking)則是保留版面格式但內容遮蔽,方便產出對外文件。
幾個我自己最常用的工具
41 個工具講完會太長,這裡挑幾個開發動機比較明確、實際使用頻率也最高的來說。
OCR 文字辨識
常常收到 PDF 掃描檔但想複製裡面的文字怎麼辦?我用 macOS 內建的預覽程式是有支援這個功能,但其他平台就沒那麼方便了。
所以順手把 OCR 加了進來,讓本質是圖片的 PDF 裡面的文字變成可以選取、可搜尋:
- 純本地識別
檔案不須經過別人的主機
- 支援多種語言
雙引擎架構,中日韓辨識準確度高,頁內可直接預覽拖選驗證
- 可搭配本地 LLM Server 加強
校正常見 OCR 錯字,提升準確率
- 支援外部 GPU 識別伺服器
每頁從 CPU 的 8 到 15 秒,降到 GPU 的 0.3 到 0.8 秒,快 10 倍以上;連不上會自動退回本機
OCR 文字辨識:掃描 PDF 變可選取文字,頁內直接以 PDF.js 預覽驗證
PDF 轉文書檔(Beta)
這是使用者提出最多次的需求:「可不可以加入 PDF 轉可編輯的 DOCX 檔?」
其實我自己沒有這種需求,內建的輕量 PDF 編輯器已經解決我大部份的應用,但既然這麼多人問,還是把它生出來了。目前提供三種轉檔引擎:
- pdf2docx
老牌引擎,開發公司 Artifex 已經停止開放原始碼版的維護,但效果還是相當不錯,跨平台相容性高、速度也快
- jtdt-reform
我自己開發的引擎,依 PDF 實際版面座標用幾何規則重組成可流動、可編輯的內文。大部份情況下 pdf2docx 比較強,但遇到一些特殊格式的 PDF 時反而是這支比較好
- jtdt-layout
以極盡還原 1:1 排版為目標,把每頁內容依原始座標放進頁面錨定的文字方塊,位置、圖片、框線幾乎 1:1 保留,字型也儘量自動挑選同類替代。表單、多欄、含框線表格最接近原 PDF
選用 pdf2docx 時,可以加選我開發的 jtdt-refine 強化轉換效果。輸出格式支援 .odt(LibreOffice / OxOffice)與 .docx(Microsoft Word)兩種。
轉檔完成後會自動產出前 6 頁的轉檔前後對照預覽圖,方便判斷這份檔案適用哪一種引擎。
PDF 轉文書檔:三引擎可選,轉完直接前後對照逐頁比對品質
注意兩個轉檔路徑的差異:pdf2docx 是直出 .docx,若選 .odt 會自動再轉一次;jtdt-reform 是直出 .odt,若選 .docx 也會自動再轉。另外要提醒的是,jtdt-layout 換得的 1:1 版面,代價是採用較多文字方塊來滿足位置還原能力,本質是浮動文字方塊而非流動式文字段落。
另外有不少人也需要簡報,所以後來追加了 PDF 轉簡報檔,可以轉出 .odp 或 .pptx。
電子發票處理
身為校長兼撞鐘的創業者,每期營業稅申報前登打紙本發票都是痛苦,直到有一天終於受不了了,忽然驚覺:我不是正在搞 jt-doc-tools 嗎?乾脆在裡面做個工具快速處理電子發票不就好了?
於是就有了這個工具:
- 手機連續掃描
手機登入開啟連續掃描,或是電腦加裝 webcam 本機掃也可以
- 自動識別建檔
自動對應公司名稱、自動對應會計科目
- 即時同步
電腦端瀏覽器登入同一帳號,可即時看到掃描結果
- 可搭配本地 LLM Server
做會計科目更精確的判讀
- 多種匯出格式
純文字、文件、試算表皆可,共 7 種格式,欄位標題可自訂以對應公司會計系統的匯入欄位
- 自動檢查
可啟用買方統編檢查與發票期別檢查,不符者自動標示紅色提醒
配對方式也很單純:桌機按「手機掃描」會跳出一張一次性配對 QR Code,手機掃過後就在手機瀏覽器開啟鏡頭,掃到的發票自動同步回桌機。不用插線、不用 USB、不用裝 App,同一個 LAN 就能用。
電子發票處理:手機掃 QR Code 即時推回桌機表格,含統編反查與會計科目判讀
乘車證明與高鐵模式
又到準備差旅報銷的時期,常搭高鐵的朋友都知道(唔,其實我是搭台鐵),電子乘車證明的 PDF 檔有密碼,每次下載完都要在那邊對密碼、輸入解開,如果車票一多會瘋掉。
剛好批次 PDF 解除密碼的功能已經做好了,就順便加入「高鐵模式」:只要把一批乘車證明電子檔拉進去,它就會自動解除密碼,並將檔名重新命名為乘車日期。
解完之後再交給 乘車證明整理,自動把日期、交通工具、來源與目的、費用整理成表格,欄位可自訂,最後匯出報帳用的檔案。
我的工作區
工具多了以後就會遇到一個問題:同一份檔案要在工具之間來回下載再上傳。所以後來加了「我的工作區」,把跨工具的暫存檔案留在伺服器上。
- 存至工作區
各工具輸出的 PDF 或 PNG 一鍵保留在伺服器,綁帳號隔離,只有自己看得到
- 從工作區載入
任何工具的上傳區一鍵取回,可以跨工具接力,例如 OCR 後蓋章、再去識別化
- 管理員控管
可開關整個功能(停用即完全隱藏),統一設定每人容量額度、單檔上限與保留時數
認證關閉的單機模式下,工作區為單機共用。
LLM AI 加值(選用)
有 11 個工具支援接自己的 LLM,接上之後可以開啟智慧選項。這裡務必先講清楚:核心工具完全不依賴 LLM,預設關閉,沒設定也照樣 100% 可用。
支援任何 OpenAI 相容的後端,本機 Ollama、vLLM、LM Studio、jan.ai、DGX Spark 都可以。以下是幾個實際有感的應用:
- 逐句翻譯
分句送 LLM 翻譯並排對照,內建台灣繁體 IT 用詞表,可選填文件領域 hint(法律、醫療、技術)讓專業用詞更準,並行翻譯讓批次處理快 4 到 8 倍
- 擷取文字的段落重排
把被 PDF 版面切散的句子重新接回自然段落
- 表單自動填寫的校驗
填完後用視覺模型 review 每個欄位的渲染結果,偵測欄位錯位、截斷、checkbox 沒勾對。30 欄的廠商表不用逐欄人工校對,只看 LLM flag 的那幾欄
- 去識別化補偵測
regex 抓固定格式,LLM 額外抓「客戶代號 A-2024-0815」「主管 王經理」這類與上下文相關的案例
- OCR typo 校正
比對前後文校正常見錯字。內建幻覺防護,僅在前後 word count 完全相同時才套用,避免 LLM 自由發揮改字
- 送件前檢核的語意與視覺驗收
檢查必填欄是否真有填、敘述是否前後矛盾,並用視覺模型檢查蓋章是否壓字、頁面排版是否破損
- 電子發票會計科目判讀
依賣方統編、公司名與行業批次判定會計科目,內建規則先過,LLM 補規則漏抓的
逐句翻譯:接地端 LLM 並排對照,文件內容不外傳
LLM 功能在 /admin/llm-settings 啟用,內建 SSRF 防護(URL allowlist 加上雲端 metadata host blocklist),內網 LAN IP 允許,但雲端 metadata IP 會被拒。
企業管理功能
啟用認證之後,企業環境必備的管理能力一次到位,而且全部開源,沒有付費版差異。
認證與 SSO
同時支援本機帳號、LDAP、Active Directory。同名帳號可以分屬不同領域並存,例如 jason@local(救援用)加上 jason@ldap(日常登入),各自獨立的角色與權限,登入時從下拉選擇來源。
另支援 SSO 單一登入(OIDC 與 SAML),可以接 Microsoft 365 / Entra ID、Google Workspace、Keycloak、Okta、Authentik 等,首次登入自動建帳號、IdP 群組對應角色,並支援單一登出(SLO)。
還有 Reverse Proxy SSO(Kerberos / SPNEGO):已加入 AD 網域、已登入 Windows 的使用者,經前端 nginx 驗證後自動登入,免再輸入帳密;非網域電腦仍會回到登入頁用其他方式登入。以「信任的反向代理 IP 加上標頭覆寫」防偽造。
權限矩陣:RBAC 角色與工具權限逐項設定
角色與權限矩陣
7 個內建角色:管理員、稽核員、一般使用者、文管、財務、業務、法務資安。可以自訂新角色,並把工具使用權限指派到使用者、群組或 OU。權限查詢走 in-memory cache,不影響效能。
稽核記錄與記錄轉送
登入、登出、失敗鎖定、權限變更、設定變更,以及工具呼叫含上傳檔名,全部記下來。以 async 方式寫入 SQLite(WAL 模式)不影響服務效能,可篩選與匯出 CSV,預設保留 90 天自動清理。
記錄轉送支援三種格式:syslog(RFC 5424 UDP/TCP)、CEF(ArcSight)、GELF(Graylog),可多目的地並行,失敗會 retry 3 次後降級為本地稽核事件。要接 Splunk、Graylog、ArcSight 或其他 SIEM 都可以。
職責分離與強制 2FA
啟用認證後,系統會自動建立兩個內建帳號 jtdt-admin 與 jtdt-auditor,分屬不同角色。這個設計的用意是把「管系統的人」與「看記錄的人」完全分開,符合 ISO 27001 等合規規範的職責分離(separation of duties)要求。
- admin 不能看使用者隱私頁面
上傳記錄、表單填寫、用印簽名、浮水印歷史這四頁,admin 看不到,只有稽核員能唯讀檢視
- 稽核員不能動系統設定
使用者、角色、認證、字型、API token 都改不了,也不能使用任何工具
- 稽核員強制 TOTP 2FA
第一次登入會被導向自動 setup 流程,稽核員自己不能停用,admin 也無法替稽核員取消強制
- 稽核員自身行為也留痕
每次檢視會寫一筆 auditor_view 事件,admin 看得到稽核員看了什麼,但稽核員自己刪不掉
- 兩個帳號都不能被刪除
受 is_admin_seed 與 is_audit_seed 保護,權限矩陣裡也鎖住不能改
除了內建的 jtdt-auditor,管理員也可以用 sudo jtdt audit-user create <name> 增加任意數量的稽核員,適合大公司 IT、法務、內稽分權審視,每個稽核員各自獨立 2FA。另外,2FA 不只限稽核員,任何使用者(包含 LDAP / AD 帳號)都可以在「我的帳號」自助啟用。
若遇到忘記密碼或 LDAP 設錯導致無法登入,可以用 CLI 離線復原:jtdt auth show / disable / set-local、jtdt reset-password <user>,不需重灌也不會掉資料。
安裝
三個平台都是一行指令安裝,需要系統管理員權限。安裝過程會自動偵測並補裝 OxOffice 或 LibreOffice、下載獨立的 Python 環境、註冊系統服務並設定開機自動啟動。
Linux 與 macOS
curl -fsSL https://raw.githubusercontent.com/jasoncheng7115/jt-doc-tools/main/install.sh | sudo bash
Windows 10 / 11
建議到 GitHub Releases 下載 jt-doc-tools-x.y.z-setup.exe 點兩下安裝,不必開 PowerShell 貼指令。安裝精靈為繁體中文,並含解除安裝功能。Windows 版的程式碼簽章由 SignPath.io 提供。
安裝完成後,瀏覽器開啟 http://127.0.0.1:8765/ 即可使用。安裝時間約 5 到 15 分鐘,PyTorch 的 700 MB 是大頭,實際時間依網速而定。
系統需求
- 作業系統
Ubuntu 20.04 以上、Debian 11 以上、macOS 12 以上、Windows 10 1809 以上
- 磁碟
最低 12 GB,建議 20 GB 以上。OS 基底約 2 GB,安裝峰值約 8 GB,完成後常駐約 3 GB
- 記憶體
最低 2 GB 可用,建議 4 GB 以上
- 架構
x86_64 或 arm64,Apple Silicon 與 Windows 11 ARM 都支援
- Python
不需預裝,uv 會自動下載獨立的 3.12
升級與移除
# Linux / macOS sudo jtdt update sudo jtdt uninstall # Windows(以系統管理員身分執行 PowerShell) jtdt update jtdt uninstall
移除時加上 --purge 會連同資料一起刪除。
兩種部署模式
- 單機模式(個人用)
安裝完直接用,預設不啟用認證,適合一人的桌面工作流
- 伺服器模式(團隊或企業)
部署到 Linux server,到「認證設定」啟用本機帳號、LDAP 或 AD,搭配角色與權限矩陣、稽核與記錄轉送,供內網多人共用並可控管
安全性注意事項
這部分請務必看完再部署。
請勿直接對公開網際網路開放
同仁多半會用它處理公司內部或機密文件,包含合約、報價、個資、統編資料等,直接對外開放等於把這些文件與後台一併暴露,有資料外洩風險。
另外本工具會解析上傳的 PDF、Office 與圖片,底層是 MuPDF、LibreOffice、Pillow 這類記憶體不安全的原生程式,屬於高風險攻擊面。
首選是只在內網或 VPN 使用。若因業務必須對外,屬於風險自負,至少要做到反向代理加 HTTPS、認證、強制 2FA、WAF 或速率限制,並持續更新相依套件。
非本機存取一律走反向代理加 HTTPS
只要不是「本機單人」使用,任何網路存取、多人共用、內網其他電腦或對外,一律放在 nginx(或 Caddy)反向代理加 HTTPS 後面,絕不要把 :8765 直接對網路開放。
應用程式預設只綁 127.0.0.1:8765,是純 HTTP 沒有 TLS,直接對外等於明文傳輸帳號密碼與文件內容。反向代理負責 TLS 終結、HSTS、憑證、隱藏版本與安全標頭。
如果內網環境受信任、暫時要直接對內網開放,可以用 jtdt bind 0.0.0.0 修改 systemd / launchd / Windows Service 設定並重啟,要綁特定 port 則是 jtdt bind 0.0.0.0:9999。完整的反向代理範例(nginx、Caddy、Apache、HAProxy、Traefik、IIS ARR、F5 BIG-IP)在專案的 OPS.md 裡,三個常見地雷也都標註出來了。
輸出結果僅供輔助參考
表單自動填寫、去識別化、OCR、LLM 校對這些功能的輸出,最終正確性仍須由使用者確認。對重要文件請務必對照原檔複核。
另外在安全性實作上,OWASP Top 10(2025)全 10 項都有對應的自動化測試,細節記在 SECURITY.md;密碼採 scrypt、支援 TOTP 2FA 與職責分離,並以 GitHub Dependabot 加 CodeQL 每週自動掃 CVE 與做 SAST。
結論
jt-doc-tools 最初只是為了解決我自己的使用情境:報帳要登打發票、乘車證明要一張張解密碼、掃描檔想複製文字、廠商表單每次都要重填一遍。做著做著就變成 41 個工具的整合平台了。
但核心的重點只有一個:所有檔案處理只發生在你自己的伺服器上,原始碼完全公開。Apache 2.0 授權,沒有任何雲端、沒有第三方 API、沒有 telemetry。每一行程式碼,你、客戶、內稽或第三方資安顧問都能逐行檢視,沒有混淆過的 binary,也沒有閉源元件。
可以單機模式安裝在個人電腦或內部主機上自己使用,也可以伺服器模式部署在公司內網提供團隊多人使用,同一份程式碼,兩種用法。
如果你也有類似的煩惱,或是公司剛好沒有預算買商用 PDF 軟體但又不想讓文件流出去,歡迎試用。有問題或需求也歡迎到專案回報,前面提到的 PDF 轉文書檔就是這樣被使用者推著做出來的。
參考資料
- jt-doc-tools:原始碼庫(GitHub)
https://github.com/jasoncheng7115/jt-doc-tools
- Jason Tools 文件工具箱:專案介紹頁
https://jasoncheng7115.github.io/jt-doc-tools/
- 安裝說明(INSTALL.md)
https://github.com/jasoncheng7115/jt-doc-tools/blob/main/INSTALL.md
- 維運與反向代理設定(OPS.md)
https://github.com/jasoncheng7115/jt-doc-tools/blob/main/OPS.md
- 認證與 SSO 設定(AUTH.md)
https://github.com/jasoncheng7115/jt-doc-tools/blob/main/AUTH.md
- LLM 功能設定(LLM.md)
https://github.com/jasoncheng7115/jt-doc-tools/blob/main/LLM.md
- 資安說明(SECURITY.md)
https://github.com/jasoncheng7115/jt-doc-tools/blob/main/SECURITY.md
- REST API 手冊(API.md)
https://github.com/jasoncheng7115/jt-doc-tools/blob/main/API.md








